Press "Enter" to skip to content

Tag: ubuntu

使用Ubuntu做网关

在搭建Ubuntu的局域网网络环境时,往往需要独立组网,并构建内外网的沟通。在尝试了海蜘蛛、pfense、爱快之后,还是根据自己的需要来使用ubuntu搭建一个小小的软路由吧。毕竟不需要那么大的功能。
tips:
1. 海蜘蛛和pfense是基于freebsd之上的软路由,但海蜘蛛不支持在虚拟机上长期使用;
2. 爱快是基于Linux 3.18内核的软路由,并且性能是最高的,支持64位x86环境,但硬件需求也是最高的;
3. 三者都免费。


环境准备

设定ens3连接外网的网卡,ens5为虚拟机专用网卡。

$ sudo hostnamectl set-hostname gateway
#安装所需服务器软件
$ sudo apt install -y ufw dnsmasq dnsmasq-utils
$ sudo apt install -y openssh-server openssh-clients

克隆而来的虚拟机如果先前装过openssh-server的话,再连接会出现被服务器端reset的情景。
则需要执行:

$ sudo dpkg-reconfigure openssh-server

搭建DNS和DHCP服务器

这里主要是使用DNSMASQ

$ sudo vi /etc/dnsmasq.conf
———————————————————————
#DNS软件配置
#开启以下配置
domain-needed
bogus-priv
#DHCP配置
#指定DHCP监听端口
interface=ens5
#指定监听IP
listen-address=192.168.1.254
#指定不广播网络接口
no-dhcp-interface=ens3
#DHCP地址池和生效时间
dhcp-range=192.168.1.100,192.168.1.200,24h
#DHCP服务器物理地址和主机名
dhcp-host=52:54:00:3a:8a:14,gateway,192.168.1.254
#指定网关
dhcp-option=option:router,192.168.1.254
#指定时间服务器
dhcp-option=option:ntp-server,192.168.1.254
#指定DNS服务器
dhcp-option=option:dns-server,192.168.1.254
#指定网络掩码
dhcp-option=option:netmask,255.255.255.0
——————————————————————
$ sudo systemctl enable dnsmasq
$ sudo systemctl start dnsmasq

使用UFW做端口转发

UFW是Ubuntu环境下的iptables前端工具,避免了要写防火墙脚本的麻烦,而且将配置文件服务化,省了很多事情。
首先,修改/etc/sysctl.conf,添加“net.ipv4.ip_forward = 1”。
然后,修改/etc/default/ufw,将

DEFAULT_FORWARD_POLICY="DROP"

修改为

DEFAULT_FORWARD_POLICY="ACCEPT"

最后,修改/etc/ufw/before.rules文件,在最末的commit下一行添加:

# Nat rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -o ens3 -j MASQUERADE
-A ufw-before-forward -i ens5 -o ens3 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -i ens5 -o ens3 -j ACCEPT
COMMIT

一定在commit之后,而且不要忘了最后的commit

最后扫尾的防火墙配置

$ sudo systemctl enable ufw
$ sudo systemctl start ufw
$ sudo ufw allow ssh
$ sudo ufw allow ftp
$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 53
$ sudo ufw allow in on ens3 to any port 80
$ sudo ufw allow in on ens5 to any port 80
$ sudo ufw enable
$ sudo ufw reload

Fix “network ‘default’ is not active”

在笔记本上的Ubuntu桌面版中使用NAT模式的虚拟机时,会出现如下情况。
network_default_not_active
在Ubuntu的KVM虚拟化环境中,默认(default)NAT网络是由libvirtd虚拟化管理程序自动创建的。由于默认情况下,这个NAT网络是指向有线网卡的,如果只使用无线网卡的话,就会出现上述虚机无法启动的情况。
解决问题的方法就是重新手动启动default NAT 网络。

$ sudo virsh net-list --all
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              不活跃  否           是

$ sudo virsh net-start  default

$ sudo virsh net-list --all
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     否           是

$ sudo virsh net-autostart default
网络default标记为自动启动

$ sudo virsh net-list --all
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是

然后就可以启动使用default网络NAT模式的虚机了。

使用virsh console管理虚机

在KVM的虚拟化实践中,使用终端状态的虚机管理软件virsh可以完成创建、删除、管理等一系列动作。但在默认情况下,virsh使用virsh console连接虚机会出现卡住的情况。这是由于virsh console连接不上虚机的虚拟串行端口所致。

对于Ubuntu虚机,解决的方式如下:

首先,KVM环境中的虚机开启相关服务:

$ sudo systemctl start serial-getty@ttyS0
$ sudo systemctl enable serial-getty@ttyS0
Created symlink /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service → /lib/systemd/system/serial-getty@.service.

然后,无需重启客户机就可以在管理端可以看到结果

root@tc8304:~# virsh start ubuntu
域 ubuntu 已开始

root@tc8304:~# virsh console ubuntu
连接到域 ubuntu
换码符为 ^]

Ubuntu 17.04 ubuntu ttyS0

ubuntu login: 

对于CentOS7的虚机而言,则需要执行如下命令:

root# grubby --update-kernel=ALL --args="console=ttyS0"
root# reboot

MySQL的配置文件

#
# The MySQL database server configuration file.
#
# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 192.168.122.106
#
# * Fine Tuning
#
key_buffer_size     = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options  = BACKUP
max_connections        = 100
table_open_cache       = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit   = 1M
query_cache_size        = 16M
#
# * Logging and Replication
#

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
slow_query_log      = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
server-id       = 100
log_bin         = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size   = 100M
#binlog_do_db      = include_database_name
#binlog_ignore_db  = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem