Посмотрите еще раз на таблицу маршрутизации (ip route
). Вы заметите, что есть либо маршрут default
к 10.13.10.5
, либо пара маршрутов 0.0.0.0/1
/128.0.0.0/1
к 10.13.10.5
(, что является просто уловкой, которая позволяет OpenVPN сохранить маршрут по умолчанию, хотя он становится неактивным. ), и этот маршрут проходит черезtun0
.
Неважно, какой у tun0
IP-адрес, важен IP-адрес шлюза , который оказывается 10.13.10.5
и находится по другую сторону от tun0
.
Так как же OpenVPN направляет весь трафик в tun0
? При предоставлении маршрутов, как и без OpenVPN, весь трафик направляется наeth0
(или wlan0
или на то, что указано в маршруте по умолчанию ).
OpenVPN не делает ничего особенного. В частности, он не использует необработанный сокет, он создает интерфейс tun/tap.
Редактировать
OpenVPN не «прослушивает трафик, связанный с другим концом».
Когда ядро Linux видит сетевой пакет, оно обращается к таблице маршрутизации , чтобы решить, что делать с пакетом. Если в таблице маршрутизации указано «отправлять все пакеты на шлюз 10.13.10.5
через tun0
», то это то, что делает ядро Linux. OpenVPN никоим образом не участвует в этом.
Теперь OpenVPN создал tun0
,Итак, когда ядро помещает пакет в tun0
, происходит то, что OpenVPN может прочитать этот пакет. Это то, что делает интерфейс tun/tap :. Он позволяет приложению читать пакеты, помещенные в этот интерфейс (ядром ), а также записывать пакеты, которые будут отправлены с этого интерфейса (, которые также будут обрабатываться как ядро, как если бы пакет пришел с реальной сетевой карты ).
Неразборчивый режим не задействован. Проблема в том, что вы не понимаете, как работает интерфейс tun/tap?