Почему ваш интерфейс VPN постоянно покидает свою зону firewalld
Зона держится, пока туннель не переподключится, а потом исчезает. Выясните, кто владеет этим интерфейсом — NetworkManager или firewalld, — прежде чем вставлять команду.
Вы добавляете tun0 в нужную зону, приложение начинает работать, а исправление испаряется при следующем переподключении. Повторный запуск той же команды работает, из-за чего кажется, будто firewalld забыл. Он не забыл; что-то с более сильным правом на этот интерфейс переназначило его.
Зона держится, пока интерфейс не будет создан заново
Назначение зоны firewalld интерфейсу — это привязка, а привязки привязаны к объекту интерфейса в том виде, в каком он существует сейчас. Клиент VPN, который разрушает устройство и создаёт его заново, порождает новый объект, и новый начинается с того, что скажет назначающий компонент. Именно поэтому симптом повторяется при каждом переподключении, а не при каждом пакете.
Та же логика объясняет поведение при перезагрузке: привязки времени выполнения не переживают перезапуск, а постоянные привязки действуют только для устройств, которые firewalld считает своими.
Прежде чем что-либо менять, выясните, какой компонент назначает зону.
Прочитайте три вещи, прежде чем что-либо менять
Запишите зону, которая сейчас есть у интерфейса, активные зоны с их интерфейсами и постоянный список интерфейсов для нужной вам зоны. Выполните эти запросы до изменения, после одного переподключения и после одной перезагрузки. Сравнение трёх результатов покажет, заменяется ли привязка, игнорируется или просто применяется поздно. Если постоянный список уже называет устройство, а зона времени выполнения с этим не согласна, что-то перекрывает ваше исправление.
Записывайте также фактическое имя устройства на каждом шаге, потому что туннель, который сегодня попадает на tun0, завтра может попасть на tun1.
Сохранённая привязка к общему имени не является проверкой личности, а две минуты записи экономят час догадок.
Когда соединением владеет NetworkManager
Если NetworkManager управляет соединением VPN, его профиль несёт зону и передаёт её firewalld при активации соединения. Постоянная привязка интерфейса в firewalld для того же устройства может тогда игнорироваться, потому что владелец — NetworkManager. Задайте зону на соединении и убедитесь, что вы редактируете профиль VPN, а не постороннее физическое соединение или временную запись.
Изменение этого свойства может немедленно повлиять на активное соединение.
Держите доступным путь управления и прочитайте политику целевой зоны, прежде чем применять её. Редактировать поле ZONE в файле ifcfg правильно только там, где этот файл всё ещё является источником конфигурации.
Когда привязкой владеет firewalld
Для отдельного туннеля с намеренно стабильным именем интерфейса постоянное изменение интерфейса — правильный инструмент. Примените его через перезагрузку или жизненный цикл, который использует ваше развёртывание, а затем проверьте состояние времени выполнения, потому что правка только в постоянных настройках описывает намерение, а не то, что активно. Эти два могут расходиться всё время, пока длится перезагрузка.
Если имя интерфейса динамическое, поддерживайте назначение на протяжении жизненного цикла соединения, а не гонитесь за туннелем, который первым займёт имя.
Не бросайте интерфейс в trusted только ради того, чтобы приложение заработало.
Проверьте перезагрузку, переподключение и перезапуск
Изменение завершено только тогда, когда оно переживает все три.
Сначала перезагрузите, потому что именно там исчезают правки только времени выполнения. Затем переподключите туннель, потому что именно там заменённый интерфейс теряет свою привязку. Затем перезапустите систему, потому что именно там наконец проявляется несоответствие владельца. Записывайте зону на каждом этапе и сравнивайте её с записанным намерением, и отметьте, какой шаг создал разницу.
Если зона верна, а приложение всё равно не работает, проблема в правилах зоны или в классификации по источнику, а не в членстве. Документация firewalld о соединениях и интерфейсах — это справочник о том, как должно работать владение.
Запишите владельца, значение и ожидаемый результат в runbook, и следующее переназначение будет объяснимым.