四表五鏈

image.png
- 路由決策的規(guī)則(可通過(guò) ip route show 查看)
路由表根據(jù)數(shù)據(jù)包的 目標(biāo) IP 進(jìn)行匹配(與路由條目中的 dst 字段對(duì)比)
最長(zhǎng)前綴匹配: 選擇子網(wǎng)掩碼最長(zhǎng)的路由條目(如 192.168.1.0/24 優(yōu)先于 192.168.0.0/16)
路由決策的輸出: 確定出口網(wǎng)卡(oif):如 eth0、eth1。
確定下一跳網(wǎng)關(guān)(via):如 192.168.1.1。
影響 NAT 行為:出口網(wǎng)卡決定了 SNAT 的 IP(如從 eth0 發(fā)出時(shí),SNAT 會(huì)使用 eth0 的 IP)
報(bào)文流向:
- 流入本機(jī):PREROUTING --> INPUT-->用戶空間進(jìn)程
- 流出本機(jī):用戶空間進(jìn)程-->OUTPUT--> POSTROUTING
- 轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING
- 影響路由決策
- 影響dnat
- 影響conntrack的一致性
完整流程與 NAT 的關(guān)系
網(wǎng)卡入
→ PREROUTING (raw → mangle → nat[DNT]) # DNAT 修改目標(biāo) IP
→ 路由決策(匹配目標(biāo) IP) # 根據(jù) DNAT 后的 IP 選擇出口
→ FORWARD (mangle → filter) # 過(guò)濾轉(zhuǎn)發(fā)包
→ POSTROUTING (mangle → nat[SNAT]) # SNAT 修改源 IP
→ 網(wǎng)卡出
- 抓包是在網(wǎng)卡處的
- 修改IP是在內(nèi)核處理的
為什么 NAT 要分階段修改
NAT 類型 階段 依賴條件 目的
DNAT PREROUTING 需在路由決策前修改目標(biāo) IP 確保路由能正確轉(zhuǎn)發(fā)到新目標(biāo)(如將公網(wǎng) IP 映射到內(nèi)網(wǎng)服務(wù)器)。
SNAT POSTROUTING 需在路由決策后確定出口網(wǎng)卡 確保源 IP 與出口網(wǎng)卡一致(如內(nèi)網(wǎng) IP 改為公網(wǎng) IP 后從 eth0 發(fā)出)。
總結(jié)
路由決策規(guī)則:
主要匹配 目標(biāo) IP,策略路由可額外匹配源 IP。
出口網(wǎng)卡決定 SNAT 的 IP。DNAT 在 PREROUTING:
先修改目標(biāo) IP,再路由。SNAT 在 POSTROUTING:
先路由確定出口網(wǎng)卡,再修改源 IP。