我在我们的 VPC 中的私有网络中有两台服务器,都具有公共 IP 和私有(10.0.0.0/24)子网。
- 服务器1配置为NAT(ubuntu 18.04)
- 服务器 1 仅具有以下配置,没有其他配置,即
sysctl -w net.ipv4.ip_forward=1 && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- 服务器 2 只是一个简单的服务器,它应该使用 NAT 服务器(服务器 1)来处理传出流量。
- 两个服务器都使用
ens10
专用网络和eth0
公共 IP接口
我已启用以下网络配置,并路由Server 2
至通过以下方式路由传出流量Server 1
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address x.x.x.x #public-ip
netmask 32
#Private network interface
auto ens10
iface ens10 inet dhcp
post-up ip route add default via 10.0.0.1
传出流量按预期工作,因为我可以毫无问题地访问互联网,并且我看到的是 NAT IP,而不是服务器 2 的公共 IP。
但是当我尝试使用服务器 2 的公共 IP(即 SSH 或访问其他端口)连接到它时,它没有回复。尽管我只能通过本地网络访问服务器 2。
除此之外,一旦我删除路由,post-up IP route add default via 10.0.0.1
我就可以通过它的公共 IP 到达Server 2
,但所有传出的流量也会路由到主接口,而这并不是我想要的。
似乎当数据包到达服务器 2 上的 eth0 时,它们会被路由到 ens10 网关 10.0.0.1,也许这就是为什么如果我有上面提到的路由,我就无法回复。
请给我指明正确的方向,我现在有点陷入困境。
提前致谢。
答案1
您需要“分割隧道”:
eth0
在接口配置下添加以下规则
auto eth0
iface eth0 inet static
address x.x.x.x
netmask 32
post-up ip rule add iif lo from x.x.x.x table 123
post-up ip route add y.y.y.y dev eth0 table 123
post-up ip route add default via y.y.y.y table 123
(yyyy 是网关地址)
通过上述规则和路由表(回复),流量源自主机本身,以公共地址作为源地址将通过 eth0 出去。
注意:添加配置后,您可能需要重新启动整个服务器,因为仅重新启动网络服务可能会失败。
答案2
好吧,我回答我自己的问题。openvpn 服务器推送重定向网关。我在客户端选项中添加了“route-nopull”以使用 VPN 表限制流量。解释如下: 忽略重定向网关