技術筆記

VPN 連得進來,卻 ping 不到家裡那一台:換主機板後殘留的舊 MAC

同一個 LAN 內 ping 得到,從 WireGuard 進來就不通。最後發現是路由器還記著換主機板之前的舊網卡 MAC。

#網路 #WireGuard #排查紀錄

目錄

  1. 問題
  2. 環境
  3. 排查時間序
  4. 根本原因
  5. 幾個一開始想不通的地方
  6. 待辦
  7. 學到的事

1. 問題

從外面透過 WireGuard 連回家(Mac,VPN IP 10.66.0.2),ping 不到 HomeStation(192.168.66.180)。但同一個 LAN 裡的另一台主機 WKPHP 可以 ping 得到。

兩天前也發生過一次,當時重開 HomeStation 就好了,所以這次決定查到底。

2. 環境

設備角色IP
ER605路由器,WireGuard server,DHCP192.168.66.1
HomeStation要連的目標,網卡 eno1192.168.66.180
WKPHP同一個 LAN 的另一台主機192.168.66.190
Mac從外面連 VPN 的客戶端10.66.0.2

MAC 位址用代號替代:HomeStation 新主機板的網卡是 AA:BB:CC:DD:EE:FF,換掉的舊網卡是 11:22:33:44:55:66。

3. 排查時間序(2026-10-23)

時間動作結果與判斷
21:24Mac 透過 VPN ping .180不通
21:25Mac 透過 VPN ping .190(WKPHP)通,TTL 63。VPN 和 ER605 的轉送都正常,問題出在 .180 這台
21:27從 WKPHP ping .180通。HomeStation 本身在線,LAN 內也正常
21:28查 Mac 的 VPN IP10.66.0.2
21:29 到 21:30Mac 無法直接 SSH 到 HomeStation,改從 WKPHP 跳板(ssh -J)進去,檢查路由和防火牆回程路由正常走 192.168.66.1,default route 正確。iptables 裡有殘留的 ufw 規則,但 ufw 指令已經不存在
21:31 到 21:32HomeStation 上跑 tcpdump看得到 request,但沒有 reply
21:34加 iptables -I INPUT 1 -s 10.66.0.0/24 -j ACCEPT還是不通,排除 INPUT 白名單的問題
21:36看 INPUT 的計數,tcpdump 改抓所有介面計數是 0,封包根本沒進到 INPUT
21:36檢查 nft、raw、mangle只有 Docker 自動產生的規則,計數都是 0。Docker 的網段也避開了 192.168.64.0/20,排除網段衝突
21:42 到 21:43ER605 的 log 出現 PPPoE PADI timeout,VPN 整個斷線HiNet 主線短暫斷線。這是另一件事,之後自己恢復
21:46查 ER605 的 DHCP 保留清單,和 HomeStation eno1 的 MAC兩邊都是 AA:BB:CC:DD:EE:FF,一致
21:47tcpdump -e 看封包的 MACER605 把封包送到 11:22:33:44:55:66,不是 HomeStation 的 MAC
21:50查 ER605 的 ARP 表.180 確實對應到 11-22-33-44-55-66
21:54確認這個 MAC 是誰HomeStation 換主機板之前的舊網卡

轉折點在 21:36 和 21:47:INPUT 計數是 0,代表封包在進防火牆之前就被丟了。往防火牆規則裡找是找不到的,要往更底層的第二層(MAC)看。

4. 根本原因

ER605 的設定裡還留著「.180 對應舊主機板 MAC」的紀錄,留在 IP-MAC Binding 裡(2026-10-23 在路由器上找到並改掉)。

  1. 換主機板後,新網卡上線時廣播了正確的 MAC,ER605 學到之後暫時用這筆新的動態紀錄,所以看起來一切正常
  2. 過一陣子,舊的紀錄又蓋回來
  3. ER605 把要送給 .180 的封包,全部用舊網卡的 MAC 送出去
  4. 那張網卡已經不存在,HomeStation 收到「目的 MAC 不是自己」的封包,kernel 在進入防火牆之前就丟掉了

5. 幾個一開始想不通的地方

為什麼 WKPHP ping 得到?

WKPHP 和 HomeStation 在同一個 LAN,WKPHP 自己發 ARP 問「誰是 .180」,HomeStation 用新的 MAC 回答,整個過程不經過 ER605 的 ARP 表。從 VPN 進來的封包要經過 ER605 轉送,才會用到那筆錯的紀錄。

為什麼重開 HomeStation 會暫時好?

開機時網卡上線會重新廣播自己的 MAC,ER605 又學到正確的那筆,直到舊紀錄再次蓋回來。所以兩天前的「重開就好」只是暫時的。

目的 MAC 是一張不存在的網卡,HomeStation 為什麼還收得到?

交換器的 MAC 表裡沒有這個舊 MAC,遇到不認識的目的地就會把封包送到所有埠(unknown unicast flooding),所以 HomeStation 的網卡還是收得到。

收得到,為什麼 tcpdump 看得到、INPUT 計數卻是 0?

tcpdump 會把網卡切成混雜模式(promiscuous mode),連目的 MAC 不是自己的封包也會抓下來。但 kernel 處理時,目的 MAC 不符的封包會被標成「給別台主機的」,在進入 IP 層和 netfilter 之前就丟掉了。所以出現「tcpdump 看得到 request、防火牆計數是 0、沒有 reply」的組合。

6. 待辦

  • ER605:把 IP-MAC Binding 裡 .180 的 MAC 改成新網卡的 MAC,並存檔(2026-10-23)
  • HomeStation:移除測試時加的 iptables -I INPUT 1 -s 10.66.0.0/24 -j ACCEPT(重開機也會自動消失)
  • 觀察:改完兩天後(2026-10-25)從 VPN ping 得到。上次「重開就好」大約兩天後就復發,這次撐過了同樣的時間
  • 順手整理:殘留的 ufw 規則是從哪裡載入的,另外處理

7. 學到的事

  • 換硬體要連路由器的設定一起換:DHCP 保留和 IP-MAC Binding 都綁 MAC,換主機板、換網卡時兩邊都要更新,只改一邊會出現這種「時好時壞」的問題
  • 先用對照組縮小範圍:ping 同網段的另一台(.190)通、ping 目標(.180)不通,一步就排除了 VPN 和路由器轉送
  • 防火牆計數是 0,就往下一層找:封包沒進 INPUT,規則寫得再對也沒用。tcpdump -e 印出 MAC,第二層的問題才看得到
  • 「重開就好」不是修好:會自己恢復的問題,背後通常有個會被重新蓋回來的狀態