Linux-Networking

Linux GRE 隧道:遠端地址參數

  • August 20, 2018

Linux GRE隧道作為兩個參數,本地地址和遠端地址。假設我有兩台路由器,左邊一台在 NAT 外,右邊一台在 NAT 內,那麼我想在左右路由器之間創建一條 GRE 隧道。我很清楚右側,本地地址應該是自己的地址,遠端地址應該是對等公共地址。但是在左側,我認為路由器在連接之前不會知道對等地址,那麼我將如何為其設置“遠端”地址?

提前致謝。-木本

對於其他協議,您應該按預期做:只為遙控器放置公共 IP。

例子:

left: 192.0.2.10

NAT系統: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設置隧道的 IP right,這無關緊要)

你需要告訴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似乎不需要(單獨也不夠)。
  • 如果沒有等價DNATSNAT/MASQUERADE,則只right應向 發起流量left。如果在不活動後將left流量發送到right(實際上是 NAT 系統),這將不起作用,並且 conntrack 條目可能會阻止長達 30 秒(嘗試結束後)rightleft. 一旦“建立”,“OK”計時器上升到 180 秒。所以你真的應該考慮添加一個DNAT規則 from lefttoright來完成相反的SNAT/MASQUERADE規則。

在這樣的 Linux NAT 系統上,您可以使用 來驗證發生了什麼conntrack -L -p gre,它必須在 GRE 隧道活動之後有一個條目,或者缺少正確的模組。

引用自:https://serverfault.com/questions/926948