我想从我的网络内部和外部使用我的公共地址查看我托管的页面,但到目前为止我只能从外部查看。
事情是这样的,我最近更换了 ISP,他们给我买了一台 ZTE-F660。它有路由功能,但我使用 Cisco E3200(运行 Tomato)作为路由器来管理我的网络。ZTE-F660 的功能有点有限,所以我把所有东西都转发到 E3200,然后从那里进行管理。
现在,我之前的 ISP 调制解调器似乎启用了 NAT 环回,但到目前为止,ZTE-F660 似乎不支持它。而 E3200 却支持。
问题是我无法让它工作。我认为这是因为 ZTE-F660 调制解调器正在做一些事情来阻止 E3200 路由器将公共 IP 转换为本地 IP。
如果我跑iptables -n -L -v -t nat我得到:
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes
target prot opt in out source destination
0 0 SNAT all -- * vlan2 0.0.0.0/0 0.0.0.0/0 to:192.168.0.10
0 0 SNAT all -- * br0 192.168.2.0/24 192.168.2.0/24 to:192.168.2.1
192.168。0.10是 ZTE-F660 调制解调器分配的 E3200 路由器 IP,以及 192.168.2.1是分配给家庭网络的 E3200 路由器 IP。
如果我输入http://192.168.0.10我得到了从网络外部输入我的公共 IP 所得到的响应。
我确信我遗漏了某些东西,或者没有理解某些东西。
任何帮助或见解都将不胜感激。
答案1
您可以向您的 Cisco 路由器添加环回 NAT,这样当转到公共地址时,它永远不会到达 ZTE:
iptables -t nat -A PREROUTING -i br0 -s 192.168.2.0/24 -d <static ip> -p tcp --dport 80 -j DNAT --to-destination 192.168.2.x
这是预路由,所以是第一步。如果说,如果源来自内部网络并转到端口 80 上的服务器静态 IP,则将目标 IP 设为服务器的内部 IP。
由于这是预路由,接下来会发生路由 - 它将看到目标 IP 是内部网络,并将数据包从 br0 路由回。
另一种方法是在内部安装 DNS 服务器。然后,您可以为服务器设置 DNS 名称,当服务器在外部时,该名称解析为公共地址,当服务器在内部时,该名称解析为内部地址。这样,您就不需要任何 NAT。