Что делает TUN и что ещё должен делать протокол VPN
TUN перемещает IP-пакеты между ядром и программой. Транспорт, аутентификация и шифрование относятся к протоколу, на котором говорит эта программа.
Если считать tun0 и протокол VPN одним и тем же, люди идут не в тот журнал. Интерфейс — это локальная граница, где программа в пользовательском пространстве обменивается IP-пакетами с ядром. Протокол — это то, что программа делает с пакетами, получив их: транспорт, аутентификация, шифрование и партнёр. Создание устройства не выбирает ничего из этого.
Два компонента, один путь пакета
Ядро записывает IP-пакет в устройство, а программа читает его из файлового дескриптора. В обратном направлении программа записывает пакет обратно, и ядро маршрутизирует его так, будто он пришёл на настоящий интерфейс. TUN переносит IP, а TAP — кадры Ethernet. Чтение пакета на этой границе показывает кадрирование, и именно для этого устройство и нужно.
Всё за этой границей — дело программы. Две программы могут использовать одно и то же понятие интерфейса и делать с пакетами совершенно разные вещи. Само устройство не имеет мнения о том, что будет дальше. Файловый дескриптор — единственная ручка, которая есть у программы на стороне ядра.
Создайте устройство, затем наблюдайте за границей
Создавайте устройство намеренно, когда проверяете границу. Постоянное устройство переживает процесс, который его создал, что полезно для экспериментов и позже часто становится источником путаницы. Проверьте флаги и владельца, прежде чем винить VPN.
sudo ip tuntap add dev tun9 mode tun user alice
ip -d link show tun9Сведения о связи показывают тип устройства и привязанного владельца. Если ни один процесс не держит его открытым, записанные в него пакеты никуда не идут. Устройство без привязанного процесса может выглядеть здоровым в списке связей, ничего при этом не пропуская.
Чего не может обещать имя интерфейса
Имя интерфейса ничего не говорит о шифровании или аутентификации. Программа может завернуть пакеты в TLS, в собственный протокол, в IPsec или вообще ни во что. Выбор TUN вместо TAP меняет кадрирование на границе, а не проект безопасности. Выбор кадрирования реален, и он намного меньше вопроса безопасности.
Обнаружение работает так же: наблюдатель видит внешний протокол на проводе, а не метку, которая сказала бы, какое локальное устройство его создало. Туннель, который выглядит как что-то другое, делает это из-за своего внешнего протокола, а не из-за имени интерфейса. Наблюдатель не может увидеть, какое локальное устройство создало пакет, только как пакет выглядит. Держите эти два вопроса отдельно, когда сравниваете продукты, потому что один ответ никогда не подразумевает другой.
Подберите исправление к сбойному этапу
Когда что-то ломается, разделяйте этапы сбоя. Отсутствующее устройство, ошибка прав и отклонённый вход дают разные доказательства и разные исправления. Сначала читайте локальное состояние, затем собственный журнал программы, затем взгляд партнёра. Прочитайте все три, прежде чем что-то менять.
ip -d link show tun0
journalctl -u openvpn-client@corp --since '10 min ago'Если устройство существует и процесс держит его, локальная граница работает, а проблема дальше. Если устройства нет, никакая проверка учётных данных не поможет. Этап, который вы можете назвать, — это этап, который вы можете проверить. Документация TUN/TAP описывает границу и модель устройства.