Это основано на политике маршрутизации.Ядро Linux может работать с несколькими таблицами маршрутизации и правилами, которые определяют, для какого трафика используется конкретная таблица маршрутизации.Вы можете увидеть эти правила с ip rule
, если iproute2
доступно в вашей системе.Маршруты в конкретной таблице могут быть перечислены с ip route list table <nr/name>
(используйте all
в качестве имени, чтобы увидеть маршруты во всех таблицах).
Правила могут соответствовать различным свойствам, связанным с сетевым пакетом (или комбинациейих), например, IP-адреса, входящие / исходящие интерфейсы, метки Netfilter или UID процессов.Последнее, в частности, используется для исключения / включения конкретных приложений.Каждое приложение запускается уникальным пользователем со своим UID.Это позволяет контролировать, использует ли конкретное приложение таблицу маршрутизации, которая направляет трафик на устройство TUN.
Например, использование VPN исключительно для трех приложений добавляет правила с этими селекторами:
... uidrange 10010-10010 lookup 1049
... uidrange 10062-10062 lookup 1049
... uidrange 10094-10094 lookup 1049
Таблица маршрутизации 1049 (это изменяется для каждого нового экземпляра VPN) содержит маршрут, который направляет трафик на устройство TUN.
С другой стороны, если те же три приложения исключены из VPN, селекторами являются:
... uidrange 0-10009 ...
... uidrange 10011-10061 ...
... uidrange 10063-10093 ...
... uidrange 10095-99999 ...
Как вы можете видеть, трафик со всех UID (в диапазоне 0-99999), за исключением трех ранее рассмотренных, направляется в таблицу маршрутизации для устройства TUN.