1. 程式人生 > >利用iptables的SNAT功能實現區域網共享上網

利用iptables的SNAT功能實現區域網共享上網

今天,碰到一個問題:區域網內有5臺機器,只有一個公網IP。現在的需求是5臺機器都要能夠訪問外網。這可怎麼辦呢?當然是使用SNAT了。話雖這麼說,可是,在配置的時候,竟然折騰了半天!下面好好總結一下:

  1. 情景介紹:區域網內的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)。

  2. 開啟node1這臺機器的ipv4轉發功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    (就是因為這個忘記了,折騰了好久!)
    還有,這個修改在機器重啟的時候仍然會失效。要想永久有效,還要把/etc/sysctl.conf檔案裡邊的net.ipv4.ip_forward的值改為1。

  3. 修改其他機器的預設閘道器:
    因為要讓 node1 這臺機器幫我們轉發流量,所以,將其他機器的預設閘道器設定成 node1 的內網IP(也就是192.168.180.121)

  4. 在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
    (因為這條規則沒有儲存,所以重啟後失效;怎樣儲存防火牆規則,請參考其他教程)

本文只是簡單介紹了大致的操作,原理性的知識以及詳細介紹請參考其他教程。