From 7f3ae64de569654cf8e0b7e699422b19870aa57c Mon Sep 17 00:00:00 2001 From: guoqiancheng Date: Mon, 29 Jun 2026 17:13:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1037 ++++++++++++++++++++++++----------------------------- 1 file changed, 470 insertions(+), 567 deletions(-) diff --git a/README.md b/README.md index 4bbec0f..90fb742 100644 --- a/README.md +++ b/README.md @@ -1,578 +1,481 @@ # 客户现场设备网络转发配置说明 -## 1. 远程访问地址对应关系 - -远程通过设备 A 的访问地址进行访问。 - -| 远程端口 | 访问目标 | 实际链路 | -| ----- | ---------- | -------------------------------------------- | -| 18101 | 设备 A 摄像头 1 | 设备 A -> 10.20.1.11:80 | -| 18102 | 设备 A 摄像头 2 | 设备 A -> 10.20.1.12:80 | -| 18002 | 设备 B 管理页面 | 设备 A -> 10.16.140.112:80 | -| 18103 | 设备 B 摄像头 1 | 设备 A -> 10.16.140.112:28011 -> 10.20.1.11:80 | -| 18104 | 设备 B 摄像头 2 | 设备 A -> 10.16.140.112:28012 -> 10.20.1.12:80 | -| 18003 | 设备 C 管理页面 | 设备 A -> 10.16.140.113:80 | -| 18105 | 设备 C 摄像头 1 | 设备 A -> 10.16.140.113:28011 -> 10.20.1.11:80 | -| 18106 | 设备 C 摄像头 2 | 设备 A -> 10.16.140.113:28012 -> 10.20.1.12:80 | - +## 1. 远程访问地址对应关系 + +远程通过设备 A 的访问地址进行访问。 + +| 远程端口 | 访问目标 | 实际链路 | +| ----- | ---------- | -------------------------------------------- | +| 18101 | 设备 A 摄像头 1 | 设备 A -> 10.20.1.11:80 | +| 18102 | 设备 A 摄像头 2 | 设备 A -> 10.20.1.12:80 | +| 18002 | 设备 B 管理页面 | 设备 A -> 10.16.140.112:80 | +| 18103 | 设备 B 摄像头 1 | 设备 A -> 10.16.140.112:28011 -> 10.20.1.11:80 | +| 18104 | 设备 B 摄像头 2 | 设备 A -> 10.16.140.112:28012 -> 10.20.1.12:80 | +| 18003 | 设备 C 管理页面 | 设备 A -> 10.16.140.113:80 | +| 18105 | 设备 C 摄像头 1 | 设备 A -> 10.16.140.113:28011 -> 10.20.1.11:80 | +| 18106 | 设备 C 摄像头 2 | 设备 A -> 10.16.140.113:28012 -> 10.20.1.12:80 | + --- -## 2. 背景说明 - -客户现场共有三台独立设备,分别为: - -* 设备 A:带 4G 网络,用作现场远程访问入口和转发网关。 -* 设备 B:无 4G,通过设备 A 的 `eth0` 所在局域网访问。 -* 设备 C:无 4G,通过设备 A 的 `eth0` 所在局域网访问。 - -每台设备都运行一套独立的业务管理服务,并且每台设备本地都连接了两台摄像头。 - -远程访问需求包括: - -1. 远程访问设备 A、B、C 的业务管理页面。 -2. 远程访问设备 A、B、C 各自本地连接的两台摄像头 Web 页面。 -3. 所有远程访问统一通过设备 A 进入,再由设备 A 转发到对应设备或摄像头。 - +## 2. 背景说明 + +客户现场共有三台独立设备,分别为: + +* 设备 A:带 4G 网络,用作现场远程访问入口和转发网关。 +* 设备 B:无 4G,通过设备 A 的 `eth0` 所在局域网访问。 +* 设备 C:无 4G,通过设备 A 的 `eth0` 所在局域网访问。 + +每台设备都运行一套独立的业务管理服务,并且每台设备本地都连接了两台摄像头。 + +远程访问需求包括: + +1. 远程访问设备 A、B、C 的业务管理页面。 +2. 远程访问设备 A、B、C 各自本地连接的两台摄像头 Web 页面。 +3. 所有远程访问统一通过设备 A 进入,再由设备 A 转发到对应设备或摄像头。 + --- -## 3. 当前设备网络结构 - -### 3.1 设备 A 网络信息 - -设备 A 是现场唯一带 4G 的设备,作为远程访问入口。 - -当前已知网口信息如下: - -```text -设备 A: -ppp0:4G 拨号网口 -eth0:10.16.140.111/22,用于连接设备 B、设备 C -eth1:10.20.1.1/24,用于连接设备 A 本地摄像头 -dev0:10.10.4.28/24,疑似穿透或虚拟网络网口 -``` - -设备 A 本地摄像头: - -```text -设备 A 摄像头 1:10.20.1.11:80 -设备 A 摄像头 2:10.20.1.12:80 -``` - -设备 A 已验证可以直接访问本地两个摄像头: - -```bash -curl -I http://10.20.1.11 -curl -I http://10.20.1.12 -``` - -返回结果均为: - -```text -HTTP/1.1 200 OK -``` - ---- - -### 3.2 设备 B 网络信息 - -设备 B 通过设备 A 的 `eth0` 网段访问。 - -```text -设备 B: -eth0:10.16.140.112 -业务管理页面:10.16.140.112:80 -``` - -设备 B 本地摄像头网段与设备 A 本地摄像头网段相同,摄像头 IP 也是: - -```text -设备 B 摄像头 1:10.20.1.11:80 -设备 B 摄像头 2:10.20.1.12:80 -``` - -注意:设备 B 的 `10.20.1.11` 和 `10.20.1.12` 是设备 B 本地网络内的摄像头,与设备 A 本地的 `10.20.1.11`、`10.20.1.12` 不是同一台设备。 - ---- - -### 3.3 设备 C 网络信息 - -设备 C 通过设备 A 的 `eth0` 网段访问。 - -```text -设备 C: -eth0:10.16.140.113 -业务管理页面:10.16.140.113:80 -``` - -当前已确认: - -```text -设备 C 的 10.16.140.113:80 服务未开启,因此 18003 当前无法访问属于正常现象。 -``` - -设备 C 本地摄像头网段与设备 A、设备 B 相同,摄像头 IP 也是: - -```text -设备 C 摄像头 1:10.20.1.11:80 -设备 C 摄像头 2:10.20.1.12:80 -``` - -注意:设备 C 的 `10.20.1.11` 和 `10.20.1.12` 是设备 C 本地网络内的摄像头,与设备 A、设备 B 本地同 IP 摄像头不是同一台设备。 - ---- +## 3. 当前设备网络结构 -## 4. 核心转发逻辑 - -由于 A、B、C 三台设备本地摄像头 IP 都是: - -```text -10.20.1.11 -10.20.1.12 -``` - -所以不能全部在设备 A 上直接转发到 `10.20.1.11` 和 `10.20.1.12`。 - -原因是: -对于设备 A 来说,`10.20.1.11` 和 `10.20.1.12` 默认就是设备 A 自己 `eth1` 下的本地摄像头。 - -因此,B、C 设备下的摄像头必须采用“两级转发”方式: - -```text -远程访问 - ↓ -设备 A - ↓ 通过 eth0,10.16.140.x 网段 -设备 B / 设备 C - ↓ 各自本地 10.20.1.x 网段 -对应设备本地摄像头 -``` - -也就是说: - -```text -设备 A 负责远程入口转发 -设备 B / 设备 C 负责把自己的中转端口转发到本地摄像头 -``` - ---- +### 3.1 设备 A 网络信息 -## 5. 端口规划 - -### 5.1 设备 A 本地摄像头 - -```text -远程端口 18101 -> 设备 A 本地摄像头 1:10.20.1.11:80 -远程端口 18102 -> 设备 A 本地摄像头 2:10.20.1.12:80 -``` - -### 5.2 设备 B - -```text -远程端口 18002 -> 设备 B 管理页面:10.16.140.112:80 -远程端口 18103 -> 设备 B 摄像头 1 -远程端口 18104 -> 设备 B 摄像头 2 -``` - -设备 B 内部中转端口: - -```text -设备 B:28011 -> 设备 B 本地摄像头 1:10.20.1.11:80 -设备 B:28012 -> 设备 B 本地摄像头 2:10.20.1.12:80 -``` - -因此完整链路为: - -```text -远程访问 18103 -> 设备 A -> 10.16.140.112:28011 -> 设备 B 本地 10.20.1.11:80 -远程访问 18104 -> 设备 A -> 10.16.140.112:28012 -> 设备 B 本地 10.20.1.12:80 -``` - -### 5.3 设备 C - -```text -远程端口 18003 -> 设备 C 管理页面:10.16.140.113:80 -远程端口 18105 -> 设备 C 摄像头 1 -远程端口 18106 -> 设备 C 摄像头 2 -``` - -设备 C 内部中转端口: - -```text -设备 C:28011 -> 设备 C 本地摄像头 1:10.20.1.11:80 -设备 C:28012 -> 设备 C 本地摄像头 2:10.20.1.12:80 -``` - -因此完整链路为: - -```text -远程访问 18105 -> 设备 A -> 10.16.140.113:28011 -> 设备 C 本地 10.20.1.11:80 -远程访问 18106 -> 设备 A -> 10.16.140.113:28012 -> 设备 C 本地 10.20.1.12:80 -``` - ---- +设备 A 是现场唯一带 4G 的设备,作为远程访问入口。 -## 6. 设备 A 上的转发配置 - -### 6.1 开启 IP 转发 - -在设备 A 上执行: - -```bash -echo 1 > /proc/sys/net/ipv4/ip_forward -``` - -查看是否生效: - -```bash -cat /proc/sys/net/ipv4/ip_forward -``` - -返回: - -```text -1 -``` - -表示开启成功。 - ---- - -### 6.2 设备 A 本地摄像头转发 - -设备 A 本地摄像头可以由设备 A 直接转发: - -```bash -iptables -t nat -A PREROUTING -p tcp --dport 18101 -j DNAT --to-destination 10.20.1.11:80 -iptables -t nat -A PREROUTING -p tcp --dport 18102 -j DNAT --to-destination 10.20.1.12:80 - -iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE - -iptables -A FORWARD -p tcp -d 10.20.1.11 --dport 80 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.20.1.12 --dport 80 -j ACCEPT -iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -``` - -说明: - -```text -18101 -> 10.20.1.11:80 -18102 -> 10.20.1.12:80 -``` - ---- - -### 6.3 设备 B 管理页面和摄像头转发 - -设备 A 转发到设备 B 的规则: - -```bash -# 设备 B 管理页面 -iptables -t nat -A PREROUTING -p tcp --dport 18002 -j DNAT --to-destination 10.16.140.112:80 - -# 设备 B 两个摄像头中转端口 -iptables -t nat -A PREROUTING -p tcp --dport 18103 -j DNAT --to-destination 10.16.140.112:28011 -iptables -t nat -A PREROUTING -p tcp --dport 18104 -j DNAT --to-destination 10.16.140.112:28012 - -# 设备 A 通过 eth0 访问设备 B,进行源地址伪装 -iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE - -# 放行转发 -iptables -A FORWARD -p tcp -d 10.16.140.112 --dport 80 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.16.140.112 --dport 28011 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.16.140.112 --dport 28012 -j ACCEPT -iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -``` - -对应关系: - -```text -18002 -> 10.16.140.112:80 -18103 -> 10.16.140.112:28011 -> 设备 B 本地 10.20.1.11:80 -18104 -> 10.16.140.112:28012 -> 设备 B 本地 10.20.1.12:80 -``` - ---- - -### 6.4 设备 C 管理页面和摄像头转发 - -设备 A 转发到设备 C 的规则: - -```bash -# 设备 C 管理页面 -iptables -t nat -A PREROUTING -p tcp --dport 18003 -j DNAT --to-destination 10.16.140.113:80 - -# 设备 C 两个摄像头中转端口 -iptables -t nat -A PREROUTING -p tcp --dport 18105 -j DNAT --to-destination 10.16.140.113:28011 -iptables -t nat -A PREROUTING -p tcp --dport 18106 -j DNAT --to-destination 10.16.140.113:28012 - -# 设备 A 通过 eth0 访问设备 C,进行源地址伪装 -iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE - -# 放行转发 -iptables -A FORWARD -p tcp -d 10.16.140.113 --dport 80 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.16.140.113 --dport 28011 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.16.140.113 --dport 28012 -j ACCEPT -iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -``` - -对应关系: - -```text -18003 -> 10.16.140.113:80 -18105 -> 10.16.140.113:28011 -> 设备 C 本地 10.20.1.11:80 -18106 -> 10.16.140.113:28012 -> 设备 C 本地 10.20.1.12:80 -``` - -当前注意事项: - -```text -设备 C 的 10.16.140.113:80 服务当前未开启,因此远程访问 18003 不通属于正常现象。 -``` - ---- +当前已知网口信息如下: -## 7. 设备 B 上的转发配置 - -设备 B 需要把自己的两个中转端口 `28011`、`28012` 转发到本地摄像头。 - -### 7.1 开启 IP 转发 - -```bash -echo 1 > /proc/sys/net/ipv4/ip_forward -``` - ---- - -### 7.2 添加设备 B 本地摄像头转发规则 - -假设设备 B 的摄像头网口为 `eth1`,设备 B 的上联业务网口为 `eth0`。 - -```bash -iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28011 -j DNAT --to-destination 10.20.1.11:80 -iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28012 -j DNAT --to-destination 10.20.1.12:80 - -iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE - -iptables -A FORWARD -p tcp -d 10.20.1.11 --dport 80 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.20.1.12 --dport 80 -j ACCEPT -iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -``` - -对应关系: - -```text -10.16.140.112:28011 -> 设备 B 本地摄像头 10.20.1.11:80 -10.16.140.112:28012 -> 设备 B 本地摄像头 10.20.1.12:80 -``` - ---- - -## 8. 设备 C 上的转发配置 - -设备 C 需要把自己的两个中转端口 `28011`、`28012` 转发到本地摄像头。 - -### 8.1 开启 IP 转发 - -```bash -echo 1 > /proc/sys/net/ipv4/ip_forward -``` - ---- - -### 8.2 添加设备 C 本地摄像头转发规则 - -假设设备 C 的摄像头网口为 `eth1`,设备 C 的上联业务网口为 `eth0`。 - -```bash -iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28011 -j DNAT --to-destination 10.20.1.11:80 -iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28012 -j DNAT --to-destination 10.20.1.12:80 - -iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE - -iptables -A FORWARD -p tcp -d 10.20.1.11 --dport 80 -j ACCEPT -iptables -A FORWARD -p tcp -d 10.20.1.12 --dport 80 -j ACCEPT -iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -``` - -对应关系: - -```text -10.16.140.113:28011 -> 设备 C 本地摄像头 10.20.1.11:80 -10.16.140.113:28012 -> 设备 C 本地摄像头 10.20.1.12:80 -``` - ---- - -## 9. 验证命令 - -### 9.1 在设备 A 上验证本地摄像头 - -```bash -curl -I http://10.20.1.11 -curl -I http://10.20.1.12 -``` - ---- - -### 9.2 在设备 A 上验证设备 B - -```bash -curl -I http://10.16.140.112 -curl -I http://10.16.140.112:28011 -curl -I http://10.16.140.112:28012 -``` - ---- - -### 9.3 在设备 A 上验证设备 C - -```bash -curl -I http://10.16.140.113 -curl -I http://10.16.140.113:28011 -curl -I http://10.16.140.113:28012 -``` - -说明: - -```text -如果 curl -I http://10.16.140.113 不通,需要先确认设备 C 的 80 端口服务是否启动。 -``` - ---- - -### 9.4 查看设备 A 上的 NAT 规则 - -```bash -iptables -t nat -L PREROUTING -n -v --line-numbers -iptables -t nat -L POSTROUTING -n -v --line-numbers -iptables -L FORWARD -n -v --line-numbers -``` - ---- - -## 10. 常见问题说明 - -### 10.1 为什么 127.0.0.1:18101 测不通? - -例如: - -```bash -curl -I http://127.0.0.1:18101 -``` - -失败是正常的。 - -原因是当前使用的是 `iptables PREROUTING` 转发规则,该规则主要处理外部进入本机的流量。 -本机访问 `127.0.0.1` 属于回环流量,不经过 `PREROUTING` 链。 - -正确测试方式应该是从外部访问设备 A 的远程入口地址,或者从同网段其他设备访问设备 A 的对应端口。 - ---- - -### 10.2 为什么设备 B、C 的摄像头不能在设备 A 上直接转到 10.20.1.11? - -因为设备 A、B、C 三台设备的本地摄像头网段都使用了相同 IP: - -```text -10.20.1.11 -10.20.1.12 -``` - -对于设备 A 来说,访问 `10.20.1.11` 默认会走设备 A 自己的 `eth1`,访问到设备 A 本地摄像头。 -设备 A 无法仅通过目标 IP 区分这是 A、B、C 哪一台设备下面的摄像头。 - -所以必须通过中转端口区分: - -```text -B 摄像头:设备 A -> 10.16.140.112:28011/28012 -> B 本地摄像头 -C 摄像头:设备 A -> 10.16.140.113:28011/28012 -> C 本地摄像头 -``` - ---- - -### 10.3 18003 当前为什么无法访问? - -当前已经确认: - -```text -设备 C 的 10.16.140.113:80 服务未开启。 -``` - -因此远程访问: - -```text -http://设备A访问地址:18003 -``` - -无法打开属于正常现象。 -需要先在设备 C 上启动对应的业务管理服务,并确认设备 A 可以访问: - -```bash -curl -I http://10.16.140.113 -``` - -如果返回 HTTP 响应,再测试远程 `18003` 访问。 - ---- - -## 11. 临时规则与持久化说明 - -当前通过 `iptables` 手动添加的规则属于临时规则。 - -设备重启后,这些规则可能会丢失。 - -后续如果确认全部链路稳定,需要将以下内容持久化: - -1. `/proc/sys/net/ipv4/ip_forward=1` -2. 设备 A 上的所有 DNAT、MASQUERADE、FORWARD 规则 -3. 设备 B 上的本地摄像头中转规则 -4. 设备 C 上的本地摄像头中转规则 - -可以考虑使用以下方式之一持久化: - -```text -方式 1:写入 systemd 启动脚本 -方式 2:使用 iptables-save / iptables-restore -方式 3:安装 iptables-persistent -``` - -推荐后续根据现场系统情况,整理成独立脚本,例如: - -```text -设备 A:/usr/local/bin/setup-forward-a.sh -设备 B:/usr/local/bin/setup-forward-b.sh -设备 C:/usr/local/bin/setup-forward-c.sh -``` - -并配置 systemd 开机自动执行。 - ---- - -## 12. 当前状态总结 - -当前已确认: - -```text -设备 A 本地两个摄像头可远程访问。 -设备 B 管理页面可远程访问。 -设备 B 本地两个摄像头可远程访问。 -设备 C 本地两个摄像头可远程访问。 -设备 C 管理页面 18003 当前不可访问,原因为设备 C 的 10.16.140.113:80 服务未开启。 -``` - -整体路由和端口转发逻辑已经验证可行。 - -核心链路为: - -```text -远程访问入口 - ↓ -设备 A,4G / 穿透入口 - ↓ -根据端口转发到: - - 设备 A 本地摄像头 - - 设备 B 管理页面 - - 设备 B 本地摄像头中转端口 - - 设备 C 管理页面 - - 设备 C 本地摄像头中转端口 +```text +设备 A: +ppp0:4G 拨号网口 +eth0:10.16.140.111/22,用于连接设备 B、设备 C +eth1:10.20.1.1/24,用于连接设备 A 本地摄像头 +dev0:10.10.4.28/24,疑似穿透或虚拟网络网口 +``` + +设备 A 本地摄像头: + +```text +设备 A 摄像头 1:10.20.1.11:80 +设备 A 摄像头 2:10.20.1.12:80 +``` + +设备 A 已验证可以直接访问本地两个摄像头: + +```bash +curl -I http://10.20.1.11 +curl -I http://10.20.1.12 +``` + +返回结果均为: + +```text +HTTP/1.1 200 OK +``` + +--- + +### 3.2 设备 B 网络信息 + +设备 B 通过设备 A 的 `eth0` 网段访问。 + +```text +设备 B: +eth0:10.16.140.112 +业务管理页面:10.16.140.112:80 +``` + +设备 B 本地摄像头网段与设备 A 本地摄像头网段相同,摄像头 IP 也是: + +```text +设备 B 摄像头 1:10.20.1.11:80 +设备 B 摄像头 2:10.20.1.12:80 +``` + +注意:设备 B 的 `10.20.1.11` 和 `10.20.1.12` 是设备 B 本地网络内的摄像头,与设备 A 本地的 `10.20.1.11`、`10.20.1.12` 不是同一台设备。 + +--- + +### 3.3 设备 C 网络信息 + +设备 C 通过设备 A 的 `eth0` 网段访问。 + +```text +设备 C: +eth0:10.16.140.113 +业务管理页面:10.16.140.113:80 +``` + +当前已确认: + +```text +设备 C 的 10.16.140.113:80 服务未开启,因此 18003 当前无法访问属于正常现象。 +``` + +设备 C 本地摄像头网段与设备 A、设备 B 相同,摄像头 IP 也是: + +```text +设备 C 摄像头 1:10.20.1.11:80 +设备 C 摄像头 2:10.20.1.12:80 +``` + +注意:设备 C 的 `10.20.1.11` 和 `10.20.1.12` 是设备 C 本地网络内的摄像头,与设备 A、设备 B 本地同 IP 摄像头不是同一台设备。 + +--- + +## 4. 核心转发逻辑 + +由于 A、B、C 三台设备本地摄像头 IP 都是: + +```text +10.20.1.11 +10.20.1.12 +``` + +所以不能全部在设备 A 上直接转发到 `10.20.1.11` 和 `10.20.1.12`。 + +原因是: +对于设备 A 来说,`10.20.1.11` 和 `10.20.1.12` 默认就是设备 A 自己 `eth1` 下的本地摄像头。 + +因此,B、C 设备下的摄像头必须采用“两级转发”方式: + +```text +远程访问 + ↓ +设备 A + ↓ 通过 eth0,10.16.140.x 网段 +设备 B / 设备 C + ↓ 各自本地 10.20.1.x 网段 +对应设备本地摄像头 +``` + +也就是说: + +```text +设备 A 负责远程入口转发 +设备 B / 设备 C 负责把自己的中转端口转发到本地摄像头 +``` + +--- + +## 5. 端口规划 + +### 5.1 设备 A 本地摄像头 + +```text +远程端口 18101 -> 设备 A 本地摄像头 1:10.20.1.11:80 +远程端口 18102 -> 设备 A 本地摄像头 2:10.20.1.12:80 +``` + +### 5.2 设备 B + +```text +远程端口 18002 -> 设备 B 管理页面:10.16.140.112:80 +远程端口 18103 -> 设备 B 摄像头 1 +远程端口 18104 -> 设备 B 摄像头 2 +``` + +设备 B 内部中转端口: + +```text +设备 B:28011 -> 设备 B 本地摄像头 1:10.20.1.11:80 +设备 B:28012 -> 设备 B 本地摄像头 2:10.20.1.12:80 +``` + +因此完整链路为: + +```text +远程访问 18103 -> 设备 A -> 10.16.140.112:28011 -> 设备 B 本地 10.20.1.11:80 +远程访问 18104 -> 设备 A -> 10.16.140.112:28012 -> 设备 B 本地 10.20.1.12:80 +``` + +### 5.3 设备 C + +```text +远程端口 18003 -> 设备 C 管理页面:10.16.140.113:80 +远程端口 18105 -> 设备 C 摄像头 1 +远程端口 18106 -> 设备 C 摄像头 2 +``` + +设备 C 内部中转端口: + +```text +设备 C:28011 -> 设备 C 本地摄像头 1:10.20.1.11:80 +设备 C:28012 -> 设备 C 本地摄像头 2:10.20.1.12:80 +``` + +因此完整链路为: + +```text +远程访问 18105 -> 设备 A -> 10.16.140.113:28011 -> 设备 C 本地 10.20.1.11:80 +远程访问 18106 -> 设备 A -> 10.16.140.113:28012 -> 设备 C 本地 10.20.1.12:80 +``` + +--- + +## 6. 设备 A 上的转发配置 + +### 6.1 开启 IP 转发 + +在设备 A 上执行: + +```bash +echo 1 > /proc/sys/net/ipv4/ip_forward +``` + +查看是否生效: + +```bash +cat /proc/sys/net/ipv4/ip_forward +``` + +返回: + +```text +1 +``` + +表示开启成功。 + +--- + +### 6.2 设备 A 本地摄像头转发 + +设备 A 本地摄像头可以由设备 A 直接转发: + +```bash +iptables -t nat -A PREROUTING -p tcp --dport 18101 -j DNAT --to-destination 10.20.1.11:80 +iptables -t nat -A PREROUTING -p tcp --dport 18102 -j DNAT --to-destination 10.20.1.12:80 + +iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE + +iptables -A FORWARD -p tcp -d 10.20.1.11 --dport 80 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.20.1.12 --dport 80 -j ACCEPT +iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +``` + +说明: + +```text +18101 -> 10.20.1.11:80 +18102 -> 10.20.1.12:80 +``` + +--- + +### 6.3 设备 B 管理页面和摄像头转发 + +设备 A 转发到设备 B 的规则: + +```bash +# 设备 B 管理页面 +iptables -t nat -A PREROUTING -p tcp --dport 18002 -j DNAT --to-destination 10.16.140.112:80 + +# 设备 B 两个摄像头中转端口 +iptables -t nat -A PREROUTING -p tcp --dport 18103 -j DNAT --to-destination 10.16.140.112:28011 +iptables -t nat -A PREROUTING -p tcp --dport 18104 -j DNAT --to-destination 10.16.140.112:28012 + +# 设备 A 通过 eth0 访问设备 B,进行源地址伪装 +iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE + +# 放行转发 +iptables -A FORWARD -p tcp -d 10.16.140.112 --dport 80 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.16.140.112 --dport 28011 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.16.140.112 --dport 28012 -j ACCEPT +iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +``` + +对应关系: + +```text +18002 -> 10.16.140.112:80 +18103 -> 10.16.140.112:28011 -> 设备 B 本地 10.20.1.11:80 +18104 -> 10.16.140.112:28012 -> 设备 B 本地 10.20.1.12:80 +``` + +--- + +### 6.4 设备 C 管理页面和摄像头转发 + +设备 A 转发到设备 C 的规则: + +```bash +# 设备 C 管理页面 +iptables -t nat -A PREROUTING -p tcp --dport 18003 -j DNAT --to-destination 10.16.140.113:80 + +# 设备 C 两个摄像头中转端口 +iptables -t nat -A PREROUTING -p tcp --dport 18105 -j DNAT --to-destination 10.16.140.113:28011 +iptables -t nat -A PREROUTING -p tcp --dport 18106 -j DNAT --to-destination 10.16.140.113:28012 + +# 设备 A 通过 eth0 访问设备 C,进行源地址伪装 +iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE + +# 放行转发 +iptables -A FORWARD -p tcp -d 10.16.140.113 --dport 80 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.16.140.113 --dport 28011 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.16.140.113 --dport 28012 -j ACCEPT +iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +``` + +对应关系: + +```text +18003 -> 10.16.140.113:80 +18105 -> 10.16.140.113:28011 -> 设备 C 本地 10.20.1.11:80 +18106 -> 10.16.140.113:28012 -> 设备 C 本地 10.20.1.12:80 +``` + +当前注意事项: + +```text +设备 C 的 10.16.140.113:80 服务当前未开启,因此远程访问 18003 不通属于正常现象。 +``` + +--- + +## 7. 设备 B 上的转发配置 + +设备 B 需要把自己的两个中转端口 `28011`、`28012` 转发到本地摄像头。 + +### 7.1 开启 IP 转发 + +```bash +echo 1 > /proc/sys/net/ipv4/ip_forward +``` + +--- + +### 7.2 添加设备 B 本地摄像头转发规则 + +假设设备 B 的摄像头网口为 `eth1`,设备 B 的上联业务网口为 `eth0`。 + +```bash +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28011 -j DNAT --to-destination 10.20.1.11:80 +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28012 -j DNAT --to-destination 10.20.1.12:80 + +iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE + +iptables -A FORWARD -p tcp -d 10.20.1.11 --dport 80 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.20.1.12 --dport 80 -j ACCEPT +iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +``` + +对应关系: + +```text +10.16.140.112:28011 -> 设备 B 本地摄像头 10.20.1.11:80 +10.16.140.112:28012 -> 设备 B 本地摄像头 10.20.1.12:80 +``` + +--- + +## 8. 设备 C 上的转发配置 + +设备 C 需要把自己的两个中转端口 `28011`、`28012` 转发到本地摄像头。 + +### 8.1 开启 IP 转发 + +```bash +echo 1 > /proc/sys/net/ipv4/ip_forward +``` + +--- + +### 8.2 添加设备 C 本地摄像头转发规则 + +假设设备 C 的摄像头网口为 `eth1`,设备 C 的上联业务网口为 `eth0`。 + +```bash +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28011 -j DNAT --to-destination 10.20.1.11:80 +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 28012 -j DNAT --to-destination 10.20.1.12:80 + +iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE + +iptables -A FORWARD -p tcp -d 10.20.1.11 --dport 80 -j ACCEPT +iptables -A FORWARD -p tcp -d 10.20.1.12 --dport 80 -j ACCEPT +iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +``` + +对应关系: + +```text +10.16.140.113:28011 -> 设备 C 本地摄像头 10.20.1.11:80 +10.16.140.113:28012 -> 设备 C 本地摄像头 10.20.1.12:80 +``` + +--- + +## 9. 验证命令 + +### 9.1 在设备 A 上验证本地摄像头 + +```bash +curl -I http://10.20.1.11 +curl -I http://10.20.1.12 +``` + +--- + +### 9.2 在设备 A 上验证设备 B + +```bash +curl -I http://10.16.140.112 +curl -I http://10.16.140.112:28011 +curl -I http://10.16.140.112:28012 +``` + +--- + +### 9.3 在设备 A 上验证设备 C + +```bash +curl -I http://10.16.140.113 +curl -I http://10.16.140.113:28011 +curl -I http://10.16.140.113:28012 +``` + +说明: + +```text +如果 curl -I http://10.16.140.113 不通,需要先确认设备 C 的 80 端口服务是否启动。 +``` + +--- + +### 9.4 查看设备 A 上的 NAT 规则 + +```bash +iptables -t nat -L PREROUTING -n -v --line-numbers +iptables -t nat -L POSTROUTING -n -v --line-numbers +iptables -L FORWARD -n -v --line-numbers +``` + +--- + + +## 当前状态总结 + +当前已确认: + +```text +设备 A 本地两个摄像头可远程访问。 +设备 B 管理页面可远程访问。 +设备 B 本地两个摄像头可远程访问。 +设备 C 本地两个摄像头可远程访问。 +设备 C 管理页面 18003 当前不可访问,原因为设备 C 的 10.16.140.113:80 服务未开启。 +``` + +整体路由和端口转发逻辑已经验证可行。 + +核心链路为: + +```text +远程访问入口 + ↓ +设备 A,4G / 穿透入口 + ↓ +根据端口转发到: + - 设备 A 本地摄像头 + - 设备 B 管理页面 + - 设备 B 本地摄像头中转端口 + - 设备 C 管理页面 + - 设备 C 本地摄像头中转端口 ```