基於win2k的,端口號為881,服務器直接連接外部網絡,客戶端通過服務器ip來訪問,而他們沒有基於Linux的服務器軟件,照他們意思就必須將服務器換成windows的。作為一個linux愛好者,我想大家都明白這種痛苦。我翻了一下資料,發現iptables的端口轉發功能可以解決,折騰了一下午,終於完成任務。下面將我的方法講一下: 思想:利用端口轉發,當服務器接收到881端口請求以後,將其轉到 10.10.2.200:881上,10.10.2.200再將數據返回給請求連接者。 Eth0:連接ADSL,即ppp0接口 Eth1:連接內部網絡,ip為10.10.1.1 10.10.2.200為win2k服務器,其端口881提供網絡服務。 a.b.c.dàppp0:881à eth1à10.10.2.200:881 ;數據進來時的路線 10.10.2.200:881àeth1àppp0:881àa.b.c.d ;數據出去時的路線 iptbles腳本: iptables -t nat -A PREROUTING -p tcp -m tcp --dport 881 -j DNAT --to-destination 10.10.2.200:881 ;將881請求轉發至10.10.2.00:881端口 iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.200 -p tcp -m tcp --dport 881 -j SNAT --to-source 10.10.1.1 ;返回a.b.b.d時數據源來自同一子網,就將其源地址更改為10.10.1.1,從eth0發出,並在連接跟蹤表中查出a.b.c.d是從ppp0進來的,又由ppp0將此數據發出。 當然不要忘了加一條允許881端口訪問的語句。 iptables –A INPUT –p tcp –dport 881 –i ppp0 –j ACCEPT 可不可把服務器放在局域內,用端口轉發來實現呢?答案當然是肯定的,既然能把881端口轉發,那麼21,80這些個端口更不在話下,而且很多服務器軟件都可以自定義端口,那就在得玩了,只要有合適的端口,即使給局域網每一個用戶開一個FTP服務器也是可以的。你想要實現什麼服務都可以,當然是基於端口轉發的。 局域網內10.10.2.101是win2k,提供www服務,端口為800 通過服務器http://serverip:800 進行訪問。 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 800 -j DNAT --to-destination 10.10.2.101:800 iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source 10.10.1.1 iptables –A INPUT –p tcp –dport 800 –i ppp0 –j ACCEPT 由於是基於端口轉發實現的,所以服務器上只需裝個iptables來轉發數據就行了,一切服務由內部服務器完成,這樣的話,我想linux服務器才真正的算是個防火牆。