看板 Linux 關於我們 聯絡資訊
最簡單的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 除此之外是不是有什麼實作方法? 上網查詢很久都查不到相關資料 懇請前輩們解惑 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.243.145.116 fasthall:轉錄至看板 LinuxDev 01/07 21:04
kdjf:就是你想的這樣,server平常也是回傳給來源的port 01/07 22:49
asimon:就是你想的那樣.. 其實這個東東正確說法叫 PAT ! 01/08 01:44
asimon:Port Address Translation! 01/08 01:45
那再請問一下這些port是指定好的還是動態分配的? 還有像是ICMP這種檔頭沒有port的protocol該怎麼辦呢? ※ 編輯: fasthall 來自: 111.243.145.116 (01/08 10:28)
kdjf: port:都可以,設定怎麼寫就怎麼分配, ICMP就過不去囉 01/08 12:21
kdjf:應該說直接連連去的ICMP是不通的,就是直接看到NAT那台機器 01/08 12:23
kdjf:從裡面出去的ICMP,NATserver可以知到誰做了什麼,所以從外面傳 01/08 12:24
kdjf:回的封包是可以決定是給裡面那一台機器的,只是要多做一些判斷 01/08 12:26
kdjf:ie.NAT裡的電腦還是可以ping google之類的 01/08 12:26
謝謝您的資訊 我現在正在不用module寫一個簡易nat 目前就是ICMP有疑惑 所以有可能兩台主機同時ping google結果出問題對嗎? 我想可以在table裡面每筆entry加上TTL 可是這樣還是好像還是不能防止nat server路由ICMP出錯 ※ 編輯: fasthall 來自: 111.243.145.116 (01/08 13:29)
kdjf: http://tools.ietf.org/html/rfc5508 01/08 14:30
kdjf: NAT Behavioral Requirements for ICMP 01/08 14:30
感謝您的資料 正在研讀中,十分有用! ※ 編輯: fasthall 來自: 111.243.145.116 (01/08 16:43)