最近碰到了这个问题,所以将解决方案记录一下.
我在vmware中安装了deepin 15.4,并且配置了两张网卡,一张连接到了vmnet8,即nat模式,所以这张网卡可以连接外网,它采用dhcp的方式获取网络地址,它的地址为192.168.140.132
,子网掩码为255.255.255.0
,网关为192.168.140.2
,为了实现域名解析,还需要配置一个dns服务器,这里选用阿里的223.5.5.5
. 此外,为了做snat的实验,我将另外一张网卡连接到了vmnet1,也就是仅主机模式,这张网卡配置的地址为10.0.0.130
.这个模式相当于配置了一个局域网,我们可以用这个网络充当内网.此外,可以将其他虚拟机连入vmnet1,这样的话,一个内网就搭建完成了.
在这期间遇到了一些问题.
解决网络不稳定
首先是,外网连接不稳定,两张网卡导致网络时断时续,然而关闭10
网段的网卡之后,网络恢复正常.
一般来说,不应该出现这样的问题的,网上查了一下,解决方案是这样的,编辑/etc/net/interfaces
,我的配置文件如下:
auto lo
iface lo inet loopback
auto ens33
# 不使用dhcp服务
iface ens33 inet static
address 192.168.140.132
netmask 255.255.255.0
gateway 192.168.140.2
dns-nameservers 223.5.5.5
上面的做法其实就是不使用dhcp
服务,自己手工配置网关等信息.配置完成之后,重新启动网卡:
sudo /etc/init.d/networking restart
此时,网络恢复顺畅.
配置SNAT
snat的配置十分简单,关于原理什么的,推荐去看一下鸟哥的linux私房菜,服务器架设篇这本书.具体而言,就是一个命令就可以了:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens33 -j SNAT --to-source 192.168.140.132
命令的意思很简单,就是对于从10.0.0.0/24这个网段发送过来的数据,如果需要转发的话,将数据包中的源地址转化为192.168.140.132
.
对了,在执行这个命令之前,还要保证ip_forward功能开启,只有这个功能开启了,你的机器才会像网关一样转发数据,否则的话,对于目的地不是本机的数据,它会直接丢弃.
至于如何开启,我们需要用 sudo 模式在 shell 或终端下执行下面的命令。
sudo -s # 切换到root用户
echo 1 > /proc/sys/net/ipv4/ip_forward # 开启ip forward
上面的命令能马上启用ip转发,但只是临时的,直到下一次重启。要永久启用,我们需要使用我们惯用的文本编辑器打开 /etc/sysctl.conf 文件,并且增加net.ipv4.ip_forward = 1到文件.