首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

DM8168 雙網卡同網段 Ping 不通:IP 衝突與路由原理解析

     編輯:程式設計綜合問答

現象

DM8168 開發板雙網口 `eth0`、`eth1` 設定同網段 IP (如 `192.168.1.x/24`),`eth0` 能 Ping 同網段 PC,`eth1` 不能。

根本原因:路由表與 ARP 衝突

  1. 路由表無法區分介面**:同網段 IP 導致核心路由表只有一條 `192.168.1.0/24 dev eth0` (或 `eth1`),封包**只會從第一張網卡發出**。
  2. ARP 回應混亂**:PC 收到來自 `eth1` IP 的 ARP 請求,但回應封包按路由表從 `eth0` 發送,導致通訊失敗。
  3. Linux 不支援同主機同網段多介面**:除非啟用 **ARP filtering** (`net.ipv4.conf.all.arp_filter=1`) 並配置 **policy routing**,否則行為不可預期。

解決方案:分開網段

# eth0
ifconfig eth0 192.168.0.10 netmask 255.255.255.0 up

# eth1  
ifconfig eth1 192.168.1.10 netmask 255.255.255.0 up

# PC 端對應設定
# PC1: 192.168.0.100/24 連 eth0
# PC2: 192.168.1.100/24 連 eth1

進階:若必須同網段 (不建議)

# 1. 開啟 ARP filtering
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_filter

# 2. 配置 Policy Routing (ip rule / ip route)
# 為每張網卡建立獨立路由表
ip route add 192.168.1.0/24 dev eth0 table 100
ip route add default via 192.168.1.1 dev eth0 table 100
ip rule add from 192.168.1.10 table 100

ip route add 192.168.1.0/24 dev eth1 table 200
ip route add default via 192.168.1.1 dev eth1 table 200
ip rule add from 192.168.1.20 table 200

# 3. 啟用 rp_filter (loose mode)
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter

**複雜、易錯、效能損耗,強烈不建議嵌入式裝置使用。**

結論

**雙網卡必須配置不同網段**。同網段導致路由表衝突、ARP 混亂,`eth1` 流量實際從 `eth0` 發出,自然 Ping 不通。分開網段是唯一正確、穩定、簡單的做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved