網路與 IP

IP 位址衝突怎麼解決:原因排查、arping 檢測與預防

IP 位址衝突怎麼解決,核心是三步:用 ARP 記錄找到搶佔同一位址的第二個 MAC,在交換器 MAC 表裡定位它接在哪個連接埠,然後改掉配置錯誤的那一台。機房裡要徹底根治,還得靠 IP 登記與交換器側的源位址校驗。

作者 頂聯產品團隊發布於 4 分鐘閱讀

先確認是不是 IP 位址衝突

IP 位址衝突怎麼解決,第一步是確認症狀確實來自衝突,而不是閘道器或鏈路問題。衝突的典型表現:

  • Windows 彈出“檢測到 IP 位址衝突”,系統日誌裡有來源為 Tcpip、事件 ID 4199 的記錄,內容會寫明與之衝突的硬體位址(MAC);
  • Linux 預設不彈提示,表現為網路時通時斷,ping 丟包呈週期性,或者 ARP 表裡同一個 IP 對應的 MAC 反覆變化;
  • 交換器日誌出現 MAC 位址在兩個連接埠之間漂移的告警;
  • 閘道器上 display arp 或 show ip arp 看到該位址的 MAC 與登記不符。

最直接的驗證方法是 arping。iputils 版本的 arping 向目標位址發 ARP 請求,誰持有這個位址誰就會應答,收到兩個不同 MAC 的應答就是衝突:

# 指定發包網路卡,發 5 次請求,觀察應答裡的 MAC
arping -I eth0 -c 5 192.168.10.50

# 重複位址檢測模式:退出碼 0 表示無人應答(位址空閒),1 表示已被佔用
arping -D -I eth0 -c 3 192.168.10.50; echo $?

Debian/Ubuntu 上有兩個同名工具:iputils-arping 用 -I 指定網路卡;Thomas Habets 版的 arping 用 -i,並且有專門找重複應答的 -d 引數。此外 arp-scan --localnet 會掃描整個網段,重複的位址後面直接標註 (DUP: 2)。

Windows 上用下面的命令檢視當前記錄的 MAC 和衝突事件:

arp -a | findstr 192.168.10.50
Get-NetNeighbor -IPAddress 192.168.10.50
Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Tcpip'; Id=4199} | Select-Object -First 5

IP 位址衝突的原因

原因 典型場景 識別特徵
手工配錯 抄錯位址、複製另一台機器的網路卡配置、克隆的虛擬機器映象帶著靜態 IP 衝突方 MAC 屬於新上線的裝置
DHCP 與靜態混用 把靜態位址配在 DHCP 位址池範圍內;裝置離線期間租約到期,位址被分給別人,裝置回來後衝突 衝突方由 DHCP 獲得位址,DHCP 伺服器租約表裡能查到
客戶私自改 IP 託管客戶把網路卡改成相鄰的空閒位址或別人的位址,多見於多 IP 伺服器和站群業務 衝突方 MAC 屬於另一位客戶的伺服器
遷移遺留 下架的老機器被重新上電、備用機開機、雙網路卡兩邊配了同一個位址 衝突方 MAC 是登記表裡“已下架”或“備用”的裝置
高可用腦裂 keepalived、Windows 叢集等 VIP 方案的兩個節點同時認為自己是主節點 兩個 MAC 都屬於同一業務的伺服器
VLAN 錯誤打通 連接埠 VLAN 配錯或 trunk 放行了不該放的 VLAN,兩個原本隔離的網段用了相同的私有位址 衝突方來自另一個 VLAN 或另一台交換器的下聯連接埠

機房裡的衝突通常出在前三種,其中“客戶私自改 IP”很難靠溝通根治,需要交換器側的技術手段,後文會講。

排查步驟:從 ARP 記錄到交換器連接埠

  1. 拿到兩個 MAC。在受影響的主機或閘道器上查 ARP 表,或者抓包看誰在應答:
# 只看這個位址的 ARP 報文,應答裡會出現兩個不同的傳送方 MAC
tcpdump -ni eth0 arp and host 192.168.10.50
  1. 判斷哪個 MAC 是合法的。對照 IP 登記記錄(IPAM)裡該位址繫結的 MAC,另一個就是佔用方。MAC 前三段(OUI)可以查出網路卡廠商,有助於猜測裝置型別,例如 52:54:00 開頭是 KVM 虛擬機器,00:50:56 是 VMware。
  2. 在交換器上按 MAC 找連接埠:
# 華為 / H3C
display mac-address 5254-00ab-cdef
display arp | include 192.168.10.50

# 思科 IOS
show mac address-table address 5254.00ab.cdef
show ip arp 192.168.10.50
  1. 順著連接埠找裝置。如果查到的連接埠是接伺服器的接入口,對照機櫃和連接埠登記就能確定是哪台機器;如果是上聯口,說明裝置在下一台交換器上,重複第 3 步。
  2. 緊急止損。找到連接埠後,如果佔用方影響了付費客戶的業務,可以先把該連接埠 shutdown,再聯絡裝置負責人。
  3. 改正配置並清理 ARP 快取。讓佔用方改回正確位址後,在受害主機和閘道器上清掉舊的 ARP 記錄,否則要等快取自然老化:
# Linux 主機
ip neigh flush all
# Windows 主機
arp -d *
# 華為交換器(使用者檢視)
reset arp all
# 思科交換器
clear ip arp 192.168.10.50
  1. 讓合法主機重新宣告。在合法主機上發一次免費 ARP,重新整理所有鄰居的快取:
arping -U -I eth0 -c 3 192.168.10.50

不同原因的處理辦法

DHCP 與靜態混用:把靜態位址集中在位址池之外,並在 DHCP 伺服器上排除這段範圍。Windows DHCP 在作用域裡新增“排除範圍”,並在伺服器屬性裡把“衝突檢測嘗試次數”設為 1 或 2;ISC DHCP 在配置里加 ping-check true;;思科路由器上用 ip dhcp excluded-address 192.168.10.1 192.168.10.100 排除,再用 ip dhcp ping packets 2 讓它分配前先探測。

客戶私自改 IP:溝通之外,在接入連接埠做 IP 與 MAC 的靜態繫結並開啟源位址校驗,改了位址的報文直接被交換器丟棄,客戶自己就會發現“改了不通”。

! 思科:先在 VLAN 上啟用 DHCP snooping(靜態繫結也依賴它),再繫結並校驗
ip dhcp snooping
ip dhcp snooping vlan 10
ip source binding 5254.00ab.cdef vlan 10 192.168.10.50 interface GigabitEthernet1/0/5
interface GigabitEthernet1/0/5
 ip verify source
# 華為 S 系列:靜態繫結表項,並在連接埠開啟 IP 源防攻擊
system-view
user-bind static ip-address 192.168.10.50 mac-address 5254-00ab-cdef interface GigabitEthernet 0/0/5
interface GigabitEthernet 0/0/5
 ip source check user-bind enable

H3C 的命令是介面檢視下的 ip source binding ip-address 192.168.10.50 mac-address 5254-00ab-cdef 和 ip verify source ip-address mac-address,思路一致。

遷移遺留:下架流程里加一步“清網路卡配置或拔網線”,備用機用獨立的臨時位址;在閘道器上給關鍵位址配靜態 ARP(華為 arp static 192.168.10.50 5254-00ab-cdef,思科 arp 192.168.10.50 5254.00ab.cdef arpa),即使有人誤配,閘道器也只認登記的 MAC。

高可用腦裂:先檢查兩個節點之間的心跳鏈路和 VRRP 報文是否被交換器過濾(組播 224.0.0.18 或單播),再核對優先順序和搶佔配置;腦裂期間先停掉一個節點的 keepalived 恢復業務。

VLAN 錯誤打通:核對連接埠的 PVID 和 trunk 的 VLAN 放行列表,把誤放行的 VLAN 收回。

機房裡怎麼預防 IP 衝突

處理一次衝突不難,難的是不再發生。IDC 裡行之有效的做法有四條:

  1. 每個位址有主:所有公網、內網、IPMI 位址都登記在 IPAM 裡,寫明所屬伺服器、MAC、客戶和狀態;分配只能從登記表裡取,不允許口頭“先用著”。
  2. 分配前探測:給客戶配位址之前,在同網段的機器上跑一次 arping -D,有應答就說明登記表和現實對不上,先查再分:
if arping -D -I eth0 -c 3 192.168.10.50 >/dev/null; then
  echo "空閒,可以分配"
else
  echo "已有裝置應答,暫停分配並核查"
fi
  1. 交換器側鎖定:接入連接埠做 IP 與 MAC 繫結,開啟源位址校驗,這樣客戶改了位址也發不出包,衝突在連接埠上就被擋住,不會擴散到整個網段。
  2. 持續監聽:在閘道器所在的 VLAN 上跑 arpwatch,一旦某個 IP 對應的 MAC 發生變化或來回翻轉,立即郵件告警,比等客戶投訴早得多。

Toplink DCIM 把前三條合在了一起:IP 位址管理統一登記每個位址的歸屬,自動分配時排除已佔用和已鎖定的位址;交換器管理在連接埠上下發 ARP 繫結與源位址校驗,MAC 可以自動學習並繫結,伺服器換線遷移時不需要人工重新核對。

常見問題

IP 衝突了,重啟電腦有用嗎?

重啟只是讓本機重新發一次 ARP 探測,如果另一台裝置還在用這個位址,衝突會立刻再次出現。必須找到並修改佔用方的配置。

IPv6 會有位址衝突嗎?

IPv6 在協議層內建了重複位址檢測(DAD),發現重複時新配置的位址會被標記為 dadfailed 而不生效,所以表現是“位址配不上”,而不是兩台機器互相搶佔。

為什麼 ping 得通但時通時斷?

兩台裝置輪流應答 ARP,閘道器和其他主機的 ARP 表在兩個 MAC 之間來回切換,流量一會兒發給這台一會兒發給那台,這正是衝突的典型表現。

克隆出來的虛擬機器為什麼會 IP 衝突?

範本裡殘留了靜態位址,或者兩台機器的 DHCP 客戶端標識相同(例如 systemd-networkd 預設用 machine-id 生成 DUID),克隆後會申請到同一個位址。克隆後要清掉靜態網路卡配置,並重新生成 machine-id 或 DHCP 客戶端標識。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88