DNAT 用于通过代理将子网连接到互联网

DNAT 用于通过代理将子网连接到互联网

DNAT 用于通过代理将子网连接到互联网

我想通过代理服务器将子网中的服务器连接到互联网。但我无法 ping 通互联网上的主机(www)。实际上,子网服务器和代理服务器共享一个公共专用服务器(使用 docker 虚拟化)。有两个网卡(代理服务器为 eth0,子网服务器为 t39)。因此,一般布局如下:

互联网 <==> 171.16.0.39 | 191.167.1.1 <==> 191.167.1.2

191.167.1.2 是子网服务器的内部地址,而 171.16.0.39 是外部地址,191.167.1.1 是代理服务器的内部地址。

首先,我在子网服务器上设置了静态路由: ip route add 171.16.0.39 via 191.167.1.1

问题 1:我是否还需要明确定义这样的默认网关? route add default gw 191.167.1.1 eth0 或者选择外部地址是正确的方法吗?

然后我在代理服务器的 iptable 中设置了一个 Masquerade: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

现在可以从子网服务器 ping 通代理服务器。但我无法从代理服务器 ping 通互联网(例如 8.8.8.8)。

为了解决我的问题,我还考虑建立这样的 DNAT(在代理服务器上): iptables -t nat -A PREROUTING -d 171.16.0.39 -j DNAT --to-destination 191.167.1.2

但这并不能解决我的问题。我仍然无法从子网服务器 ping 通互联网。

问题 3:我是否需要结合 MASQUERADE 配置 DNAT 才能 ping 互联网?如果需要,我是否选择了错误的地址?

最后我听说,如果有 MASQUERADE 配置,SNAT 就不是必需的。

问题4:即使我已经设置了MASQUERADE,是否还建议配置SNAT?

我真的很困惑,该如何处理这个问题。虽然这似乎是一个非常常见的配置,但我过去几天在 Google 上的研究并没有让我更接近解决问题。

有人对我的问题有一些提示吗?

答案1

所以我解决了这个问题:

正如我已经猜到的那样,我必须在 191.167.1.2 上设置一个单独的网关条目: route add default gw 191.167.1.1

现在,当 MASQUERADE 处于活动状态时,我通过代理将子网服务器连接到 www。

相关内容