Назад | Перейти на главную страницу

У меня есть две записи по умолчанию в моей таблице маршрутов

После подключения к моему серверу OpenVPN я вижу свою таблицу маршрутизации как:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.199.1.5      128.0.0.0       UG        0 0          0 tun0
default         192.168.1.1     0.0.0.0         UG        0 0          0 enp0s3
10.199.1.1      10.199.1.5      255.255.255.255 UGH       0 0          0 tun0
10.199.1.5      *               255.255.255.255 UH        0 0          0 tun0
104.156.228.133 192.168.1.1     255.255.255.255 UGH       0 0          0 enp0s3
128.0.0.0       10.199.1.5      128.0.0.0       UG        0 0          0 tun0
192.168.1.0     *               255.255.255.0   U         0 0          0 enp0s3

Меня смущают две записи по умолчанию и то, как их интерпретировать.

При обычном IP-адресе Genmask выполняется побитовое И с адресом назначения, чтобы определить, какая запись соответствует. Но как Genmask работает по умолчанию?

В приведенном выше примере, какие пакеты будут отправлены на 10.199.1.5, а какие - на 192.168.1.1?

Я пытаюсь пометить пакеты, предназначенные для порта 22 (SSH), а затем принудительно установить маршрут по умолчанию для этих пакетов на мой маршрутизатор по умолчанию, а не на мою VPN. Но я также хотел бы полностью разобраться в таблице маршрутизации, прежде чем с ней связываться.

по умолчанию - это просто псевдоним для 0.0.0.0. Вы можете увидеть это, если войдете

$ route -n

Если я отредактирую это в вашей таблице и немного перемешу записи, это будет выглядеть так:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.199.1.5      128.0.0.0       UG        0 0          0 tun0
128.0.0.0       10.199.1.5      128.0.0.0       UG        0 0          0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 enp0s3
10.199.1.1      10.199.1.5      255.255.255.255 UGH       0 0          0 tun0
10.199.1.5      *               255.255.255.255 UH        0 0          0 tun0
104.156.228.133 192.168.1.1     255.255.255.255 UGH       0 0          0 enp0s3
192.168.1.0     *               255.255.255.0   U         0 0          0 enp0s3

Ага! Итак, теперь у вас есть 0.0.0.0 с сетевой маской 128.0.0.0, а также 128.0.0.0 с сетевой маской 128.0.0.0. Эти двое вместе отображают весь Интернет. Но поскольку сетевая маска 128.0.0.0 более специфична, чем 0.0.0.0, они имеют приоритет над «стандартным» маршрутом по умолчанию.

Таким образом, весь трафик направляется в tun0 (полный туннель), за исключением 104.156.228.133 (конечная точка VPN) и 192.168.1.0/24 (ваша локальная сеть).

Это изящный трюк, который OpenVPN использует для переопределения шлюза по умолчанию, не меняя его.

Только пакеты, использующие tun0 интерфейс будет использовать шлюз по умолчанию 192.168.1.1. Это поведение можно изменить, изменив «веса» различных маршрутов. Видеть https://unix.stackexchange.com/questions/23820/what-is-the-routing-behaviour-when-two-or-more-default-routes Чтобы получить больше информации.