Иногда нет надобности заворачивать вообще весь трафик в VPN, и достаточно бывает просто сделать HTTP- или SOCKS-прокси, чтобы управлять трафиком каждого приложения в отдельности. Иногда VPN'ов несколько, и чтобы они ужились и работали, без плясок с бубном и чтения документации просто не обойтись. Поэтому приходится либо прятать клиент OpenVPN в виртуалки или контейнеры, либо мудрить с настройками маршрутизации, чтобы направить трафик в нужных направлениях.
Если так подумать, использование tun/tap — явный оверкил. Пользовательский процесс клиента OpenVPN принимает данные по сети, потом их режет-комбинирует, пихает в ядро. Оттуда пакеты выпрыгивают в локальный прокси-сервер, который потом снова... В общем, лишнее. К тому же, необходимость использования /dev/net/tun вынуждает выдавать контейнеру CAP_NET_ADMIN.
Теоретически, должно быть возможно эдакое скрещивание OpenVPN, юзерспейсной реализации TCP/UDP и какого-нибудь прокси-сервера. Без использования tun/tap.
Такое уже есть?