解决多网卡配置一个子网,ping 不通的问题

问题描述

最近有一个使用场景需要两个网卡接入一个子网中,即 eth0: 192.168.1.100, eth1: 192.168.1.101,在 Centos6.5 上测试发现只有一个 IP 能 ping 通,另外一个 IP 无法 ping 通。

原因是在 Centos 6 的内核是 2.6.32,一个网络参数 rp_filter 的默认值被设置成 1,这意味着所有包会经过严格的检查,如果源 IP 地址非法则丢弃这个包。所以抓包会发现能够正常收到 ICMP 的请求包,但是内核不会响应。

内核的说明文档是这么解释的:

rp_filter - INTEGER
    0 - No source validation.
    1 - Strict mode as defined in RFC3704 Strict Reverse Path
        Each incoming packet is tested against the FIB and if the interface
        is not the best reverse path the packet check will fail.
        By default failed packets are discarded.
    2 - Loose mode as defined in RFC3704 Loose Reverse Path
        Each incoming packet's source address is also tested against the FIB
        and if the source address is not reachable via any interface
        the packet check will fail.

    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.

所以解决方案有了,在 /etc/sysctl.conf 末尾加上这两行

net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2

sysctl -p 使配置文件生效即可。这样两个网卡上同网段的 IP 都能 ping 通了。

Host model

另外,这里还牵扯到 Linux 的节点模型(Host model)。在计算机网络里,节点模型分为两种:强模型和弱模型。两种模型在多网卡的场景下表现是不同的。

强模型

强模型强调了节点和路由器的区别,它将配置了多个网卡的节点看成若干个逻辑节点,只不过这些节点放在一个物理机上。所以这种模型下 IP 是绑定在网卡上的,而不是绑定在主机上,所以网卡和网卡之间是隔离的,不能跨越网卡收发包。

弱模型

弱模型下,IP 是绑定在主机上,而不是绑在网卡上的,所以不管主机上有几个网卡,有几个 IP,只要目的地址是这个主机上的 IP ,内核都会一律收下。

Windows Vista 和 WindowsServer 2008 的 TCP/IP 协议栈默认情况下 IPv4 和 v6 都是强模型,同时也支持配置成弱模型。[4]
BSD 默认情况下也是强模型。
Linux 默认是弱模型,gtt 估计和 Linux 的使用场景一般是网络设备有关。

参考文档

  • [1]http://z-issue.com/wp/linux-rhel-6-centos-6-two-nics-in-the-same-subnet-but-secondary-doesnt-ping/
  • [2]https://en.wikipedia.org/wiki/Host_model
  • [3]http://www.ietf.org/rfc/rfc4907.txt
  • [4]https://technet.microsoft.com/en-us/magazine/cc137807.aspx

发表评论

电子邮件地址不会被公开。 必填项已用*标注