我有一个带有 4 个以太网端口(eth0、eth1、eth2 和 eth3)的设备。我配置了一些端口,结果ifconfig
如下:
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:0B:68:D9:ED
inet addr:192.168.0.81 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: 2601:1c0:5200:e950:290:bff:fe68:d9ed/64 Scope:Global
inet6 addr: fe80::290:bff:fe68:d9ed/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:3382 errors:0 dropped:1 overruns:0 frame:0
TX packets:9717 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:363791 (355.2 KiB) TX bytes:13339318 (12.7 MiB)
Memory:dfe60000-dfe7ffff
eth1 Link encap:Ethernet HWaddr 00:90:0B:68:D9:EE
inet addr:192.168.0.90 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:44 errors:0 dropped:1 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2919 (2.8 KiB) TX bytes:438 (438.0 b)
Memory:dfe40000-dfe5ffff
eth3 Link encap:Ethernet HWaddr 00:90:0B:68:D9:F0
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::290:bff:fe68:d9f0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:308 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20454 (19.9 KiB) TX bytes:618 (618.0 b)
Memory:dfe00000-dfe1ffff
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:11986 errors:0 dropped:0 overruns:0 frame:0
TX packets:11986 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14067159 (13.4 MiB) TX bytes:14067159 (13.4 MiB)
所以,我的问题是每个 IP 地址(链接到 eth0、eth1 和 eth3 的 IP 地址)仅当我将以太网电缆插入 eth0 时才能访问。当电缆插入 eth0 时,我可以对所有 3 个设备执行 ping 操作。当插入 eth1 和 eth3 时,我无法 ping 通其中任何一个。当我将它们插入 eth1 和 eth3 时,链路指示灯亮起。
当我跑步时ethtool eth3
,它确实说Link detected: yes
。
有人有什么想法吗?
谢谢!
答案1
这个问题与一个叫做非对称路由— 在一个接口上收到的数据包将在另一个接口上发送其响应,从而使某些 IP 地址无法从网络外部访问。
在这种情况下,收到的 ICMP ping 请求eth1,2,3
将被路由回eth0
该请求(如果没有物理连接到网络),则将无法代表 进行响应eth1,2,3
。解决方案是将反向路径过滤器内核参数的默认值rp_filter
从 1 更改为 2,以便所有接口相互独立响应。
编辑
/etc/sysctl.conf
以包括,$ grep '.rp_filter' /etc/sysctl.conf net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.eth0.rp_filter = 2 net.ipv4.conf.eth1.rp_filter = 2 net.ipv4.conf.eth2.rp_filter = 2 net.ipv4.conf.eth3.rp_filter = 2
重新加载配置:
$ sysctl -p