我正在使用具有以下硬件的双路由器设置:
Netgear WNDR3400V2-192.168.1.1-DD-WRT
Belkin F9K1105 v1 - 192.168.1.50 - 库存固件
Belkin 被设置为一个交换机,我有一个网络服务器连接到它。
[互联网] -> Netgear -> Belkin -> 服务器
当内部连接时,它会正确记录我的 IP(例如 192.168.1.51)当连接时外部,所有 IP 均视为 192.168.1.1(主路由器的 IP)
当然,当不在第二个路由器后面时,这可以正常工作,但不幸的是,我当前的设置是出于必要。
我想知道是否可以获得一些关于如何正确地从服务器“查看”外部 IP 地址的具体说明。
提前致谢!
答案1
问题似乎出在 DD-WRT 设置的默认 iptables 规则上。
删除 POSTROUTING 中的 MASQUERADE 行可以解决这个问题,外部连接不再显示为主路由器的内部 IP。
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE 0 -- anywhere anywhere
SNAT 0 -- 192.168.1.0/24 anywhere to:1.1.1.1
RETURN 0 -- anywhere anywhere PKTTYPE = broadcast
删除上面列表中的第一个元素:
iptables -t nat -D POSTROUTING 1
关于上述修复的更多信息可以在这里找到:https://www.reddit.com/r/HomeNetworking/comments/40swj2/firewall_log_shows_router_ip_for_all_incoming/cyxaz3t/
现在,一切都应该正常工作。
附注:如果您无法再从内部 IP 通过外部 IP 访问您的服务,则可能需要执行以下一项或两项操作(我需要两项操作):
确保在“DD-WRT -> 安全 -> 防火墙”上取消选中“过滤 WAN NAT 重定向”
运行以下命令:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE
将两个 192.168.1.0/24 都替换为与您的设置相关的内容。
为了简化此操作,我建议将其保存在“管理 -> 命令”下的防火墙脚本中
iptables -t nat -D POSTROUTING 1
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE