利用iptables的SNAT功能實現區域網共享上網
阿新 • • 發佈:2019-01-22
今天,碰到一個問題:區域網內有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
(因為這條規則沒有儲存,所以重啟後失效;怎樣儲存防火牆規則,請參考其他教程)
本文只是簡單介紹了大致的操作,原理性的知識以及詳細介紹請參考其他教程。