Правила nftable становятся недействительными при переподключении (VDSL, ppp0)
Я перестраиваю свой роутер, используя nftables на Debian Jessie. У меня есть рабочая установка до того момента, когда мой провайдер решит переназначить новый WAN IP путем повторного подключения моего DSL-канала. После такого переподключения маршрутизатор сам подключается к сети, но маскировка больше не работает.
Настройка Nftable перед повторным подключением:
# nft list table nat
table ip nat {
chain prerouting {
type nat hook prerouting priority 0; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oif ppp0 masquerade
}
}
Настройка nftable после переподключения:
# nft list table nat
table ip nat {
chain prerouting {
type nat hook prerouting priority 0; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oif 8 masquerade
}
}
Поэтому я предполагаю, что время простоя ppp0 во время переподключения приводит к тому, что связанные правила являются какими-то неназначенными. Повторное применение правил nft вручную (flush + add) решает эту проблему до следующего повторного подключения.
Как я могу гарантировать, что временно отключенные правила будут автоматически переназначены на ppp0 после восстановления соединения?
1 ответ
Я наконец понял, как решить эту проблему.
# nft list table nat
table ip nat {
chain prerouting {
type nat hook prerouting priority 0; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "ppp0" masquerade
}
}
Вы просто должны использовать iifname/oifname "ppp0"
вместо oif/iif ppp0
, Последний обращается к интерфейсу через строку, а не использует идентификатор интерфейса. Цитаты не являются обязательными, но я думаю, что это хорошо подчеркивает различную интерпретацию.
В справочной странице просто говорится:
Введите ifname: Имя интерфейса (16-байтовая строка). Не должно существовать.
Я не знаю, есть ли какие-либо недостатки, такие как снижение производительности при сопоставлении, но мне кажется, что это правильное решение.