Linux GRE 隧道:远程地址参数

Linux GRE 隧道:远程地址参数

Linux GRE 隧道有两个参数,本地地址和远程地址。假设我有两个路由器,左边的路由器在 NAT 之外,右边的路由器在 NAT 之内,那么我想在左右路由器之间创建一个 GRE 隧道。我很清楚右边的地址,其中本地地址应该是自己的地址,而远程地址应该是对等公共地址。但是左边的地址,我认为路由器在连接之前不会知道对等地址,那么我该如何为其设置“远程”地址呢?

提前致谢。-woody

答案1

您应该按照对其他协议的预期进行操作:仅为远程设备放置公共 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似乎不需要(单独使用也不够)。
  • 如果没有DNAT与 等效的SNAT/MASQUERADE,则只right应发起到 的流量left。如果在不活动后将left流量发送到right(实际上是发送到 NAT 系统),则此方法不起作用,并且 conntrack 条目可能会阻止最多 30 秒(在尝试结束后)right建立到 的流量left。一旦“建立”,“OK”计时器将上升到 180 秒。因此,您确实应该考虑添加从到 的DNAT规则以完成相反的规则。leftrightSNAT/MASQUERADE

在这样的 Linux NAT 系统上,您可以使用来验证发生了什么conntrack -L -p gre,它必须在 GRE 隧道活动后有一个条目,或者缺少正确的模块。

相关内容