Arp

ARP 請求的發送者地址與目標地址來自不同的廣播域

  • August 14, 2019

我有以下簡單的網路拓撲:

伺服器網路拓撲

我在此伺服器中看到了一種情況,其中 ARP 請求發送方地址(192.168.1.15 )來自與目標( 10.10.10.252 )不同的廣播域:

server:~ # tcpdump -nei eth0 host 10.10.10.252
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:56:36.152174 00:16:3e:1a:61:b4 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.10.10.252 tell 192.168.1.15, length 28
16:56:37.150442 00:16:3e:1a:61:b4 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.10.10.252 tell 192.168.1.15, length 28
16:56:38.150449 00:16:3e:1a:61:b4 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.10.10.252 tell 192.168.1.15, length 28
16:56:39.159566 00:16:3e:1a:61:b4 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.10.10.252 tell 192.168.1.15, length 28
^C
4 packets captured
5 packets received by filter
0 packets dropped by kernel
server:~ #

由於鬆散的預設( 0arp_announce設置,我是否正確地認為這種行為是可能的?

您對核心為什麼接受/執行這些 ARP 的假設是正確的,但是我將解釋它們發生的原因。

關鍵是您實際上有一個帶有兩個網路塊的廣播域。

根據定義,通常在與子網通信時,您與屬於連接到該子網的介面的網路進行通信;另一方面,Linux 通常預設與介面的主 IP 通信。

因此,當與 r1 通信時,Linux 機器使用介面的主 IP(或第一個介面的主 IP,取決於arp_announce,必須對其進行測試),以及這些 ARP。

回到您為什麼接受它們的假設,您指的是正確的地方:

arp_announce - INTEGER 定義不同的限制級別,用於從在介面上發送的 ARP 請求中的 IP 數據包中宣布本地源 IP 地址:0 -(預設)使用任何本地地址,在任何介面上配置

也用於發送回复:

arp_filter - 0 - (預設)核心可以使用來自其他介面的地址響應 arp 請求。這似乎是錯誤的,但通常是有道理的,因為它增加了成功溝通的機會。IP 地址由 Linux 上的整個主機擁有,而不是由特定介面擁有。只有對於更複雜的設置,如負載平衡,這種行為才會導致問題。

除此之外:

arp_ignore - INTEGER 定義發送回復以響應接收到的解析本地目標 IP 地址的 ARP 請求的不同模式:0 -(預設):回復任何本地目標 IP 地址,在任何介面上配置

因此我們可以得出結論,Linux 伺服器在伺服器級別處理 ARP,並且預設情況下以非常輕鬆的方式處理。

圖片中的路由器 r1 並非如此,這將取決於其作業系統/韌體的本地預設值和配置。

引用自:https://unix.stackexchange.com/questions/411615