Маршруты и интерфейс ipsec0 в kernel-libipsec¶
В испытанной версии ГОСТ ESP выполняется в пользовательском kernel-libipsec: расшифрованный IP передаётся через TUN ipsec0. Маршрут к защищаемому адресу, а не маршрут к физическому IP VPN-партнёра, должен указывать на TUN.
1. Проверка TUN¶
ipsec0 обычно создаёт charon после загрузки kernel-libipsec; не создавайте второй одноимённый TUN вручную. Если его нет, сначала проверьте загрузку плагина и unit.
2. Подготовка маршрутов на узле А¶
ip link set ipsec0 mtu 1400 up
ip route replace table 220 10.200.2.1/32 dev ipsec0 src 10.200.1.1
ip rule show | grep -q '^220:' || ip rule add priority 220 lookup 220
ip route get 10.200.2.1
ip route get 192.168.10.26
Результат для защищённого адреса: 10.200.2.1 dev ipsec0 table 220 src 10.200.1.1. Физический узел 192.168.10.26 должен по-прежнему идти через обычный eth0 (или реальный underlay-интерфейс).
3. Зеркальная настройка на узле Б¶
ip link set ipsec0 mtu 1400 up
ip route replace table 220 10.200.1.1/32 dev ipsec0 src 10.200.2.1
ip rule show | grep -q '^220:' || ip rule add priority 220 lookup 220
ip route get 10.200.1.1
ip route get 192.168.10.15
Не применяйте автоматически на роутере с существующей таблицей 220
Приоритет 220 и номер таблицы использовались на тестовых VM. Если они заняты VPN/политиками ОС, назначьте свободный номер и скорректируйте процедуры. Команда grep '^220:' — удобная проверка для чистого стенда, не валидатор совпадения существующей политики.
4. Что происходит при падении VPN¶
Когда charon удаляет ipsec0 или маршрут, ядро может найти обычный маршрут через default gateway. Поэтому обязательны правила fail-closed. Не рассчитывайте, что одного маршрута достаточно для защиты данных.
5. Постоянные маршруты¶
Показанные ip route/ip rule действуют до перезагрузки, если сам charon не изменяет их. Для постоянной конфигурации используйте systemd-networkd и согласованный запуск после появления TUN; не добавляйте хрупкий sleep без проверки интерфейса. Проверка после reboot описана в операциях.
Для других топологий (LAN-LAN, множества CHILD, транзитного трафика) меняются local_ts, remote_ts, маршруты, firewall FORWARD и политика NAT. Не копируйте host-to-host /32 без адаптации.