配置文档:Ubuntu 服务器转发网络访问
一、网络拓扑
以以下网络拓扑为示例

- Ubuntu 服务器(两个网卡)
eth1 = 10.66.71.222
(接入内网)eno1 = 192.168.2.100
(直连相机)
- 相机ip
192.168.2.1
- Windows 客户端ip
10.66.71.205
(接入内网)
- 目标
Windows 能直接访问相机 (ping 192.168.2.1
)。
二、Ubuntu 配置步骤
1. 确认网卡
bash
ip addr
ip route
确认:
eth1
→ 10.66.71.222/24eno1
→ 192.168.2.100/24
2. 开启 IPv4 转发
bash
# 临时生效
sudo sysctl -w net.ipv4.ip_forward=1
# 永久生效
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
验证:
bash
sysctl net.ipv4.ip_forward # 输出为 1 即可
3. 配置 iptables 转发与 NAT
执行以下脚本:
bash
#!/usr/bin/env bash
set -euxo pipefail
WAN_IF=eth1 # 内网网卡
LAN_IF=eno1 # 相机网卡
WIN_NET=10.66.71.0/24
CAM_NET=192.168.2.0/24
# 确保 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1
# 允许内外转发
sudo iptables -C FORWARD -i $WAN_IF -o $LAN_IF -s $WIN_NET -d $CAM_NET -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT 2>/dev/null \
|| sudo iptables -A FORWARD -i $WAN_IF -o $LAN_IF -s $WIN_NET -d $CAM_NET -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -C FORWARD -i $LAN_IF -o $WAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 2>/dev/null \
|| sudo iptables -A FORWARD -i $LAN_IF -o $WAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# NAT 转发
sudo iptables -t nat -C POSTROUTING -s $WIN_NET -d $CAM_NET -o $LAN_IF -j MASQUERADE 2>/dev/null \
|| sudo iptables -t nat -A POSTROUTING -s $WIN_NET -d $CAM_NET -o $LAN_IF -j MASQUERADE
查看规则:
bash
sudo iptables -S FORWARD

bash
sudo iptables -t nat -S

4. 持久化规则
bash
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y iptables-persistent
sudo netfilter-persistent save
规则会保存到 /etc/iptables/rules.v4
,重启不会丢失。
三、Windows 配置
1. 删除错误的直连路由(如果存在)
如果网卡上绑定了 192.168.2.x
地址,请移除:
cmd
#示例
netsh interface ip delete address "以太网" 192.168.2.205
2. 添加静态路由
在管理员 CMD 执行:
cmd
route -p add 192.168.2.0 mask 255.255.255.0 10.66.71.222 metric 1
验证:
cmd
route print 192.168.2.0

四、测试流程
A. Ubuntu ↔ 相机
bash
ping -c 3 192.168.2.1
arp -n | grep 192.168.2.1
sudo tcpdump -i eno1 -n icmp
B. Windows ↔ Ubuntu
cmd
ping 10.66.71.222
tracert 10.66.71.222
C. Windows ↔ 相机
cmd
tracert 192.168.2.1 # 第一跳应为 10.66.71.222
ping 192.168.2.1

Ubuntu 抓包观察:
bash
sudo tcpdump -i eth1 -n icmp and host 192.168.2.1
sudo tcpdump -i eno1 -n icmp and host 192.168.2.1
五、常见问题排查
-
Windows 绑定了 192.168.2.x → 必须删除,否则路由冲突。
-
UFW 防火墙阻止转发 → 修改
/etc/default/ufw
和/etc/ufw/before.rules
,允许 NAT + FORWARD。 -
接口名错误 → 用
ip addr
确认。 -
相机未响应 → 检查相机是否禁 ICMP,可改用
curl
或ffplay
测试 HTTP/RTSP。 -
rp_filter 拦截 → 可宽松模式:
bashsudo sysctl -w net.ipv4.conf.all.rp_filter=2 sudo sysctl -w net.ipv4.conf.default.rp_filter=2