Linux系統上Iptables實現連接埠轉寄的過程

來源:互聯網
上載者:User

  看了不少關於用Iptables實現連接埠轉寄的文章,但感覺都沒有把問題說得很清楚,現接合我自己設定和使用的經曆,談談它的實現過程.

  設我們有一台電腦,有兩塊網卡,eth0連外網,ip為1.2.3.4;eth1連內網,ip為192.168.0.1.現在需要把發往地址1.2.3.4的81連接埠的ip包轉寄到ip地址192.168.0.2的8180連接埠,設定如下:

  1. Iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81 -j DNAT --to-destination192.168.0.2:8180

  2. Iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1

  真實的傳輸過程如下所示:

  假設某客戶機的ip地址為6.7.8.9,它使用原生1080連接埠串連1.2.3.4的81連接埠,發出的ip包源地址為6.7.8.9,源連接埠為1080,目的地址為1.2.3.4,目的連接埠為81.

  主機1.2.3.4接收到這個包後,根據nat表的第一條規則,將該ip包的目的地址更該為192.168.0.2,目的連接埠更該為8180,同時在串連跟蹤表中建立一個條目,(可從/proc/net/ip_conntrack檔案中看到),然後發送到路由模組,通過查路由表,確定該ip包應發送到eth1介面.在向eth1介面發送該ip包之前,根據nat表的第二條規則,如果該ip包來自同一子網,則將該ip包的源地址更該為 192.168.0.1,同時更新該串連跟蹤表中的相應條目,然後送到eth1介面發出.

  此時串連跟蹤表中有一項:

  串連進入: src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81

  串連返回: src=192.168.0.2 dst=6.7.8.9 sport=8180 dport=1080

  是否使用: use=1

  而從192.168.0.2發回的ip包,源連接埠為8180,目的地址為6.7.8.9,目的連接埠為1080,主機1.2.3.4的TCP/IP棧接收到該ip包後,由核心尋找串連跟蹤表中的串連返回欄目中是否有同樣源和目的地址和連接埠的匹配項,找到後,根據條目中的記錄將ip包的源地址由 192.168.0.2更該為1.2.3.4, 源連接埠由8180更該為81,保持目的連接埠號碼1080不變.這樣伺服器的返回包就可以正確的返回傳起串連的客戶機,通訊就這樣開始.

  還有一點, 在filter表中還應該允許從eth0串連192.168.0.2地址的8180連接埠:

  Iptables -A INPUT -d 192.168.0.2 -p tcp -m tcp --dport 8180 -i eth0 -j ACCEPT



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。