配置文檔: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. 確認網卡
ip addr
ip route
確認:
eth1
→ 10.66.71.222/24eno1
→ 192.168.2.100/24
2. 開啟 IPv4 轉發
# 臨時生效
sudo sysctl -w net.ipv4.ip_forward=1# 永久生效
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
驗證:
sysctl net.ipv4.ip_forward # 輸出為 1 即可
3. 配置 iptables 轉發與 NAT
執行以下腳本:
#!/usr/bin/env bash
set -euxo pipefailWAN_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 ACCEPTsudo 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
查看規則:
sudo iptables -S FORWARD
sudo iptables -t nat -S
4. 持久化規則
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
地址,請移除:
#示例
netsh interface ip delete address "以太網" 192.168.2.205
2. 添加靜態路由
在管理員 CMD 執行:
route -p add 192.168.2.0 mask 255.255.255.0 10.66.71.222 metric 1
驗證:
route print 192.168.2.0
四、測試流程
A. Ubuntu ? 相機
ping -c 3 192.168.2.1
arp -n | grep 192.168.2.1
sudo tcpdump -i eno1 -n icmp
B. Windows ? Ubuntu
ping 10.66.71.222
tracert 10.66.71.222
C. Windows ? 相機
tracert 192.168.2.1 # 第一跳應為 10.66.71.222
ping 192.168.2.1
Ubuntu 抓包觀察:
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 攔截 → 可寬松模式:
sudo sysctl -w net.ipv4.conf.all.rp_filter=2 sudo sysctl -w net.ipv4.conf.default.rp_filter=2