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