基於win2k的,端口號為881, 服務器 直接連接外部 網絡 ,客戶端通過服務器ip來訪問,而他們沒有基於 linux 的服務器軟件,照他們意思就必須將服務器換成 windows 的。作為一個linux愛好者,我想大家都明白這種痛苦。我翻了一下資料,發現iptables的端口轉發
基於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 A
CCEPT
可不可把服務器放在局域內,用端口轉發來實現呢?答案當然是肯定的,既然能把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服務器才真正的算是個防火牆。