我有许多远程服务器,它们都通过 GRE 隧道连接到单个中央服务器。隧道流量仅从远程服务器流向中央服务器。
因此,对于 50 个远程服务器,我通常在中央服务器上有 50 个 GRE 隧道,并在隧道设置中指定相应的远程服务器 IP 地址:
ip tunnel add greXX mode gre remote <remote-IP-XX> local <local-IP> ttl 255
我想知道是否可以使用单个 GRE 隧道接口来接收来自所有远程服务器的流量并尝试指定0.0.0.0
为远程 IP 地址:
ip tunnel add greXX mode gre remote 0.0.0.0 local <local-IP> ttl 255
坦率地说,它有效,但我没有找到有关此功能的任何文档。
那么,使用这个黑客技术是否安全,或者是否存在我尚未发现的限制?
答案1
是的。在各种情况下,这是期望例如,思科 DMVPN 的工作原理如下。
这通常被称为甲基化GRE(多点 GRE)。
您还需要ip neigh add
使用 Linux 上的 openNHRP 手动或自动添加对等点(如果我没记错的话,这将创建与 DMVPN 第 2 阶段兼容的 VPN)。否则通信将无法进行。
示例设置
节点1:
ip tunnel add mgre0 mode gre ttl 64 local 192.0.2.1
ip addr add 10.0.0.1/24 dev mgre0
ip neigh add 10.0.0.2 lladdr 198.51.100.1 dev mgre0
ip neigh add 10.0.0.3 lladdr 203.0.113.1 dev mgre0
节点2:
ip tunnel add mgre0 mode gre ttl 64 local 198.51.100.1
ip addr add 10.0.0.2/24 dev mgre0
ip neigh add 10.0.0.1 lladdr 192.0.2.1 dev mgre0
ip neigh add 10.0.0.3 lladdr 203.0.113.1 dev mgre0
节点3:
ip tunnel add mgre0 mode gre ttl 64 local 203.0.113.1
ip addr add 10.0.0.3/24 dev mgre0
ip neigh add 10.0.0.1 lladdr 192.0.2.1 dev mgre0
ip neigh add 10.0.0.2 lladdr 198.51.100.1 dev mgre0
等等。
注意事项:
ip neigh
命令添加邻居,“lladdr”代表链路级地址,因此它将对等网络级地址映射到链路级地址。对于以太网上的 IPv4,对等地址是 IPv4,而“lladdr”将是 MAC 地址,最终您将得到无 ARP 的静态以太网。ARP 使此过程自动化。对于在 IPv4 上运行 IPv4 的 GRE,对等地址和“链路级”(OSI 下层)地址恰好是 IPv4。国家公共卫生计划,下一跳解析协议,是一种互联网协议,在这种设置中充当 ARP 协议的角色。
最后的话
不要试图通过消除加密和身份验证来获得“效率”,即使你认为“对于你的应用程序来说,这完全没问题”。将要迟早会以你现在甚至无法预料的最恶劣的方式进行反击。如今加密如此便宜,因此收益不会明显(我测量了它另一天;这个速度不是很快的系统能够加密 12 GB/s,足以使 100 千兆位链路饱和)。您应该使用 IPSec 保护它;这还将为您带来允许某些节点存在于 NAT 后面的好处(它将使用 IPSec 的 NAT-T 封装,但为此您需要实现 openNHRP)。
虽然我上面建议的建立多点隧道的方法可行,但在 Linux 中设置起来比在锡克或者WireGuard这使得构建类似的全网状 VPN 变得容易得多。仅对 openNHRP(Cisco DMVPN 互操作性)使用 mGRE 是合理的。