我有一个 CentOS 7,带有 2 个 NIC(enp1s0
- 专用 LAN 192.168.0.0/24 和enp0s29u1u1
- 公共),我通过 .net 将其用作网关/路由器iptables
。专用 LAN 上的所有 PC 通过网关连接到互联网。另外,我在专用 LAN 上有一些可以从任何地方访问的服务,我对这些服务使用端口转发。例如,我在 192.168.0.77 端口 80 上有一个 Web 服务器,我也可以通过 ISP 提供的公共 IP 从任何地方访问它,规则是:
-A PREROUTING -d my_public_ip -i enp0s29u1u1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.77:80
此规则的问题是我可以访问该网站:www.mysite.com 当我不在本地网络时,但是当我使用本地网络时,它只能通过私有IP:192.168.0.77工作。
我现在的完整规则是:
我还应该添加哪些其他规则才能使用公共 IP 从本地网络访问 Web 服务器?
答案1
您已将端口转发规则绑定到外部接口,但来自本地网络的流量到达网关的内部接口。因此,此流量不会转发到 Web 服务器。
简单地使端口转发可用于所有接口只是解决方案的一部分。然后,您对外部地址的连接尝试将被转发到 Web 服务器,但来自 Web 服务器的返回数据包将直接发送到局域网中的客户端,并且地址将不匹配(客户端发送到外部地址并得到答案来自内部地址)。
要使 Web 服务器能够通过本地网络内的外部地址进行访问,您必须:
- 使端口转发可用于所有接口
- 伪装发往 Web 服务器并从本地网络发送至网关本地地址的流量。