После подключения к моему серверу 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 Чтобы получить больше информации.