Я пытаюсь концептуализировать, как сеть работает под капотом Linux VPN, которые используют интерфейсы TUN.
Мое лучшее предположение выглядит следующим образом (пожалуйста, поправьте меня):
Но разве пакеты, предназначенные для удаленного клиента / сервера, не попадут в интерфейс TUN и не образуют своего рода петлю? Как это решают системы VPN? В чем состоит пробел в моем понимании?
Вы правы в том, что с чисто маршрутизацией на основе пункта назначения это проблема, если пункты назначения, которые вы достигаете через туннель, перекрываются с маршрутизацией, необходимой для создания туннеля и т.
Как я обычно видел это, и делал это сам на различных маршрутизаторах, - это использование маршрутизации политики:
Представьте систему с 1 физическим адаптером: enp2s0.
Его таблица маршрутизации может начинаться, когда весь трафик уходит enp2s0.
Как только система подключается к VPN, инициализируется интерфейс TUN (tun0), и VPN обновляет таблицу маршрутизации: весь трафик, направленный на адрес VPN-сервера на порте X (адрес и порт VPN-сервера), уходит enp2s0. Весь остальной трафик проходит через tun0.
Конечно, VPN не обязательно маршрутизировать весь трафик. Например, я раньше настраивал VPN, в которых через VPN проходит только трафик, идущий в определенную частную подсеть, поэтому обычный интернет-трафик не изменится. То, как вы это делаете, зависит от программы VPN.
С маршрутизацией на основе пункта назначения это тоже несложно.
Обычно я вижу способ загрузить маршрут на сервер VPN, указав ранее существовавший шлюз и интерфейс, а расстояние (на самом деле приоритет маршрутизации) установлено на 1. Маршрут по умолчанию для VPN всегда будет иметь расстояние не менее 2.