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

Как серверы / клиенты VPN избегают маршрутизации собственных пакетов удаленного подключения через себя?

Я пытаюсь концептуализировать, как сеть работает под капотом Linux VPN, которые используют интерфейсы TUN.

Мое лучшее предположение выглядит следующим образом (пожалуйста, поправьте меня):

  1. Установлено соединение с удаленным клиентом / сервером.
  2. Интерфейс TUN создан и запущен
  3. Таблица маршрутизации обновлена, чтобы установить шлюз по умолчанию для интерфейса TUN

Но разве пакеты, предназначенные для удаленного клиента / сервера, не попадут в интерфейс TUN и не образуют своего рода петлю? Как это решают системы VPN? В чем состоит пробел в моем понимании?

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

Как я обычно видел это, и делал это сам на различных маршрутизаторах, - это использование маршрутизации политики:

  • Маршрутизатор, выступающий в качестве конечной точки VPN, сохраняет свой маршрут по умолчанию, указывающий на Интернет через его канал ISP.
  • У него также есть маршрут политики с правилом на основе источника, согласно которому трафик, исходящий из подсетей, находящихся за ним, независимо от их назначения, должен отправляться через туннель.

Представьте систему с 1 физическим адаптером: enp2s0.

Его таблица маршрутизации может начинаться, когда весь трафик уходит enp2s0.

Как только система подключается к VPN, инициализируется интерфейс TUN (tun0), и VPN обновляет таблицу маршрутизации: весь трафик, направленный на адрес VPN-сервера на порте X (адрес и порт VPN-сервера), уходит enp2s0. Весь остальной трафик проходит через tun0.

Конечно, VPN не обязательно маршрутизировать весь трафик. Например, я раньше настраивал VPN, в которых через VPN проходит только трафик, идущий в определенную частную подсеть, поэтому обычный интернет-трафик не изменится. То, как вы это делаете, зависит от программы VPN.

С маршрутизацией на основе пункта назначения это тоже несложно.

Обычно я вижу способ загрузить маршрут на сервер VPN, указав ранее существовавший шлюз и интерфейс, а расстояние (на самом деле приоритет маршрутизации) установлено на 1. Маршрут по умолчанию для VPN всегда будет иметь расстояние не менее 2.