Почему мои пакеты отправляются через неправильный интерфейс согласно таблице маршрутизации Linux?

Почему мои пакеты отправляются через неправильный интерфейс согласно таблице маршрутизации Linux?

У меня есть машина Ubuntu Bionic с подключением по Wi-Fi; и я настроил на ней туннель 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

Если я пытаюсь пинговать или 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 wlan0traceroute использовать 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и имело приоритет над таблицей по умолчанию.

Связанный контент