[問題] NAT路由問題

看板Linux作者 (Xen)時間14年前 (2012/01/07 21:03), 編輯推噓3(307)
留言10則, 2人參與, 最新討論串1/1
最簡單的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

01/07 22:49, , 1F
就是你想的這樣,server平常也是回傳給來源的port
01/07 22:49, 1F

01/08 01:44, , 2F
就是你想的那樣.. 其實這個東東正確說法叫 PAT !
01/08 01:44, 2F

01/08 01:45, , 3F
Port Address Translation!
01/08 01:45, 3F
那再請問一下這些port是指定好的還是動態分配的? 還有像是ICMP這種檔頭沒有port的protocol該怎麼辦呢? ※ 編輯: fasthall 來自: 111.243.145.116 (01/08 10:28)

01/08 12:21, , 4F
port:都可以,設定怎麼寫就怎麼分配, ICMP就過不去囉
01/08 12:21, 4F

01/08 12:23, , 5F
應該說直接連連去的ICMP是不通的,就是直接看到NAT那台機器
01/08 12:23, 5F

01/08 12:24, , 6F
從裡面出去的ICMP,NATserver可以知到誰做了什麼,所以從外面傳
01/08 12:24, 6F

01/08 12:26, , 7F
回的封包是可以決定是給裡面那一台機器的,只是要多做一些判斷
01/08 12:26, 7F

01/08 12:26, , 8F
ie.NAT裡的電腦還是可以ping google之類的
01/08 12:26, 8F
謝謝您的資訊 我現在正在不用module寫一個簡易nat 目前就是ICMP有疑惑 所以有可能兩台主機同時ping google結果出問題對嗎? 我想可以在table裡面每筆entry加上TTL 可是這樣還是好像還是不能防止nat server路由ICMP出錯 ※ 編輯: fasthall 來自: 111.243.145.116 (01/08 13:29)

01/08 14:30, , 9F

01/08 14:30, , 10F
NAT Behavioral Requirements for ICMP
01/08 14:30, 10F
感謝您的資料 正在研讀中,十分有用! ※ 編輯: fasthall 來自: 111.243.145.116 (01/08 16:43)
文章代碼(AID): #1F24Al5S (Linux)
文章代碼(AID): #1F24Al5S (Linux)