DD-WRT,从 WAN 转发 http 的 TCP 端口 80 不起作用?

DD-WRT,从 WAN 转发 http 的 TCP 端口 80 不起作用?

我在路由器上运行的是 DD-WRT 固件,版本DD-WRT v24-sp2 (12/12/11) 标准

我正在尝试将端口 80 上的流量转发http到我电脑的本地 IP,192.168.2.97,尽管我可以在 LAN 上浏览托管网站,但当我从场外远程 IP 尝试浏览时,我得到的是“连接已超时“。

有人可以看一下链接的 iptables 转储吗这里并帮助我找到正确的 iptables 语法以使端口转发正常工作?我对 iptables 很陌生,不知道如何编写必要的语法。

编辑netstat -ano | find "80"来自 Web 服务器的输出(运行 IIS 的 Windows 7):

  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    192.168.2.97:1869      207.46.124.39:80       ESTABLISHED     3860
  TCP    192.168.2.97:43794     74.125.229.36:80       TIME_WAIT       0
  TCP    [::]:80                [::]:0                 LISTENING       4
  UDP    127.0.0.1:48000        *:*                                    3132
  UDP    127.0.0.1:48001        *:*                                    2420

编辑iptables -t nat -LDD-WRT 命令提示符的输出:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       icmp --  anywhere             my.wan.ip to:192.168.2.1 
DNAT       tcp  --  anywhere             my.wan.ip tcp dpt:www to:192.168.2.97:80 
DNAT       tcp  --  anywhere             my.wan.ip tcp dpt:www to:192.168.2.97 
TRIGGER    0    --  anywhere             my.wan.ip TRIGGER type:dnat match:0 relate:0 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       0    --  192.168.2.0/24       anywhere            to:my.wan.ip 
RETURN     0    --  anywhere             anywhere            PKTTYPE = broadcast 

编辑iptables -t nat -vnL来自 DD-WRT 接口的输出:

Chain PREROUTING (policy ACCEPT 165K packets, 18M bytes)
 pkts bytes target     prot opt in     out     source               destination         
   38 47952 DNAT       icmp --  *      *       0.0.0.0/0            my.wan.ip       to:192.168.2.1 
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            my.wan.ip       tcp dpt:80 to:192.168.2.97:80 
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            my.wan.ip       tcp dpt:80 to:192.168.2.97 
47056 6024K TRIGGER    0    --  *      *       0.0.0.0/0            my.wan.ip       TRIGGER type:dnat match:0 relate:0 
Chain OUTPUT (policy ACCEPT 4753 packets, 418K bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain POSTROUTING (policy ACCEPT 4753 packets, 418K bytes)
 pkts bytes target     prot opt in     out     source               destination         
87913   10M SNAT       0    --  *      vlan2   192.168.2.0/24       0.0.0.0/0           to:my.wan.ip 
    0     0 RETURN     0    --  *      br0     0.0.0.0/0            0.0.0.0/0           PKTTYPE = broadcast 

编辑routeDD-WRT 命令提示符的输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
74.178.55.1     *               255.255.255.255 UH    0      0        0 vlan2
192.168.2.0     *               255.255.255.0   U     0      0        0 br0
74.178.55.0     *               255.255.255.0   U     0      0        0 vlan2
169.254.0.0     *               255.255.0.0     U     0      0        0 br0
239.0.0.0       *               255.0.0.0       U     0      0        0 br0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         adsl-74-178-55- 0.0.0.0         UG    0      0        0 vlan2


结论:我已经受够了 DD-WRT。

我已经把我的布法罗 WZR-HP-G300NH2现在已经几十次了。尝试了下面的许多建议。在 DD-WRT 论坛上发布,但大多没有得到回应。查看了其他替代固件,如 OpenWRT、Gargoyle、HyperWRT、Tomato。其中,带有 Gargoyle 的 OpenWRT 看起来很有希望,但 Gargoyle 特别不支持我的路由器(WZR-HP-G300NH 受支持,但不支持 WZR-HP-G300NH)2)。

我迄今为止取得的最大进展是安装了 OpenWRT 和 Luci(一个 Web 管理插件),此前我浏览了数百个论坛帖子,试图找到解决方案或变通方法来解决大量构建和配置以及其他错误,但我遇到的都是简短而无用的帖子,这些帖子回答了与我类似的问题,例如“只需使用 {某些库或选项或配置重新编译,这对开发人员来说似乎非常常规,但对于新手来说却不是}”或“只需尝试 {做一些显而易见的事情,你可能已经尝试过了,我可以在睡梦中做,但并不特别在意详细说明}”。

显然我做错了什么,因为按照这个并尝试通过 Luci 应用一些配置更改后,路由器在重启后又变砖了。如果我觉得这样,我会再次尝试刷新它,看看我需要做什么来避免再次出现这种情况,并希望最终得到一个可以正常工作的路由器或至少是一个可以使用的交换机。

与此同时,我又买了一台路由器,希望出厂固件能够完成看似简单的端口转发任务。感谢 kce 和所有尝试过的人。

答案1

...版本 DD-WRT v24-sp2 (12/12/11) 标准。

您没有提供修订号,这是一条重要信息。目前唯一推荐的修订号是 13064 或 14869。dd-wrt ​​固件的大多数修订版都被认为是不稳定且有缺陷的。

以下是来自论坛主题

升级(或降级)到本节列出的论坛推荐版本之一,特别是如果您正在运行 SP1 或 v24 final (05/21/08 )13064 或 14896。如果您想要稳定性,请坚持使用此主题或 redhawk0 公告中的推荐版本。在撰写本文时,最新的官方版本是 v.24 SP1。SP1 有很多问题。它会自发地破坏华硕 WL500W 路由器。

所有这些论坛推荐的版本都是 BETA 版本,尚未“完成”。尽管您自行承担使用它们的风险,但论坛推荐的版本已经过彻底测试并且运行良好,肯定比 SP1 更好。浏览论坛并查看其他人的评论。

最新版本(例如 16xxx 或 17xxx 版本)比推荐版本更新,仅供测试使用。它们不是新的和“改进的”,并且没有发布,因为它们显然更好。它们通常存在大量问题。如果没有,它们会在论坛上被推荐。因此,请注意,如果您安装的版本与此处推荐的版本不同,则您正在测试版本,您可能会发现它不起作用。每个版本在论坛中都有一个“构建线程”,该线程是在版本发布时创建的。在该线程中报告问题,但不要在构建线程中寻求有关路由器的帮助。如果您想要一个总体稳定的版本,请使用本说明或 REDHAWK0 推荐的构建线程中推荐的版本之一!此规则的唯一例外是,如果您使用的是非常新的路由器,并且该路由器需要初始刷新比 15962 更新的版本,在这种情况下大多数人应该使用 17990 或 18000(基本上相同)。

总结: The newest builds, such as the 16xxx or 17xxx builds, that are newer than the recommended builds have been released for TESTING only... OFTEN they have massive problems.

编辑:您说您通过从远程 IP 地址连接来测试转发。为了确保万无一失,您不会尝试从 LAN 连接到 WAN 接口的 IP 地址,对吗?NAT 环回该修订版本以及 15760 之后的任何版本均已损坏。

我强烈建议你按照我链接的帖子将固件降级到推荐的版本之一,除非你有一个非常不这样做的令人信服的理由。

编辑2:嗯。我看你的降级没有成功。很遗憾听到这个消息。不幸的是,这可能是 DD-WRT 固件的问题,有关的问题被认为是题外话。我得出这个结论的原因是你的 iptables 看起来不错,并且端口转发与你的 Linksys 路由器正常工作)。

我的建议是 1) 在 DD-WRT 论坛发帖(首先阅读所有常见问题解答),2) 提交错误报告或 3) 购买真正的路由器。我使用 DD-WRT 时遇到的问题很多,绝不会推荐任何人使用它。此外,我发现 COTS“路由器”也同样不可靠。

答案2

将以下四个命令(2 个 insmod 和 2 个 iptables)添加到路由器的启动命令窗口(路由器的菜单路径:管理 --> 诊断)。将它们粘贴到路由器的 shell 命令窗口中,然后单击保存启动按钮以将它们传输到路由器的启动命令窗口中:

修改ipt_mark

修改 xt_mark

iptables -t mangle -A PREROUTING -i !`get_wanface` -d`nvram 获取 wan_ipaddr` -j MARK --set-mark 0xd001

iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE

最好的方法是将上述四个命令原封不动地复制并粘贴到路由器中,每行一个命令。这样做可以保证你不会犯错误,因为我敢打赌你已经受够了!

将它们保存到路由器的启动命令列表中后,重新启动路由器并从 WAN 侧测试端口转发。

这应该可以解决问题。

如果这对您有用,就像对我有用一样,请在这里回复!

问候,Lino

答案3

您的规则目前看起来没什么问题;所以另一种可能性是您的 ISP 或中间人阻止了 dport 80... 简单的测试方法是:

添加 DNAT 规则,将对其他端口的请求转发到您的内部服务器 - 即:

iptables -t nat -I PREROUTING -p tcp --dport 32100 -d <wanIP> -j DNAT --to 192.168.2.97:80

然后打开浏览器并访问http://<wanIP>:32100

如果仍然失败,那么很可能与 pMTUd 问题有关。

答案4

您的 iptables 列表仅适用于默认filter表(与相同iptables -t filter -L),它用于传统的直接路由,但对于您来说不够用 - 您使用网络地址转换(NAT)。

在这种情况下,相关设置在nat表中(通过 ssh 连接到您的路由器并发出iptables -t nat -L);它应该包含类似这样的内容:

Chain PREROUTING (policy ...)
target     prot opt source               destination
DNAT       tcp  --  anywhere             your_internet_ip_address       tcp dpt:80 to:192.168.2.97:80

当然,从外面你需要连接到http://你的互联网 IP 地址,而不是http://192.168.2.97,请原谅我说出显而易见的事实。

不知道如何通过 DD-WRT v24 GUI 实现它。在 v23 上我通过它实现了它,Applications&Gaming -> Port ForwardingDNAT 运行良好。

更新 1:所以,您确实有一个适当的 DNAT 规则。

我注意到了另外一件事。您有一个针对端口 80 的 TRIGGER 规则。手册上说

通过设置端口触发规则,您可以允许入站流量到达特定的 LAN 主机 [...] 如果 PC 从这些端口发送出站流量,则转发范围内的传入流量将被转发到该 PC。

这与普通的端口转发 (DNAT) 完全不同,很可能与之冲突。触发通常用于连接回的应用程序(通常是多人游戏),我不明白为什么有人会希望它用于端口 80。

相关内容