LINUX.ORG.RU
решено ФорумAdmin

VPN-шлюз на nftables

 , ,


1

1

Добрый день, друзья! У меня возник вопрос, который я в течение нескольких недель не могу решить. Искал на разных сайтах, но вразумительного ответа не нашел. Всякая критика и обвинения меня в непрофессионализме можно опустить, я это знаю и так. Но так вышло, что мне приходится заниматься сервером на debian. Пока была машина на debian 8, все мои правила в iptables работали замечательно. Но вот настало время переехать на Debian 12, а там nft. Я почти все свои правила смог реализовать в nft. Но есть одна загвоздка. Я никак не могу дорулить работу VPN-шлюза. То есть, за сервером во внутренней сети есть машина, на которую подключаемся снаружи по VPN. Так вот, я открывают правила для 1701, 1723, для протокола gre, модули подгружаю. А вот далее затык. Начинает все работать только в том случае, если я добавлю правило, но в iptables

-t raw -A PREROUTING -p tcp –dport 1723 -j CT –helper pptp

Но выглядит все это нехорошо, что хвост правил на iptables, как это реализовать в nft, не знаю и не понимаю. Буду благодарен, если поможете.

Ответ на: комментарий от dimanlev

Сейчас не Debian под руками. А там же не транслятор уже стоит и даже если применять правила iptables, то они всё равно транслируются в nft?

Тогда достаточно сделать nft list ruleset, после того, как команда iptables применена, и получить полный дамп, как это писать в nft

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 1)
Ответ на: комментарий от dimanlev

Если пнуть nft вручную, он, в принципе, должен показать место ошибки.

Достаточно вызвать /etc/nftables.conf (это shell с правилами на самом деле), он должен или применить правила или показать, что ему не нравится.

Если уже из сессии применит корректно, то у меня есть подозрение, что где-то там находится iif или oif которые для динамических интерфейсов на момент загрузки отсутствуют (потому что это индексы, которые быстрей в сравнениях, но на момент загрузки nft отсутствуют, и поэтому nft не загружает ruleset с ошибкой). Их надо заменить на iifname/oifname.

SkyMaverick ★★★★★
()
Ответ на: комментарий от dimanlev

pptp - насколько я понял, интерфейс динамический. nft загружается, и, соответственно, грузит правила еще ДО того, как их начал поднимать NetworkManager (или что там их в debian поднимает).

Соестественно, на момент запуска, nft ничего не знает о конкретном интерфейсе и не загружает правила, потому что в правилах описано что-то ему неизвестное, но требующее реакции уже сейчас. Из того, что я натыкался, это как правило, iif / oif.

Потом правила уже применяются, потому что интерфейс уже поднят и nftables о нём знает.

А что за правило-то nftables генерирует-то? На момент загрузки ошибку можно посмотреть в логе сервиса nftables.service, кстати говоря. nft, так-то, достаточно информативный в этом плане.

SkyMaverick ★★★★★
()
Ответ на: комментарий от SkyMaverick

В правилах используются конструкции исключительно iifname/oifname. При попытки скормить дамп, nft ругается, что синтаксическая ошибка в конструкции в таблице raw. Эта конструкция как раз и были в ведена командой

-t raw -A PREROUTING -p tcp –dport 1723 -j CT –helper pptp

Ну, то есть, хотя эта команда приводит к нужному результату, но дамп правил nft потом не съедается nftables

dimanlev
() автор топика
Ответ на: комментарий от SkyMaverick

Да, спасибо большое. Это сработало. А могу ли уточнить, почему приоритет -100? Ведь для raw, насколько я помню, читал, -300. Я это же делал, но приоритет -300 втыкал.

dimanlev
() автор топика
Ответ на: комментарий от dimanlev

Значит что-то ранее по тракту обломало это правило и увеличение приоритета проблему решило. В принципе, если всё работает и ничего не ломается и проблема решена, то почему-бы и нет.

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 1)
17 августа 2024 г.
Ответ на: комментарий от SkyMaverick

Так работает?

и мне помогло, спасибо!

tcpdump-ом понял, что виртуалка не может gre для подключения по pptp, полез смотреть как пролезать через NAT на nft

помогло )

powerguy ★★★
()