所有传入连接均使用我的主路由器的 IP(2 个路由器设置)

所有传入连接均使用我的主路由器的 IP(2 个路由器设置)

我正在使用具有以下硬件的双路由器设置:

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 访问您的服务,则可能需要执行以下一项或两项操作(我需要两项操作):

  1. 确保在“DD-WRT -> 安全 -> 防火墙”上取消选中“过滤 WAN NAT 重定向”

  2. 运行以下命令:

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

相关内容