Linux中169.254.0.0/24的路由來自哪里


在Linux中,發現每次系統啟動時,都會將(169.254.0.0/16)路由啟動並將其添加到路由表中。但是並不知道這條路由具有什么功能和它到底來自於哪里?

[root@master01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

要想搞清楚路由(169.254.0.0/16)究竟來自哪里並且它的作用是什么?首先需要搞明白兩個概念

zeroconf

  “zeroconf”或“Zero Configuration Networking” 是一種無需額外配置即可自動創建IP地址網絡的技術。也被稱為 “Automatic Private IP Addressing”(APIPA)。

  zeroconf規范的提出者是Apple公司,其目的是讓非專業用戶也可以便捷的連接各種網絡設備,例如計算機,打印機等。整個搭建網絡的過程都是自動實現。如果沒有“zeroconf”,用戶必須手動,或者利用對應的服務(例如DHCP、DNS)對網絡進行配置。這些過程對非技術用戶和新用戶們來說是很一件難的事情。

  zeroconf的出現是問了解決三個問題:

  • 為網絡設備自動分配可用IP地址
  • 解析計算機主機名
  • 自動發現網絡服務(如打印機等)

zeroconf的地址選用

  對於Link-local address,IPv4使用的特殊保留地址169.254.0.0/16,在RFC3927中所描述。作用是當DHCP客戶端在超時和重試后扔找不到對應的DHCP服務器,它將隨機從該網絡(`169.254.0.0/16`)中獲取地址。這樣可以與無法獲取DHCP地址的主機進行通信。

如何禁用zeroconf

要在系統引導期間禁用zeroconf路由,需要編輯/etc/sysconfig/network文件,配置以下內容

NETWORKING=YES
HOSTNAME=localhost.localdomain
NOZEROCONF=yes

169.254.0.0/16的應用

在calico中就使用了這個地址169.254.0.0/16

default via 169.254.1.1 dev eth0
169.254.1.1 dev eth0 scope link

  這個IP地址169.254.1.1是默認的網關,但是整個網絡中中沒有一張網卡是這個地址。那么為何是這個地址?

  如一個網絡中設備D1 (192.168.0.2/24) 與設備D2 (192.168.1.2/24),D1和D2在相互通信時,D1先發送了ARP廣播,請求D2的mac地址,但是由於兩個設備處於不同網,也就是說D1的ARP請求會被R1攔截到,然后R1會封裝自己的mac地址為目的地址發送一個ARP回應數據報給R1(善意的欺騙),然后R1就會代替D1去訪問D2。

  在Kubernetes Calico網絡中,當一個數據包的目的地址不是本網絡時,會先發起ARP廣播,網關設置即169.254.1.1收到會將自己的mac地址返回給發送端,后續的請求由這個veth對進行完成,使用代理arp做了arp欺騙。這樣做抑制了arp廣播攻擊,並且通過代理arp也可以進行跨網絡的訪問。

  在容器內可以使用ethtool -S 來查看對端。這里使用的容器為sealloong/netbox,集成了常用的網絡命令,作為網絡故障排除容器使用。

實驗:查找calico網絡中169.254.1.1的應用

當從netbox02(10.244.140.69/32) ping netbox01(10.244.241.74/32)發現ARP包被抑制在容器內部,相應的mac地址為eth0的對端

而后根據路由交有tun0隧道進行IPIP封裝,tun0為其隧道,隧道解包后發往對應的設備,而calico網絡中會生成路由到對應的workload之上。

reference
wiki_zero-configuration-network


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM