最近在研究linux双网卡共享网络的情况
简单来说就是一台linux有两块网卡,比如eth0及eth1,eth0可以正常连接外网,eth1连接内部网络,那么可以通过iptables实现eth1内部网络上的设备共享eth0的网络,即linux充当网关的作用
此处研究网络上的教程一大堆,利用iptables增加了很多条规则,但是每个教程还都不太一样,所以自己去研究了下iptables的具体教程,发现网上很多教程都是冗余了很多不相关的指令,真正有用的就是iptables的NAT启用,下面以图示拓扑说一下详细内容
1、首先linux默认是关闭ip包转发的功能,需要开启一下
vim /etc/sysctl.conf
将net.ipv4.ip_forward = 0修改为1
这样重启系统以后每次都是默认开启了
正常来说一个电脑主机只接收目的地址是本机的地址,如果不是本机的ip包会被丢弃掉,开启这个ip包转发功能,就是说如果不是本机的ip包,也会接收并转发出去
上图就是iptables的数据流转链的介绍,iptables是内核的功能设置,INPUT和OUTPUT针对的是应用层程序
2、开启linux的NAT功能
这个NAT功能就是将非本机地址的ip包修改源地址后从连网的网口发出去
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
这个-t nat的意思是下面操作nat的表
-A POSTROUTING的意思是在POSTROUTING的链上增加此规则
-o eth0 的意思是设置包的出口为eth0(此处可依据实际的网卡名称来填写)
-j MASQUERADE 的意思是动态源地址转换
实测下来只增加此一条规则就行了,至于其他教程还会在INPUT链及FORWARD链增加ACCEPT规则,但是我看了默认规则其实都是ACCEPT的,单纯为了NAT转发的话没必要再额外增加,如果为了安全或者其他目的,大家可自行研究,此处不深入讨论
3、在内网的电脑上设置网关地址
上述1、2步骤是设置此linux电脑,第3步是设置内网需要共享网络的其他电脑,IP地址不用变,网关地址设成linux电脑的eth1的ip地址。
例如linux的eth1的地址
ip:192.168.1.100
掩码:255.255.255.0
那同网域的其他电脑,比如A电脑地址在修改之前为
IP:192.168.1.110
掩码:255.255.255.0
网关:空(或者其他)
那么手动把A电脑的地址改成如下即可
IP:192.168.1.110
掩码:255.255.255.0
网关:192.168.1.100
DNS: 8.8.8.8(或者114.114.114.114)
需要注意的是DNS一定不要忽略掉,因为linux是没有配置dns解析服务的