Согласно руководству Mullvad, для включения выключателя для Wireguard необходимо следующее:
A: Добавьте следующие строки в раздел [Interface] конфигурационных файлов WireGuard, находящихся в / etc / wireguard / :
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
Где имя файла для отдельных конфигураций vpn, например, /etc/wireguard/mullvad-se5.conf
. CentO / S и Fedora используют FirewallD вместо IPtables, поэтому использование приведенных выше правил приводит к зависанию «восходящего» туннеля. Каков точный эквивалент FirewallD для приведенных выше правил?
Ваше предположение не совсем верно. Тот факт, что система использует Firewalld, не означает, что команды iptables не работают.... И то, и другое (iptables и firewalld) устанавливают одинаковые вещи по отношению к ядру - это всего лишь опция, как это настроить. Правда в том, что если вы используете firewalld и что-то настроено с помощью команды iptables, то это работает до тех пор, пока правила firewalld не будут перезагружены, так как эти "дополнительные" правила не известны firewalld - они не имеют представления объектов firewalld.
Вопрос в том, действительно ли это проблема в случае не постоянного туннеля - в случае перезагрузки туннель не постоянный и во время восстановления соединения все настройки могут быть установлены снова, так что я не вижу "runtime state" в настройках реальной проблемы...
Firewalld имеет переключатель --direct[11107881], который рекомендуется использовать как последнюю опцию (если у вас нет другого варианта, как установить правило), но оно есть... Синтаксис наиболее близок к iptables, поэтому я прямо указываю на эту опцию. В случае, если вы хотите, чтобы правило было постоянным, вы можете использовать также опцию -poristent, но я думаю, что в этом случае она не нужна.
Синтаксис в общем случае:
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
таблица по умолчанию является фильтром, так что в случае, если вы используете iptables без опции -t, вы работаете с фильтром table -t.
iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
будет соответствовать
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
, так как вы видите, что разница "только" в начале в том, как сказать, куда будет добавлено правило. Часть
совпадает с командой iptables.
Надеюсь, этого примера будет достаточно, чтобы вы смогли переписать любое правило в синтаксис firewalld. Удачи!
-------- edit : adding -D "alternative" ----------
iptables -D OUTPUT ...
соответствуют
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>