VPN 連得進來,卻 ping 不到家裡那一台:換主機板後殘留的舊 MAC
同一個 LAN 內 ping 得到,從 WireGuard 進來就不通。最後發現是路由器還記著換主機板之前的舊網卡 MAC。
目錄
- 問題
- 環境
- 排查時間序
- 根本原因
- 幾個一開始想不通的地方
- 待辦
- 學到的事
1. 問題
從外面透過 WireGuard 連回家(Mac,VPN IP 10.66.0.2),ping 不到 HomeStation(192.168.66.180)。但同一個 LAN 裡的另一台主機 WKPHP 可以 ping 得到。
兩天前也發生過一次,當時重開 HomeStation 就好了,所以這次決定查到底。
2. 環境
| 設備 | 角色 | IP |
|---|---|---|
| ER605 | 路由器,WireGuard server,DHCP | 192.168.66.1 |
| HomeStation | 要連的目標,網卡 eno1 | 192.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:24 | Mac 透過 VPN ping .180 | 不通 |
| 21:25 | Mac 透過 VPN ping .190(WKPHP) | 通,TTL 63。VPN 和 ER605 的轉送都正常,問題出在 .180 這台 |
| 21:27 | 從 WKPHP ping .180 | 通。HomeStation 本身在線,LAN 內也正常 |
| 21:28 | 查 Mac 的 VPN IP | 10.66.0.2 |
| 21:29 到 21:30 | Mac 無法直接 SSH 到 HomeStation,改從 WKPHP 跳板(ssh -J)進去,檢查路由和防火牆 | 回程路由正常走 192.168.66.1,default route 正確。iptables 裡有殘留的 ufw 規則,但 ufw 指令已經不存在 |
| 21:31 到 21:32 | HomeStation 上跑 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:43 | ER605 的 log 出現 PPPoE PADI timeout,VPN 整個斷線 | HiNet 主線短暫斷線。這是另一件事,之後自己恢復 |
| 21:46 | 查 ER605 的 DHCP 保留清單,和 HomeStation eno1 的 MAC | 兩邊都是 AA:BB:CC:DD:EE:FF,一致 |
| 21:47 | tcpdump -e 看封包的 MAC | ER605 把封包送到 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 在路由器上找到並改掉)。
- 換主機板後,新網卡上線時廣播了正確的 MAC,ER605 學到之後暫時用這筆新的動態紀錄,所以看起來一切正常
- 過一陣子,舊的紀錄又蓋回來
- ER605 把要送給
.180的封包,全部用舊網卡的 MAC 送出去 - 那張網卡已經不存在,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,第二層的問題才看得到 - 「重開就好」不是修好:會自己恢復的問題,背後通常有個會被重新蓋回來的狀態