1. 程式人生 > >使用iptables實現外網轉發內網

使用iptables實現外網轉發內網

server1: 外網ip 106.39.160.33 內網ip 10.10.0.5 server2: 10.10.0.58:27017  (mogodb埠) 目標:外部訪問server1 106.39.160.33:27017 轉發到 10.10.0.58:27017 1、開啟linux轉發功能:    echo 1 > /proc/sys/net/ipv4/ip_forward    vi /etc/sysctl.conf,把net.ipv4.ip_forward設定成1,如:net.ipv4.ip_forward = 1    優點:重啟伺服器或網路服務後自動開啟ip轉發功能    修改立即生效    sysctrl -p 2、實現轉發:
   PREROUTING 和 POSTROUTING 區別:             落實到網絡卡上,對於每個網絡卡資料流入的時候必然經過pre,數量流出必然經過post。   #當資料包進入路由時,將目標ip為106.39.160.33的資料包的目的ip修改為10.10.0.58   iptables -t nat -A PREROUTING -d 106.39.160.33 -p tcp --dport 27017-j DNAT --to 10.10.0.58   #當資料包發出時,將其目的ip為10.10.0.58的 源ip地址 修改為 10.10.0.5   iptables -t nat -A POSTROUTING -d 10.10.0.58 -p tcp --dport 27017-j SNAT --to 10.10.0.5   # 允許路由轉發 目的ip為10.10.0.58 目的埠為 27017 的所有包   iptables -A FORWARD -p tcp -d 10.10.0.58 --dport 27017 -j ACCEPT 知識擴充
1. 首先要明白什麼是"PREROUTING" ,什麼是"POSTROUTING",我們可以簡單的用下面的關係來表示

源地址傳送資料--> {PREROUTING-->路由規則-->POSTROUTING} -->目的地址接收到資料

當你使用:iptables -t nat -A PREROUTING -i eth1 -d 1.2.3.4 -j DNAT --to 192.168.1.40
時,你訪問1.2.3.4,linux路由器會在“路由規則”之前將目的地址改為192.168.1.40,並且Linux路由器(iptables)會同時記錄下這個連線,並在資料從192.168.1.40返回時,經過linux路由器將資料傳送到那臺發出請求的機器。所以你的"POSTROUTING"規則沒有起作用。


而"POSTROUTING"是“路由規則”之後的動作。
2. PREROUTING的應用
一般情況下,PREROUTING應用在普通的NAT中(也就是SNAT),如:你用ADSL上網,這樣你的網路中只有一個公網IP地址(如:61.129.66.5),但你的區域網中的使用者還要上網(區域網IP地址為:192.168.1.0/24),這時你可以使用PREROUTING(SNAT)來將區域網中使用者的IP地址轉換成61.129.66.5,使他們也可以上網:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j SNAT 61.129.66.5


3. POSTROUTING的應用
POSTROUTING用於將你的伺服器放在防火牆之後,作為保護伺服器使用,例如:
A.你的伺服器IP地址為:192.168.1.2;
B.你的防火牆(Linux & iptables)地址為192.168.1.1和202.96.129.5

Internet上的使用者可以正常的訪問202.96.129.5,但他們無法訪問192.168.1.2,這時在Linux防火牆裡可以做這樣的設定:
iptables -t nat -A POSTROUTING -d 202.96.129.5 -j DNAT 192.168.1.2

結:最要緊的是我們要記住PREROUTING是“路由規則”之前的動作,POSTROUTING是“路由規則”之後的動作!
4. SNAT,DNAT,MASQUERADE的區別 SNAT,DNAT,MASQUERADE都是NAT
MASQUERADE是SNAT的一個特例
SNAT是指在資料包從網絡卡傳送出去的時候,把資料包中的源地址部分替換為指定的IP,這樣,接收方就認為資料包的來源是被替換的那個IP的主機
MASQUERADE是用傳送資料的網絡卡上的IP來替換源IP,因此,對於那些IP不固定的場合,比如撥號網路或者通過dhcp分配IP的情況下,就得用MASQUERADE
DNAT,就是指資料包從網絡卡傳送出去的時候,修改資料包中的目的IP,表現為如果你想訪問A,可是因為閘道器做了DNAT,把所有訪問A的資料包的目的IP全部修改為B,那麼,你實際上訪問的是B

因為,路由是按照目的地址來選擇的,因此,DNAT是在PREROUTING鏈上來進行的,而SNAT是在資料包傳送出去的時候才進行,因此是在POSTROUTING鏈上進行的

[http://blog.csdn.net/hiccupzhu/article/details/51073557]