Получается, что вы можете поместить туннельный интерфейс в сетевое пространство имен. Вся моя проблема сводилась к ошибке при поднятии интерфейса:
ip addr add dev $tun_tundv \
local $ifconfig_local/$ifconfig_cidr \
broadcast $ifconfig_broadcast \
scope link
Проблема в "scope link", которую я неправильно понял, как влияющую только на маршрутизацию. Это приводит к тому, что ядро устанавливает исходный адрес всех пакетов, посылаемых в туннель, на 0.0.0.0
; предположительно, сервер OpenVPN отбросит их как недействительные согласно RFC1122; даже если бы этого не произошло, получатель явно не смог бы ответить.
Все работало корректно при отсутствии сетевых пространств имён, потому что встроенный в openvpn скрипт сетевой конфигурации не допустил этой ошибки. И без "scope link", мой оригинальный скрипт тоже работает.
(Как я это обнаружил, спрашиваете? Запустив strace
в процессе openvpn, установите hexdump всего, что он читает из туннельного дескриптора, а затем вручную декодируйте заголовки пакетов.)
]В основном да, это iptable файл по умолчанию для чистой установки, но я рекомендую использовать более современные 2 правила, и добавить некоторые журналы к вашим правилам.[
] []Смотрите этот шаблон, например: []https://gist.github.com/jirutka/3742890[][
]