當網卡收到的包的目的地址是主機上另一個網卡的地址.arp總結
阿新 • • 發佈:2018-02-14
vco 主機 str req wireshark 否則 inter receive attr
內核中是如何確定arp_ignore和rp_filter的值的?
#define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER) #define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE)
然後呢
#define IN_DEV_MAXCONF(in_dev, attr) (max(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr), IN_DEV_CONF_GET((in_dev), attr)))
落實到文檔中就是:
The max value from conf/{all,interface}/arp_ignore is used when ARP request is received on the {interface}
代碼與文檔匹配:
所以在做關於arp的試驗之前,要先把機器上的/proc/sys/net/ipv4/conf/all/rp_filter和/proc/sys/net/ipv4/conf/all/arp_ignore都設置成0,這樣你對待試驗網卡的設置才會生效的。
都設置成0後,開始首先進行arp_ignore的試驗:
1)arp_ignore = 0; 主要arp包中的目的地址是本地某一個網卡的地址,返回應答包;
2)arp_ignore = 1; arp包中的目的地址是必須是該網卡,否則丟包;【這裏註意要有rp_filter要設置成0,會進行反向路由檢查】
3)arp_ignore = 2; arp包中的目的地址必須是本網卡,並且來源IP必須與該網卡是一個網段,否則丟包;
借助軟件wireshark;
然後把arp_ignore設置成0之後,試驗rp_filter
1) rp_filter = 0; 不做反向路由的檢查
2) rp_filter = 1; 進行反向路由的檢查,並且檢查結果一定是該IP地址從該接受網卡出,否則丟包;
3) rp_filter = 2; 進行反向路由的檢查,沒那麽嚴格,只要是本機器能路由出去就得!
所有的設置均符合預期。
當網卡收到的包的目的地址是主機上另一個網卡的地址.arp總結