NAT路由問題 - Linux

Table of Contents

最簡單的SNAT拿來當作分享器用的話

假設我實體IP為66.111.222.33

假設某一虛擬192.168.56.101送封包給Google

這時候會在IPTable裡面加上一筆192.168.56.101的資料

然後把封包來源改成66.111.222.33後送出去給Google

Google收到這封包後回傳給66.111.222.33

這時候SNAT攔截到了封包去查看IPTable發現有對應資料

於是乎把目的66.111.222.33改成192.168.56.101

如此一來完成NAT的功能

========================================================

但是我的問題是假設有另一台192.168.56.102也丟封包給Google

這時候Google要回傳封包

那NAT要怎麼知道這回應封包要轉給101還是102呢

TCP可以看seq和ack但其他的封包類型似乎沒辦法

我想到的方法是每個port對應到NAT的其中一個port

例如192.168.56.101:80→66.111.222.33→30080
192.168.56.101:21→66.111.222.33→30021
192.168.56.102:80→66.111.222.33→40080

除此之外是不是有什麼實作方法?

上網查詢很久都查不到相關資料

懇請前輩們解惑

謝謝

--

All Comments

Daniel avatarDaniel2012-01-11
就是你想的這樣,server平常也是回傳給來源的port
Irma avatarIrma2012-01-14
就是你想的那樣.. 其實這個東東正確說法叫 PAT !
Oscar avatarOscar2012-01-16
Port Address Translation!
Sierra Rose avatarSierra Rose2012-01-20
port:都可以,設定怎麼寫就怎麼分配, ICMP就過不去囉
Caitlin avatarCaitlin2012-01-25
應該說直接連連去的ICMP是不通的,就是直接看到NAT那台機器
Heather avatarHeather2012-01-27
從裡面出去的ICMP,NATserver可以知到誰做了什麼,所以從外面傳
David avatarDavid2012-01-28
回的封包是可以決定是給裡面那一台機器的,只是要多做一些判斷
ie.NAT裡的電腦還是可以ping google之類的
Sandy avatarSandy2012-02-02
http://tools.ietf.org/html/rfc5508
NAT Behavioral Requirements for ICMP