linux參數arp_filter,arp_ignoe,arp_announce,rp_filter詳解

      網友投稿 6475 2025-04-02

      rp_Filter


      rp_Filter全稱reverse path filter用于控制系統是否開啟對數據包源地址的校驗。這是一個網卡級別的參數也就是說每張網卡可以設置不同的值。此參數有三個值0、1、2具體含義

      0不開啟源地址校驗。

      1開啟嚴格的反向路徑校驗。對每個進來的數據包校驗其反向路徑是否是最佳路徑接收報文的網卡和回數據的網卡是否是同一張網卡。如果反向路徑不是最佳路徑則直接丟棄該數據包。

      2開啟松散的反向路徑校驗。對每個進來的數據包校驗其源地址是否可達即反向路徑是否能通通過任意網卡如果反向路徑不通則直接丟棄該數據包。

      Current recommended practice in RFC3704 is to enable strict mode?to prevent IP spoofing from DDos attacks. If using asymmetric routing?or other complicated routing, then loose mode is recommended.

      The max value from conf/{all,interface}/rp_filter is used?when doing source validation on the {interface}.

      Default value is 0. Note that some distributions enable it?in startup scripts.

      一般來說出去的報文都會經過默認路由出去查看默認路由的方法

      客戶端與服務端建立連接時如果服務端因為這個參數校驗不過而導致報文丟棄那么在服務端抓包的現象是能收到客戶端的報文但是服務端沒有進行任何回應。

      rp_filter導致的丟包數量可以通過netstat命令查看

      netstat -s | grep IPReversePathFilter

      可以設置打印syslog:

      sysctl -w net.ipv4.conf.all.log_martians=1

      設置之后可以在/var/log/messages中看到對應的日志

      IPv4: martian source 10.185.203.166 from 10.185.203.172, on dev eth1

      ll header: 00000000: fa 16 3e dd 7b bb fa 16 3e 28 00 60 08 00

      以上日志表示

      10.185.203.166 目的ip

      10.185.203.172 源ip

      eth1 接收到報文的網卡

      ll header: link layer header

      fa 16 3e dd 7b bb 目的mac

      fa 16 3e 28 00 60 源mac

      08 00 上層協議號08 00: IP Packets? ?86 dd: IPv6 Packet?08 06: ARP Packet

      需要注意的是除了rp_filter會導致出現火星包之外還有其他情況也會導致出現火星包。比如源地址全0等等。。。。

      參考

      https://unix.stackexchange.com/questions/166006/kernel-martian-source-to-and-from-same-ip

      https://support.hpe.com/hpsc/doc/public/display?docId=mmr_kc-0109178

      http://kevinz.github.io/linux%20kernel/2013/03/18/rp-filter-and-martian-packet.html

      linux參數arp_filter,arp_ignoe,arp_announce,rp_filter詳解

      arp_filter

      arp_filter和rp_filter類似都是進行反向路徑檢驗不過是專門針對arp協議的。而且行為也有所不同。

      arp_filter將對arp報文的源ip進行判斷決定響應行為官方文檔描述如下

      arp_filter - BOOLEAN

      0 - (default) The kernel can respond to arp requests with addresses? from other interfaces. This may seem wrong but it usually makes? sense, because it increases the chance of successful communication.? IP addresses are owned by the complete host on Linux, not by? particular interfaces. Only for more complex setups like load-? balancing, does this behaviour cause problems.

      1 - Allows you to have multiple network interfaces on the same subnet, and have the ARPs for each interface be answered based on whether or not the kernel would route a packet from? the ARP'd IP out that interface (therefore you must use source? based routing for this to work). In other words it allows control? of which cards (usually 1) will respond to an arp request.

      arp_filter for the interface will be enabled if at least one of? conf/{all,interface}/arp_filter is set to TRUE,? it will be disabled otherwise

      當arp_filter設置為0時如果從某張網卡上收到了一個arp請求同時目的ip在此主機上不論目的ip是否在接收到此arp請求的網卡上那么主機便會進行響應響應的mac地址為接收到此請求的網卡的mac地址。

      當arp_filter設置為1時如果從某張網卡上收到了一個arp請求同時目的ip在此主機上不要求目的ip是一定在接收到此arp請求的網卡上那么主機便會查詢到此請求的源ip的路由是通過哪張網卡如果是接收到此arp請求的網卡則發送arp響應響應的mac地址為接收到此請求的網卡的mac地址。

      在如下組網圖中

      如果182.11.1.107想要和10.10.1.1通信那A就必須將arp_filter設置為0否則182.11.1.107無法通過arp協議獲取到10.10.1.1的mac地址也就無法和10.10.1.1進行通信。

      但是某些場景arp_filter設置為0又會導致問題。

      考慮以下場景 例子借鑒于此文章

      http://3ms.huawei.com/hi/group/6891/wiki_4306543.html

      主機A的兩張網卡處于同一個局域網中這種情況B發送的arp請求A的兩張網卡都能收到。如果A的arp_filter參數設置為0那么兩張網卡將分別進行回復。這將導致B處得到的ip地址與mac的對應關系混亂。解決此問題的辦法是將A的arp_filter參數設置為1。

      通過下面的例子來深入理解A的arp_filter參數設置為1的情況下此種場景下具體的行為

      三張網卡二層互通103和104在同一個主機上。從107上向103和104發送ping請求。

      1.??????arp_filter設置為0的場景

      fep0:/etc/sysconfig/network # echo 0? >/proc/sys/net/ipv4/conf/eth3/arp_ignore

      fep0:/etc/sysconfig/network # echo 0? >/proc/sys/net/ipv4/conf/eth4/arp_ignore

      fep0:/etc/sysconfig/network # echo 0? >/proc/sys/net/ipv4/conf/all/arp_filter

      1?在107上發送ping 103的請求

      2?在eth3和eth4上分別抓包

      可以發現兩張網卡都進行了回復。這個時候就出現了ip對mac對應關系混亂的情況。解決方法是將arp_filter設置為1。

      2.??????arp_filter設置為1的場景

      echo 1 >/proc/sys/net/ipv4/conf/all/arp_filter

      (只要有一項設置為true即可)

      1?在107上發送ping 103的請求

      因為到107的路由是經過eth3所以只有eth3進行了回復并且回復的mac是eth3的mac。

      2?在107上發送ping 104的請求

      可以發現還是eth3進行的回復回復的mac是eth3的mac。eth4同樣沒有進行回復。

      這樣就解決了同一個主機上有多張同網段的網卡的通信問題。但是103和104都對應同一個mac。

      arp_ignore

      定義對目標地址為本機IP的ARP查詢不同的應答模式

      參數說明

      整型值的范圍為0-8常用的只有012默認為0。

      0(默認值回應任何網絡接口上對任何本地IP地址的arp查詢請求比如eth0=192.168.0.1/24, eth1=10.1.1.1/24,那么即使eth0收到來自10.1.1. 2這樣地址發起的對10.1.1.1的arp查詢也會回應一而原本這個請求該是出現在eth1上也該由eth1回應的響應的mac自然是eth0的mac。

      1?只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求比如eth0=192.168.0.1/24, eth1=10.1.1.1/24,那么當eth0收到對192.168.0.1的查詢請求時會進行回復(不論arp請求源地址是啥)而對待查詢的ip為10.1.1.1的arp查詢不會進行回復

      2?只回答目標IP地址是來訪網絡接口本地地址并且請求源IP必須在該網絡接口的子網段內的ARP查詢請求。比如eth0=192.168.0.1/24, eth1=10.1.1.1/24, eth0收到對192.168.0.1的查詢請求源地址為?10.1.1.2(不同網段)不會進行不會回答而會回答192.168.0.2發起的對192.168.0.1的arp查詢請求

      那么當arp_ignore設置為1時eth3和eth4就只會分別回復對103和104的arp請求不僅解決了同一個主機上有多張同網段的網卡的通信問題。而且103和104和mac的對應關系也是正確的。

      當某張網卡收到一個arp報文會先進行arp_filter檢驗如果檢驗失敗直接丟棄報文。如果校驗成功則會進行arp_ignore檢驗。可以理解為arp_filter是一個比較粗糙的檢驗而arp_ignore是一個比較細致的檢驗。為什么要設置兩級校驗呢arp_filter與rp_filter又是什么關系呢

      arp_ignore用來設置對arp查詢請求的應答模式還有一個參數arp_announce用來設置主動發送arp請求時對源地址的選擇模式。

      arp_announce

      arp_announce的作用是控制系統在對外發送arp請求時如何選擇arp請求數據包的源IP地址。比如系統準備通過網卡發送一個數據包a這時數據包a的源IP和目的IP一般都是知道的然后根據目的IP查詢路由表確定發送數據包的網卡。鏈路層要轉發數據需要獲取下一跳的MAC地址通過發送arp請求得到。arp請求的目的IP是下一跳IP而arp請求的源IP是什么呢 可能第一反應會以為肯定是數據包a的源IP地址但是這個也不是一定的arp請求的源IP是可以選擇的控制這個地址如何選擇就是arp_announce的作用

      arp_announce參數常用的取值有012。

      0允許使用任意網卡上的IP地址作為arp請求的源IP通常就是使用數據包的源IP。

      1Try to avoid local addresses that are not in the target’s subnet for this interface. This mode is useful when target hosts reachable via this interface require the source IP address in ARP requests to be part of their logical network configured on the receiving interface. When we generate the request we will check all our subnets that include the target IP and will preserve the source address if it is from such subnet. If there is no such subnet we select source address according to the rules for level 2

      個人理解

      在發送該數據包的網卡上如果找到和數據包的源地址在同一個網段的地址則使用數據包的源地址作為arp請求的源地址。否則使用配置為2時的規則。

      2忽略IP數據包的源IP地址在發送此請求的網卡上查找與arp請求的目標地址一般和數據包的目標地址并不相同在同一網段的ip地址作為arp請求的源地址。如果找不到則隨便取某張網卡的第一個ip地址。

      sysctl.conf中包含all和eth/lo具體網卡的arp_announce參數其中較大的值生效。

      由此也可以理解為什么LVS在DR模式下要配置

      echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce

      因為如果使用數據包的源ip浮動ip發送arp請求則會更新其他主機的arp緩存導致報文不能被正常轉發至LVS從而導致LVS不能正常工作。設置為2則arp請求會使用發送arp請求的網卡上合適的地址而浮動ip配置在環回地址上所以一定不會以浮動ip作為arp請求的源地址。

      base_reachable_time

      arp表項mac緩存表老化時間

      參數的配置方法

      以上4個參數都分別有all,default,lo,eth1,eth2...等表示對應不同的網卡。當all和具體網卡的參數值不一致時取較大值生效。

      一般只需修改all和某個具體網卡的參數即可取決于你需要修改哪個網卡。

      參數的值可以通過

      sysctl -a | grep net.ipv4.conf.xxx

      命令進行查看

      修改有三種方法以修改lo網卡為例

      1.?修改/etc/sysctl.conf文件然后sysctl -p刷新到內存。此配置在機器重啟之后依然有效

      net.ipv4.conf.all.arp_ignore=1

      net.ipv4.conf.lo.arp_ignore=1

      net.ipv4.conf.all.arp_announce=2

      net.ipv4.conf.lo.arp_announce=2

      net.ipv4.conf.all.rp_filter=1

      net.ipv4.conf.lo.rp_filter=1

      net.ipv4.conf.all.arp_filter=1

      net.ipv4.conf.lo.arp_filter=1

      2.?使用sysctl -w直接寫入內存在機器重啟之后無效

      sysctl -w net.ipv4.conf.all.arp_ignore=1

      sysctl -w net.ipv4.conf.lo.arp_ignore=1

      3.?修改/proc文件系統在機器重啟之后無效

      echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

      echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

      參考

      Linux內核參數之arp_ignore和arp_announce

      https://www.cnblogs.com/lipengxiang2009/p/7451050.html

      TCP/IP 緩存 Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:文件盒標簽怎么做(怎么做文件盒上的標簽)
      下一篇:項目預算甘特圖
      相關文章
      亚洲成熟xxxxx电影| 亚洲欧美日韩久久精品| 亚洲精品国产首次亮相| 亚洲jjzzjjzz在线播放| 亚洲欧洲日产v特级毛片| 亚洲日本中文字幕| 亚洲国产精品久久久久久| 亚洲2022国产成人精品无码区| 一本久久a久久精品亚洲| 亚洲中文字幕无码爆乳av中文 | 亚洲国产aⅴ综合网| 国产成人精品久久亚洲高清不卡| 亚洲中文字幕无码av| 亚洲日韩亚洲另类激情文学| 香蕉大伊亚洲人在线观看| 亚洲综合激情六月婷婷在线观看| 18亚洲男同志videos网站| 久久亚洲美女精品国产精品| 噜噜噜亚洲色成人网站∨| 亚洲毛片免费视频| 久久精品国产亚洲αv忘忧草| 亚洲制服丝袜第一页| 精品亚洲成A人无码成A在线观看| 亚洲av无码国产综合专区| 国产精品亚洲一区二区麻豆| 亚洲精品无码久久久久APP| 男人的天堂亚洲一区二区三区| 亚洲av最新在线观看网址| 老子影院午夜伦不卡亚洲| 亚洲AV无码专区日韩| 久久亚洲精品无码播放| 日本亚洲视频在线| 亚洲天堂中文资源| 亚洲字幕在线观看| 亚洲一本到无码av中文字幕| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲第一页综合图片自拍| 亚洲香蕉网久久综合影视| 亚洲AV无码1区2区久久| 亚洲国产日韩在线成人蜜芽| 亚洲国产精品久久久久婷婷软件 |