1. 程式人生 > >運維案例:實現網段之間的主機通過指定外網IP共享上網

運維案例:實現網段之間的主機通過指定外網IP共享上網

運維需求:

172.16.1.0/24段所有主機通過124.32.54.26外網IP共享上網

解決方案:

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT –to-source 124.32.54.26
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

註釋說明:

一、引數說明:

1.-t:指定對應的iptables表

2.-A:新增規則到某個規則鏈中,該規則將會成為規則鏈中的最後一條規則

3.-s:用來比對封包的來源 IP,可以比對單機或網路,比對網路時請用數字來表示遮蔽,例如:-s 192.168.0.0/24,比對 IP 時可以使用 ! 運運算元進行反向比對,例如:-s ! 192.168.0.0/24

4.-j:引數用來指定要進行的處理動作

5.SNAT:源地址轉換,目標地址不變,重新改寫源地址,並在本機建立NAT表項,當資料返回時,根據NAT表將目的地址資料改寫為資料傳送出去時候的源地址,併發送給主機

6.–to-souce:意思就是將-s後面的地址,轉換成–to後面的地址,這個就是地址轉發的作用(NAT)

7.POSTROUTING:路由之後指定相應的iptables鏈,意思為在NAT TABLE的路由後改做什麼處理

二、規則說明

echo 1 > /proc/sys/net/ipv4/ip_forward

註釋:

1.完成nat的實現,資料要經過prerouting—forword–postrouting這3個鏈,要想實現ip轉發,需要將核心引數ip_forward的值改為1,這樣允許iptalbes FORWARD。

2.設定ip轉發許可

方法一:echo 1 > /proc/sys/net/ipv4/ip_forward

方法二:在核心引數檔案/etc/sysctl.conf中增加如下內容,然後執行:sysctl -p

net.ipv4.ip_forward = 1

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT –to-source 124.32.54.26

註釋:

1.當172.16.1.0/24網段的IP想訪問外網的時候,iptables會將源地址進行轉換成124.32.54.26,實現上外網

2.SNAT,目前大多都是解決內網使用者用同一個公網地址上網的情況(具體請看上面引數說明)

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

註釋:

1.在解釋這條規則之前,首先提出一個問題,如果不是固定的124.32.54.26怎麼辦?

解答:我們都知道當我們使用聯通或者電信上網的時候,一般它都會在每次你開機的時候隨機生成一個外網的IP,意思就是外網地址是動態變換的。這時我們就要將外網地址換成 MASQUERADE(動態偽裝):它可以實現自動尋找到外網地址,而自動將其改為正確的外網地址。

注意:地址偽裝並不適用於所有的地方哦!

相信大家看了上面這個問題之後,就明白這條規則了!

該案例來自老男孩教育