Команда выполняется внутри namespace VPN, появляется окно Firefox, но страница всё равно выходит через обычное соединение. Настройка маршрутизации, вероятно, не первое, что нужно перестраивать. Проверьте, создала ли команда ожидаемый экземпляр браузера или передала URL тому, который уже работал в другом месте. Это различие объясняет результат за один шаг и экономит час работы с nftables.

Признак в том, что окно появляется мгновенно, без холодного запуска.

Новое окно — не новый экземпляр

Настольные приложения обычно повторно используют существующий процесс. Запускающая программа внутри одного сетевого namespace не переносит уже работающего получателя в этот namespace, потому что получатель никогда не был частью запуска. Поведение Firefox при удалённом управлении связано с профилями: запуск против уже используемого профиля передаёт аргументы его владельцу. Новое окно настоящее; новый сетевой путь — нет.

Приватный просмотр и опция нового окна не являются средствами изоляции сети.

Им не является и флаг командной строки, который влияет только на режим окна. Если профиль занят, запрос уходит процессу, который им владеет, и этот процесс сохраняет тот namespace, в котором начался.

Принудительно создайте отдельный экземпляр в отдельном профиле

Используйте выделенный профиль, созданный через поддерживаемый рабочий процесс профилей браузера, и запускайте его явно с этим профилем. В сборках Firefox, которые это поддерживают, --new-instance запрашивает новый экземпляр, а не окно внутри существующего. Посмотрите собственный вывод справки установленной сборки, потому что доступные флаги различаются в зависимости от версии.

Не пытайтесь открыть один и тот же живой профиль одновременно и не воспринимайте предупреждение о том, что профиль используется, как указание удалять файлы блокировки.

Запускайте браузер и под его обычным пользователем без прав root. Настройка сети часто требует административных прав, и заманчиво дать браузеру те же права, потому что он часть того же эксперимента. Графическому браузеру они не нужны, а запуск от root создаёт отдельный класс проблем с профилем и разрешениями. Держите привилегию и сетевой путь как два независимых решения.

Проверьте, какой процесс несёт трафик

В Linux сетевой namespace процесса виден через его ссылку на namespace. Прочитайте её для процесса, который, по вашему мнению, делает запрос, а затем для процесса, который делает его на самом деле.

readlink /proc/ACTUAL_PID/ns/net

Браузеры запускают несколько процессов, поэтому идентичность важна: процесс содержимого, устанавливающий соединение, может быть не тем, который вы проверили первым. Сравните ссылку с задуманным namespace и подтвердите свежим безобидным запросом, который можно отнести к одному экземпляру. Отнесение — это весь тест. Если вы не можете сказать, какой процесс установил соединение, вы не проверили namespace.

Когда namespace действительно неправильный

Иногда запускающая программа действительно даёт сбой, и новый экземпляр стартует в неправильном namespace. Проверьте службу или обёртку, которая его создала, потому что unit или запись рабочего стола может потерять namespace при повторном выполнении через шину сеанса. Затем проверьте снова из оболочки внутри правильного namespace, прежде чем винить браузер. Одна переменная за раз — единственный способ сохранить это диагностируемым.

Совместное использование экрана не разделяет и resolver.

Если процесс находится в правильном namespace, а разрешение имён всё ещё не удаётся,исследуйте его среду resolver как отдельную проблему. Никакое другое изменение маршрутизации не может перенести запрос, который был передан неправильному экземпляру ещё до того, как он начался.

Похожие статьи