![从特定接口执行 ping 操作时出现问题](https://linux22.com/image/911/%E4%BB%8E%E7%89%B9%E5%AE%9A%E6%8E%A5%E5%8F%A3%E6%89%A7%E8%A1%8C%20ping%20%E6%93%8D%E4%BD%9C%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我正在尝试从特定接口进行 ping 操作,我的笔记本电脑上有有线和无线连接。
我的有线适配器eth0
的 IP 为 172.16.109.75
我的 WiFi 适配器wlan0
的 IP 为 192.168.1.69
eth0
当我使用以下命令在拔掉电源的情况下 ping google 时:
conneco@mcr-pc-29334:~$ ping -I wlan0 www.google.co.uk
PING www.l.google.com (74.125.230.115) from 192.168.1.69 wlan0: 56(84) bytes of data.
64 bytes from 74.125.230.115: icmp_seq=1 ttl=51 time=32.7 ms
64 bytes from 74.125.230.115: icmp_seq=2 ttl=52 time=28.7 ms
64 bytes from 74.125.230.115: icmp_seq=3 ttl=52 time=28.9 ms
64 bytes from 74.125.230.115: icmp_seq=4 ttl=52 time=28.3 ms
正如预期的那样,它工作得很好。我插入eth0
电缆并再次运行相同的操作:
conneco@mcr-pc-29334:~$ ping -I wlan0 www.google.co.uk
PING www.l.google.com (74.125.230.112) from 172.16.109.75 wlan0: 56(84) bytes of data.
From mcr-pc-29334.local (192.168.1.69) icmp_seq=2 Destination Host Unreachable
From mcr-pc-29334.local (192.168.1.69) icmp_seq=3 Destination Host Unreachable
From mcr-pc-29334.local (192.168.1.69) icmp_seq=4 Destination Host Unreachable
From mcr-pc-29334.local (192.168.1.69) icmp_seq=5 Destination Host Unreachable
From mcr-pc-29334.local (192.168.1.69) icmp_seq=6 Destination Host Unreachable
From mcr-pc-29334.local (192.168.1.69) icmp_seq=7 Destination Host Unreachable
从顶部的输出来看,它似乎是从eth0
(在工作中无法 ping 因为它被阻止)发送的,但这wifi
是另一个链接到一个单独的网络,我直接在网上,因此发送来自 的 ping 请求wlan0
应该有效。发生了什么?我应该如何修复它?
答案1
可能是,当插入以太网电缆时,您的默认路由网关会通过 dhcp 更改。您从 wlan0 发送数据包,但您的系统不知道将它们转发到的网关是谁。这样,您只能 ping 通 192.168.1 网络内的系统,而不能 ping 更远的系统。如果您想从谷歌服务器获得回复,您必须将默认网关更改回无线路由器,或者为此服务器添加特定路由。
route add -host 74.125.230.112/32 gw 192.168.1.1 # assuming 192.168.1.1 is the wireless router's ip
答案2
SystemWide,只能有一个默认网关,也只能有一张SystemWide路由表。不完全正确,但足够了。
NicWide,每个网卡可以有一个默认网关。每个网卡都可以有自己单独的路由表。
简而言之,熟悉ip route
、ip rule
和 /etc/iproute2/rt_tables。看这个 ”两个默认路由“ 教程。
答案3
我的例子
# echo "203 T3" >> /etc/iproute2/rt_tables
# apt install -y sipcalc
WNET=$(sipcalc -I wlp2s0 | grep "Network address" | awk '{print $4}')
WBIT=$(sipcalc -I wlp2s0 | grep "Network mask (bits)" | awk '{print $5}')
WLAN_NET="$WNET/$WBIT"
ip route add default via $GW_WLAN table T3
ip route add $WLAN_NET via $GW_WLAN table T3
ip rule add from $WLAN_NET table T3
# Tests
ip rule list
ping -I enp3s0 8.8.8.8
ping -I wlp2s0 8.8.8.8