指定接口时,Curl 可以工作,但 ping 不起作用

指定接口时,Curl 可以工作,但 ping 不起作用

在 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 &ecirc;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 &ecirc;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重启后保持持久性。重启后,不需要将其应用于每个单独的接口。

相关内容