![(Zywall USG 300)通过域名从 LAN 访问内部服务器时绕过 NAT](https://linux22.com/image/586090/%EF%BC%88Zywall%20USG%20300%EF%BC%89%E9%80%9A%E8%BF%87%E5%9F%9F%E5%90%8D%E4%BB%8E%20LAN%20%E8%AE%BF%E9%97%AE%E5%86%85%E9%83%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%E7%BB%95%E8%BF%87%20NAT.png)
我的情况是这样的;我在我们的联合网络解决方案中托管了许多网站。网络上基本上分为 3 类:
- 已知公众,通过 mac 注册,获得静态 dhcp 租约
- 匿名局域网连接,从特定的 dhcp 范围获得租约
- 交换机,unix主机防火墙
现在,考虑关注感兴趣的主机
- 111.111.111.111(Zywall USG 300 WAN)
- 192.168.1.1 (ZyWall USG 300 LAN) 负载平衡和带宽监控以及处理 NAT
- 192.168.1.2 (Linux www) 为 mydomain1.tld 和 mydomain2.tld 提供服务
- 192.168.123.123(随机 LAN 客户端)从 LAN 访问 mydomain1.tld
- 23.234.12.253(随机外部客户端)通过 WAN 访问 mydomain1.tld
DNS A 记录的设置使得 mydomain1.tld 和 mydomain2.tld 都指向 111.111.111.111 - 并且 Linux www 使用 VirtualHost 配置提供 http 部分,设置文档根目录 pr ServerName,但这并不是那么有趣。
NAT 规则将 111.111.111.111:80 转换为 192.168.1.2:80 (1:1 NAT),如下所示:
- 类型:虚拟服务器
- 接口:WAN
- 原始 IP:任意
- 映射 IP:192.168.1.2
- 原始端口:80
- 映射端口:80
当 NAT-Loopback 被激活时,它会导致设备无法从外部接口访问(虽然还没有尝试过,如果它使 LAN -> WAN IP:80 工作)
我们的问题如下;
访问时http://mydomain1.tld从外部(23.234.12.253 示例主机)连接网络 - 一切正常,zywall 通过端口 80 接收请求并将其映射到 linux 主机的 httpd。但是 - 一旦尝试从 LAN 端(内部,192.168.123.123 示例主机)穿过 NAT,就会被 Zywall 端口 80 防火墙过滤。
我知道这一点只是因为 443 端口对管理界面开放,并且https://mydomain1.tld提示 zywall 登录。
所以我的结论是,访问 111.111.111.111 的 LAN 实际上被路由到 192.168.1.1,同时绕过了 NAT 表。
我需要知道如何设置 NAT/策略路由,以便 LAN > WAN > LAN 能够通过正确的网络转换运行,而不是执行“快速名称服务器查找”或任何可能的操作。
答案1
解决方案最终是维护内部 DNS 查找表(很像 /etc/hosts 文件),我在其中输入 mydomainX.tld 并将其映射到其适当的 IP。虽然想解决这个问题,但有一个悬赏,寻求一个允许 LAN -> WAN IP : PORT 通过 NAT 表的答案
答案2
所以我自己也为此苦苦挣扎,最后找到了答案。要使它工作,请使用标准 NAT 规则(允许全世界访问网站的相同规则),只需调整规则,使原始 IP 成为 WAN IP。然后您可以启用 NAT 环回,一切正常。
如果您还有其他问题,请告诉我。