![使用通过 GRE 隧道连接的服务器上的公共接口](https://linux22.com/image/620570/%E4%BD%BF%E7%94%A8%E9%80%9A%E8%BF%87%20GRE%20%E9%9A%A7%E9%81%93%E8%BF%9E%E6%8E%A5%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%85%AC%E5%85%B1%E6%8E%A5%E5%8F%A3.png)
我对网络还很陌生,所以请原谅任何术语错误。
我有 2 台通过 GRE 隧道连接的服务器。
服务器 1 (10.0.0.1) ----> 服务器 2 (10.0.0.2)
我希望能够使用 Server1 绑定到 Server2 上的公网 IP。为此,我在 Server1 上设置了与 Server2 公网 IP 的虚拟接口,然后使用 Server1 上的路由规则通过 GRE 隧道路由数据包。
在服务器1上:
ip rule add from [Server2's first public IP] table gre
ip rule add from [Server2's second public IP] table gre
ip route add default via 10.0.0.2 dev gre1 table gre
这很有效,我可以看到数据包通过 GRE 到达 Server2。我可以看到数据包在 Server2 的 gre1 设备上退出隧道,如下所示:
从服务器1:ping -I [Server2's public ip] google.com
来自 Server2 的 GRE 隧道设备的 tcpdump:
12:07:17.029160 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) [Server2's public ip] > 74.125.225.38: ICMP echo request, id 6378, seq 50, length 64
这正是我想要的数据包。但是,我没有看到它在 eth0:0(Server2 的公网 IP 绑定到的地方)上出去。
我尝试使用路由规则让来自 Server2 的公共 IP(将从 dev gre1 出来)的数据包通过公共默认网关上的 dev eth0,但这也不起作用。
我很茫然,感谢任何能帮助我的人。