我想从服务器 A 路由公共 IP 并在服务器 B 上使用它们。我创建了 GRE 隧道并且它正常工作。然后我按以下方式在服务器 A 上设置路由:
(公共 IP 不是实际 IP)192.168.11.111 通过 10.0.33.50 dev tun2
在服务器BI上将IP绑定到dev eth0并添加路由:
(公网 IP 不是实际 IP)192.168.11.111 dev eth0 scope link
我遇到的问题是,当我使用 netcat 进行测试时,没有连接。IP MASquerading 无法解决我的问题,因为它不使用来自服务器 A 的 IP。任何帮助都将不胜感激。
答案1
您的设置正在获得非对称路由。来自您这端的数据包通过隧道路由到网络8.8.8.8
中的源 IP 地址 10.0.33.0/24
。我认为 Google 的外部防火墙会丢弃具有私有网络地址的数据包,因此8.8.8.8
永远不会收到该数据包。
如果您想通过隧道将数据包路由回来,您必须在隧道的另一端使用 NAT,将源 IP 地址更改为另一端的 IP 地址。
也可能隧道的客户端使用其面向 Internet 的 IP 地址来发送数据包到隧道。在这种情况下,结果就是不对称路由。来自客户端的数据包通过隧道发送到8.8.8.8
,但8.8.8.8
直接将数据包发送到客户端自己的 IP 地址,这也可能导致问题。
答案2
我真的不想告诉你,但是你的设置存在严重问题。
(公共 IP)192.168.11.111 通过 10.0.33.50 dev tun2
您所谓的公共 IP 是私有的,不通过互联网路由。它是 RFC 1918 地址空间的一部分。在两端。这意味着设置需要在两端进行反向 NAT 和真正的公共 IP 地址才能正常工作。
答案3
问题出在服务器 B 上。我在其他服务器上测试过,成功了。不确定为什么这个特定的服务器不能使用 gre 隧道。感谢您的时间和评论。