zoukankan      html  css  js  c++  java
  • 当网卡收到的包的目的地址是主机上另一个网卡的地址.arp总结

    2019/01/13 今天测试发现结果不符合预期呀,发现设置了arp_filter之后,仍然是能ping通主机上的另外一张网卡.但是现在的问题是

    --------------------

    内核中是如何确定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; 进行反向路由的检查,没那么严格,只要是本机器能路由出去就得!

    所有的设置均符合预期。

  • 相关阅读:
    1-wire单总线DS18B20
    开漏输出
    拉电流(source current)与灌电流(sink current)
    高阻态;什么是三态门? 三态逻辑与非门电路以及三态门电路
    小电流MOS管
    DS18B20 CRC8分析
    go hmac使用
    gin入门
    go web框架推荐
    Go语言入门系列2 基本语法
  • 原文地址:https://www.cnblogs.com/honpey/p/8447819.html
Copyright © 2011-2022 走看看