Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux PC 搖身一變路由器:三機實驗驗證靜態路由與 ARP 代理轉發原理

編輯:關於 Linux

僅需開啟核心轉發、配置靜態路由,普通 Linux PC 即可化身路由器實現跨網段通訊。本文以三台主機 (①④⑦) 實驗,對比**錯誤配置 (直連目標 MAC 導致 ARP 廣播不轉發)** 與**正確配置 (指定網關 MAC 逐跳轉發)**,深入解析 ARP、路由表、封包流向與 tcpdump 抓包驗證。

實驗拓撲

① (10.0.1.3/24) ── eth1 ── ④ (10.0.1.2/24, 10.0.4.2/24) ── eth4 ── ⑦ (10.0.4.3/24)
目標:① ping ⑦,④ 作為路由轉發

錯誤配置:直接指定出介面


# ①
route add -net 10.0.4.0/24 dev eth1
# ⑦
route add -net 10.0.1.0/24 dev eth1
# ④ 開啟轉發
echo 1 > /proc/sys/net/ipv4/ip_forward

結果:① 不斷發送 ARP Request who-has 10.0.4.3,④ **不轉發 ARP 廣播**,⑦ 收不到請求,ping 失敗 (Destination Host Unreachable)。

正確配置:指定網關 (Next Hop)


# ① 指定下一跳為 ④ 的 eth1 IP
route add -net 10.0.4.0/24 gw 10.0.1.2 dev eth1
# 路由表顯示 Flags=UG (Use Gateway)
# ⑦ 指定下一跳為 ④ 的 eth4 IP
route add -net 10.0.1.0/24 gw 10.0.4.2 dev eth1
# ④ 已開啟 ip_forward

封包流向與 tcpdump 驗證

MAC 位址對照

介面MAC
① eth100:16:EC:AF:CB:CB
④ eth140:61:86:32:8F:0B
④ eth440:61:86:32:8F:0E
⑦ eth100:25:90:93:40:79

④ eth1 抓包 (① → ④)


16:02:26.809445 00:16:ec:af:cb:cb > 40:61:86:32:8f:0b, IPv4, 10.0.1.3 > 10.0.4.3: ICMP echo request
16:02:26.810723 40:61:86:32:8f:0b > 00:16:ec:af:cb:cb, IPv4, 10.0.4.3 > 10.0.1.3: ICMP echo reply

① 封裝:目的 IP=⑦ (10.0.4.3),目的 MAC=④ eth1 (已知網關 MAC)。

④ eth4 抓包 (④ → ⑦)


16:02:26.809460 40:61:86:32:8f:0e > 00:25:90:93:40:79, IPv4, 10.0.1.3 > 10.0.4.3: ICMP echo request
16:02:26.810715 00:25:90:93:40:79 > 40:61:86:32:8f:0e, IPv4, 10.0.4.3 > 10.0.1.3: ICMP echo reply

④ 轉發:目的 IP 不變,目的 MAC 改為 ⑦ eth1 (ARP 解析),來源 MAC 改為 ④ eth4。

⑦ eth1 抓包


16:02:27.222853 40:61:86:32:8f:0e > 00:25:90:93:40:79, IPv4, 10.0.1.3 > 10.0.4.3: ICMP echo request

⑦ 收到封包,目的 MAC 為自己,正常回應。

核心結論

  • Linux 路由器**預設不轉發 ARP 廣播** (僅轉發單播/組播)。
  • 錯誤配置 dev eth1 導致發送端嘗試直接 ARP 解析遠端目標,失敗。
  • 正確配置 gw 次跳IP 讓發送端 ARP 解析**網關 MAC**,逐跳轉發。
  • 替代方案:錯誤配置 + **ARP 代理 (proxy_arp)**,讓路由器代理回應 ARP,效果相同但擴展性較差。

關鍵指令速查

功能指令
啟用 IP 轉發 (臨時)echo 1 > /proc/sys/net/ipv4/ip_forward
啟用 IP 轉發 (永久)echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf; sysctl -p
新增靜態路由 (指定網關)route add -net NETWORK gw GATEWAY dev IFACE
新增靜態路由 (指定介面)route add -net NETWORK dev IFACE
查看路由表route -n / ip route show
抓取封包分析tcpdump -i IFACE -enn
啟用 ARP 代理echo 1 > /proc/sys/net/ipv4/conf/IFACE/proxy_arp

三機實驗拓撲圖

錯誤配置路由表

⑦ 錯誤配置路由表

ip_forward 設定

Copyright © Windows教程網 All Rights Reserved