如何使用UFW/iptables和DD-Wrt在不同机器之间正确进行端口转发?

如何使用UFW/iptables和DD-Wrt在不同机器之间正确进行端口转发?

这是我的网络

家庭网

我想从我家外面看到我的 ip_camera (192.168.3.4:80)。它位于 dd-wrt ​​路由器(192.168.3.1)上,没有互联网。路由器 192.168.1.1 有互联网。但是,我有一个树莓派服务器,有两个接口连接到两个路由器:eth0 192.168.1.0/24 和 eth1 192.168.3.0/24。

所以,这就是我所做的:

在路由器 dd-wrt ​​192.168.1.1,Web 前端,端口转发部分,从 10080 的任何 tcp/ip(来自 wan)转发到 lan 192.168.1.2:10080

然后在 Raspberry 上(同时使用 iface eth0 192.168.1.2 和 eth1 192.168.3.2),按如下方式配置 UFW:

DEFAULT_FORWARD_POLICY="ACCEPT" (/etc/default/ufw)

net.ipv4.ip_forward=1 (/etc/ufw/sysctl.conf)

并在 before.rules (在文件的开头)中添加以下行:

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp -d 192.168.1.2 --sport 10080 -j DNAT --to-destination 192.168.3.4:80
COMMIT

因此,如果我使用随机客户端 PC(例如 192.168.1.15),我可以在浏览器地址上完美访问我的相机:

http://192.168.1.2:10080

这意味着它工作正常。但我无法从互联网外部看到我的相机。

我尝试添加到 UFW:

ufw allow proto tcp from any to 192.168.3.4 port 80

并重新启动 UFW,但运气不佳。

有人可以帮我吗?

当我从互联网(179.39.4.14)访问我的 Raspberry 服务器时,我注意到这些输出 tcpdumping:

03:19:11.324244 IP 179.39.4.14.41346 > 192.168.1.2.10080: Flags [S], seq 2032441512, win 14600, options [mss 1452,sackOK,TS val 16154060 ecr 0,nop,wscale 8], length 0
03:19:27.131917 IP 179.39.4.14.41345 > 192.168.1.2.10080: Flags [S], seq 389083091, win 14600, options [mss 1452,sackOK,TS val 16155640 ecr 0,nop,wscale 8], length 0
03:19:27.359709 IP 179.39.4.14.41346 > 192.168.1.2.10080: Flags [S], seq 2032441512, win 14600, options [mss 1452,sackOK,TS val 16155664 ecr 0,nop,wscale 8], length 0

当我从 192.168.1.15(我的家庭网络)到达它时

03:21:54.799050 IP 192.168.1.15.13094 > 192.168.1.2.10080: Flags [S], seq 2661860721, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
03:21:54.802330 IP 192.168.1.2.10080 > 192.168.1.15.13094: Flags [S.], seq 3834946478, ack 2661860722, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 1], length 0
03:21:54.803718 IP 192.168.1.15.13094 > 192.168.1.2.10080: Flags [.], ack 1, win 68, length 0

我观察到不同的效果。在 LAN 上(工作正常),正在进行双向通信。但是,我的 Raspberry 服务器只能看到来自互联网的传入请求,但不会注册任何返回。我认为我的问题的关键就在那里,但我不知道我是否必须在 UFW(或其他地方)中编辑某些内容以允许这种双向交换。

可能与“相关,已建立”概念有关?我不知道...

非常感谢。 GTZ,塞尔吉奥。

答案1

从概念上讲,您想要:

  • NAT 从 192.168.1.2:(r-Pi 服务器 IP?)到 192.168.3.4:80(摄像机)[完成]
    • 通过 192.168.1.2 访问摄像机来检查此端口转发是否正常工作:[检查]
  • NAT 从 192.168.1.1: 到 192.168.1.2: [未完成?]
    • 通过观察 192.168.1.2 上的流量来检查此端口转发是否正常工作。
  • 打开出站路由器上的端口 192.168.1.1 [未知];

您已正确完成第一步。现在您所需要的只是 Internet 和 192.168.1.0/24 网络之间的另一个映射。这是相同的过程,因此应该很容易实现。我不使用 ufw 或 dd-wrt,因此您需要研究它是如何完成的。

您相关的、既定的规则不应该产生干扰。这些通常在 INPUT 链中用于跟踪已知的入站连接并跳过规则集的其余部分。

相关内容