根據 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 -nip route showip route show table all51820

相關內容