Правила 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-байтовая строка). Не должно существовать.

Я не знаю, есть ли какие-либо недостатки, такие как снижение производительности при сопоставлении, но мне кажется, что это правильное решение.

Другие вопросы по тегам