是否可以使用 iptables 在具有动态 IP 的路由器上设置 NAT 环回?

是否可以使用 iptables 在具有动态 IP 的路由器上设置 NAT 环回?

我已经设置了一个连接到路由器的 Raspberry Pi 家庭服务器。我有一个动态 IP。我可以使用内部 IP(192.168.0.8)访问我网络内的服务器。我还可以使用网络的公共 IP 和我创建的 noip.com 域访问我网络外的服务器。

问题是我无法使用公共 IP 地址或 noip.com 域通过 ssh 进入网络内的服务器。但是,奇怪的是,我可以在 Web 浏览器中导航(在我的网络上)到 noip.com 域,它会给我“它可以正常工作”的默认 Apache 页面(这不是由于缓存,我已经在几台设备上检查过了)。

经过一番 Google 搜索,我发现我需要在路由器上设置 NAT 环回。我的路由器(ISP 提供的)似乎不支持通过其 Web 界面(即通过 192.168.0.1)进行 NAT 环回。

但是,路由器的 Telnet 访问已启用。它运行 busybox,并且可以使用“iptables”命令。

我在我的ISP网站的论坛上找到了一个客户写的命令: http://www.skyuser.co.uk/forum/sky-router/47273-nat-loopback-dlink-2640s.html

我使用 putty 进行 telnet,但您可以使用任何一个。

我的服务器是 192.168.0.x(我的网络服务器) wan ip 是 2.xxx(用您自己的替换)服务器端口 443(对我来说是 https 但您可能希望它是不同的 iptables 您需要 2 个命令:

iptables -t nat -A POSTROUTING -d 192.168.0.150 -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.1
iptables -t nat -A PREROUTING -d 2.x.x.x -m tcp -p tcp --dport 443 -j DNAT --to-destination 192.168.0.x

您可以省略--dport 443,然后它只会将所有端口发送到您的服务器。

现在的问题是,每次你的 wan ip 改变时,你都必须重做第二个命令(有人知道这种情况发生的频率吗?)此外,你会在重新启动路由器时丢失这个命令。

第二条命令的那部分 - “iptables -t nat -A PREROUTING -d 2.xxx” - 包含公共 IP 地址:我该如何使它仅仅意味着“当前公共 IP 地址”?

如果可能的话,由于涉及解析,这是否会减慢对路由器的所有请求的速度?

答案1

iptables解析为 DNS 名称,因此在您的规则中,您可以使用 noip.com DNS 名称而不是 2.xxx。我在自己的iptables配置中使用它:

iptables -t nat -A PREROUTING -d whatever.noip.com -m tcp -p tcp --dport 443 -j DNAT --to-destination 192.168.0.x

相关内容