我们在内网的环境中,如果只有一台机器能够能外网,那么我们把这台机器做成一个网关gateway,从而实现其他机器的联网。如下图所示:
网关上面有两个网卡,其中eth0(192.168.0.1)连接内网网段,eth1(198.51.100.1)连接公网。
原理非常简单: 通过网关iptables的SNAT,将内网流量的源IP地址统一修改成网关对外IP地址(eth1的IP)。具体操作如下:
网关配置首先需要配置我们的网关,确保内网流量都走eth0网络
ip route add 192.168.0.0/16 dev eth0
然后开启网络转发并通过SNAT将IP改成对外IP。
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -o eth1 -j MASQUERADE
注意上面,我并没有直接使用SANT,而是采用MASQUERADE。MASQUERADE可以理解成动态的SNAT,如果eth1网卡地址发生变化后,会动态更新源地址。如果使用SNAT,当然在本例中也是可以跑通的,如下所示
iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -o eth1 -j SNAT --to-source 198.51.100.1
但如果修改了eth1的地址后,就需要重新设置。
其他内网节点配置最后将内网中其他机器的网关指定到网关节点即可
ip route add default via 192.168.0.1 dev eth0
这样就完成了一个网关的配置。这个原理非常简单,但如果熟悉OpenStack的用户就会发现,OpenStack里面的网关的原理就是利用这种方式实现。
最新评论