今天,碰到一个问题:局域网内有5台机器,只有一个公网IP。现在的需求是5台机器都要能够访问外网。这可怎么办呢?当然是使用SNAT了。话虽这么说,可是,在配置的时候,竟然折腾了半天!下面好好总结一下:
情景介绍:局域网内的5台机器的IP地址分别是
192.168.180.121-node1
192.168.180.122-node2
192.168.180.123-node3
192.168.180.124-node4
192.168.180.125-node5每台机器都有2块网卡(eth0和eth1),我们上面给出的5个内网IP都是配置在每一台机器的eth0这块网卡上面。
另外,我们将node1这个机器上的eth1网卡配置一个外网IP(119.75.218.76)。
开启node1这台机器的ipv4转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
(就是因为这个忘记了,折腾了好久!)
还有,这个修改在机器重启的时候仍然会失效。要想永久有效,还要把/etc/sysctl.conf文件里边的net.ipv4.ip_forward的值改为1。修改其他机器的默认网关:
因为要让 node1 这台机器帮我们转发流量,所以,将其他机器的默认网关设置成 node1 的内网IP(也就是192.168.180.121)- 在node1 机器上使用iptables 命令进行设置,将其他机器的流量通过这个可以访问外网的机器转发出去:
iptables -F
iptables -X
iptables -Z
这三条命令将防火墙规则清空。
之后,使用下面的命令进行流量转发:
iptables -t nat -A POSTROUTING -s 192.168.180.0/24 -o eth1 -j SNAT –to-source 119.75.218.76
(因为这条规则没有保存,所以重启后失效;怎样保存防火墙规则,请参考其他教程)
本文只是简单介绍了大致的操作,原理性的知识以及详细介绍请参考其他教程。