在 virtualBox 中的 Fedora 25 上运行,我连接了 2 个带有 NAT 配置的网卡。
我可以看到接口和路由都是由系统自动创建的:
$ ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
default via 10.0.3.2 dev enp0s8 proto static metric 101
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
10.0.3.0/24 dev enp0s8 proto kernel scope link src 10.0.3.15 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
现在我想通过这两个界面发出 curl 请求:
$ curl --interface enp0s3 www.perdu.com
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre> * <----- vous êtes ici</pre></strong></body></html>
$ curl --interface enp0s8 www.perdu.com
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre> * <----- vous êtes ici</pre></strong></body></html>
但是,当我想通过两个接口进行 ping 时,只有一个接口可以工作:
$ ping -Ienp0s3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.0.2.15 enp0s3: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=4.87 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=5.49 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 4.874/5.182/5.490/0.308 ms
$ ping -Ienp0s8 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.0.3.15 enp0s8: 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2079ms
我的问题是如何才能使 ping 通过两个接口正常工作?
谢谢
答案1
这可能与ARP通量在 Linux 中。尝试
sysctl -w net.ipv4.conf.default.rp_filter = 2
在虚拟机中。然后清除ARP主机上的缓存,可能还需要等待几秒钟。如果有帮助,请添加
net.ipv4.conf.default.rp_filter = 2
使其/etc/sysctl.d/99-my.conf
重启后保持持久性。重启后,不需要将其应用于每个单独的接口。