蠻牛比左岸咖啡有效 <ruey.bbs@cis.nctu.edu.tw>
wrote in message
news:3cXA1J$GbT@bbs.cis.nctu.edu.tw...
>
> 小弟在架設NAT中, 遇到一個問題,
希望各方高手能給予建議.
>
> 基本的網路架構入下:
>
> public network <--> NAT server <--> private network
>
eth0 eth1
>
> 我將 WWW server 直接架在 private network 中, ip為
192.168.1.253
> 然後, 利用 ipmasqadm 讓 public network 可以連上
192.168.1.253 的
> 80 port. 事實上, 的確成功了!! 但問題是, 我在 private
network 中
> 無法連到 NAT server就直接幫我 redirect到 private network中的www
> server. 請問有解決的方法嗎??
>
> client與server同時存在於同一個subnet中, 沒有DMZ,
似乎很難解決這
> 樣的問題喔!!!
>
此一現象弟在前不久和網友 Ting
兄討論時就發現了﹐不過一直都想不出原因。剛才模
擬了一下這樣的環境﹕
NAT 只啟動兩張網卡﹐一張對外﹐另一張對內﹐不設 DMZ(不同子網)﹐讓轉址後的
server 與內部網路的客戶端同屬一個子網內。
所發現現象如下﹕
1﹐當客戶端送出關於 HTTP (port 80) 的連線請求至 NAT
外部界面之後﹐也就是發出
一個帶 SYN 的 TCP 封包﹐來源 port 為 1238﹐Sequence 為
43980464﹐Acknowledgement 為 0。
2﹐緊接著客戶端就收到一個來自 NAT 內部界面的 ICMP
封包﹐類型為一個 Host
Gateway 的 Redirect 封包﹐目的 IP 指向內部 server 的地址。
3﹐然後客戶端改向內部 server 發出 SYN 的 TCP 封包﹐來源 port
依然為
1238﹐Sequence 也是 43980464﹐ ACK 為 0。
4﹐接著客戶端收到來自內部 server 的 ACK/SYN 封包﹐目的 port
為 1238﹐SEQ為
1579961125﹐ACK 為 43980465。
5﹐然而奇怪的事情來了﹕客戶端卻向內部 server 送出一個
Reset 封包﹐來源 port
為 1238﹐SEQ 為 43980465﹐ACK 和 SEQ 一樣也是 43980465。
6﹐然後隔 6 秒後重複上述動作﹐之後再隔 12
秒重複﹐然後客戶端出現不能連線錯誤
信息。
假如將 URL 改為直接向內部 server 查詢﹐或是在 NAT
上啟動另一界面於不同子網做
為 DMZ﹐再將 server 搬遷過去﹐其連線就不會再出現 ICMP 的
redirect﹐而且 TCP
的 SYN -- ACK/SYN -- ACK 這三段 handshack 都能順利完成。
雖然弟對 TCP 與 socket programing
不是很熟﹐但個人認為問題出在 ICMP 那個
redirect
上面。不過﹐我暫時沒時間去做深入的追蹤﹐僅提供前面的測試信息供各位
朋友參考一下﹐同時也希望有能力者幫大家解答。
p.s.
還有這個情形也可以參考一下﹕在一個內部網路中同時使用兩條
ADSL 連接
internter 的情況下﹐要讓某些 client 透過其中一條 ADSL
去連接另一 ADSL 的
servers﹐通常的做法會去修改 routing ﹐避免封包繞 inernet
一圈回到另一端去。
但如果為了節省一個外部 IP 而讓 routing 都使用內部網路地址(在
MASQ 之內)﹐我
發現第一次連線也會遭到來自 server 端的 reset
﹐然而緊著再發一次請求﹐則可以
順利通過(具體的最大閑置間隔我記不很清楚了)。對此一現象﹐弟也是百思不解﹐如果
有哪位仁兄知道﹐拜託幫忙解惑一下。
謝謝﹗