根据 Linux 路由表,为什么我的数据包会从错误的接口发出?

根据 Linux 路由表,为什么我的数据包会从错误的接口发出?

我有一台带有 WiFi 链接的 Ubuntu Bionic 机器;并且我在其上设置了 WireGuard 隧道:

# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 5502  bytes 545376 (545.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5502  bytes 545376 (545.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420
        inet 10.0.0.3  netmask 255.255.0.0  destination 10.0.0.3
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 22980  bytes 2777236 (2.7 MB)
        RX errors 75  dropped 0  overruns 0  frame 75
        TX packets 23467  bytes 12255956 (12.2 MB)
        TX errors 0  dropped 362 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.218  netmask 255.255.0.0  broadcast 192.168.255.255
        ether dc:85:de:f3:3f:65  txqueuelen 1000  (Ethernet)
        RX packets 103227  bytes 54970550 (54.9 MB)
        RX errors 0  dropped 103695  overruns 0  frame 0
        TX packets 41654  bytes 15633577 (15.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我之前一直将所有流量重定向到 wireguard 隧道,但现在我已将其反转以允许对等端通过此主机转发。但是,出于某种原因,我的数据包似乎仍想通过隧道路由。

这是我的路由表:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    600    0        0 wlan0
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 wg0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.1.1     0.0.0.0         255.255.255.255 UH    600    0        0 wlan0
192.168.100.1   192.168.1.1     255.255.255.255 UGH   0      0        0 wlan0

如果我尝试 ping 或 curl 外部地址,它总是挂起。Traceroute 显示它正在尝试通过隧道路由数据包(对等方当前配置为丢弃它们):

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1)  68.393 ms  74.587 ms  74.328 ms^C

但是如果traceroute 8.8.8.8 -i wlan0强制 traceroute 使用 wlan0,因为上面的路由表应该强制执行,那么它就可以工作。

到底发生了什么?路由表不是说以 8.8.8.8 为目标的数据包必须从 wlan0 出去到 192.168.1.1 才能转发吗?

(如果有关系的话,我现在唯一的 iptables 是-A FORWARD -i wg0 -j ACCEPT-t nat -A POSTROUTING -o wlan0 -j MASQUERADE

答案1

似乎wg-quick up将路由添加到另一个未使用route -n或显示的表中ip route show。如果运行ip route show table all,则可以看到它。在本例中,它位于名为 的表中51820,并且优先于默认表。

相关内容