Linux-Networking
Linux GRE 隧道:遠端地址參數
Linux GRE隧道作為兩個參數,本地地址和遠端地址。假設我有兩台路由器,左邊一台在 NAT 外,右邊一台在 NAT 內,那麼我想在左右路由器之間創建一條 GRE 隧道。我很清楚右側,本地地址應該是自己的地址,遠端地址應該是對等公共地址。但是在左側,我認為路由器在連接之前不會知道對等地址,那麼我將如何為其設置“遠端”地址?
提前致謝。-木本
對於其他協議,您應該按預期做:只為遙控器放置公共 IP。
例子:
left
: 192.0.2.10NAT系統:198.51.100.20 / 192.168.0.1
right
(在 NAT 後面):192.168.0.30
left
(例如,您正在為10.10.10.1/24 和10.10.10.2/24設置隧道的 IPright
,這無關緊要)你需要告訴
left
路由器remote
是 198.51.100.20,而對於right
路由器來說,remote
是 192.0.2.10。現在需要注意的是:它實際上取決於 NAT 系統上的設置*,以防它執行 Linux*。
如果這個 NAT 系統也是 Linux,
- 當然,它必須至少
right
為協議 gre (47) 執行 SNAT/MASQUERADE,以防它沒有通用規則(但見後文),- 雖然通常協議的 NAT 通常會自動提取相關的 conntrack 模組,但 GRE 不會發生這種情況。您必須手動執行
modprobe nf_conntrack_proto_gre
,否則不會發生 NAT,並且隧道將無法工作。奇怪的是,從測試來看,nf_nat_proto_gre
似乎不需要(單獨也不夠)。- 如果沒有等價
DNAT
於SNAT/MASQUERADE
,則只right
應向 發起流量left
。如果在不活動後將left
流量發送到right
(實際上是 NAT 系統),這將不起作用,並且 conntrack 條目可能會阻止長達 30 秒(嘗試結束後)right
向left
. 一旦“建立”,“OK”計時器上升到 180 秒。所以你真的應該考慮添加一個DNAT
規則 fromleft
toright
來完成相反的SNAT/MASQUERADE
規則。在這樣的 Linux NAT 系統上,您可以使用 來驗證發生了什麼
conntrack -L -p gre
,它必須在 GRE 隧道活動之後有一個條目,或者缺少正確的模組。