LINUX IPTABLES端口映射設置html
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端口,設置以下:tcp
1. iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp –dport 81 -j DNAT –to-destination192.168.0.2:8180spa
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.1htm
真實的傳輸過程以下所示:接口
假設某客戶機的ip地址爲6.7.8.9,它使用本機的1080端口鏈接1.2.3.4的81端口,發出的ip包源地址爲6.7.8.9,源端口爲1080,目的地址爲1.2.3.4,目的端口爲81.ip
主機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接口發出.ci
此時鏈接跟蹤表中有一項:路由
鏈接進入: src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81get
鏈接返回: 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
經過上面的例子,咱們就知道iptables 端口映射設置其實不難!