LINUX.ORG.RU

Debian: как разделить две сетки между приложениями?

 , , , ,


0

1

Доброго всем времени суток

Есть обычный домашний комп. На компе стоит Debian 13 + Plasma + всякий юзерский софт (браузер\игрульки\телега\etc)

У компа два сетевых соединения. Обычный LAN и USB`шный wifi-свисток. Каждое соединение ведёт в разные сети. Оба - постоянно активны.

Что надо: чтобы юзер, запуская приложение (например: телегу) мог вручную указывать, какое соединение использовать приложению.

Возможно ли такое? Если возможно, то как это настроить?

Заранее всем благодарен.


Самое простое, что приходит в голову: настроить каждое приложение так, чтобы оно использовало только свой интерфейс

XMs ★★★★★
()
Ответ на: комментарий от anonymous

чтобы юзер мог выбирать.

анон, усеры разные бывают ) кому-то и правило iptables поменять из консоли не влом )

тс, кури в сторону полиси-бейзд рутинг или отдельных неймспейсов

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 2)
Ответ на: комментарий от anonymous

Так зайти в настройки приложения юзер-то может.

// Ну и как правильно заметили — юзеры разные бывают. Я думал о сетевых неймспейсах и о подобном, но как будто зайти в настройки проще

XMs ★★★★★
()

А можно поднять у себя прокси локально, и трафик его завернуть только в вайфай например, и поднять в системе метрику для вайфая. В целевой приложухе потом либо прописывать прокси, либо нет.

mergood
()
Ответ на: комментарий от XMs

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

mergood
()
Ответ на: комментарий от XMs

Когда-то давно, попадался мне мануал для чайников, по запуску десктопных приложений из консоли. С разными параметрами и ключами. Так вот там мелькало, что приложения, имеющие доступ к сети, можно было запускать с прямым указанием имени сетевого интерфейса… Мануал был под CentOS. Но это было так давно… На сегодня, ни поисковики, ни нейронка, ничего дельного (или достаточно простого, для десктопного пользователя Линуксов) не могут подсказать… Нейронки, кстати, предлагают накатать скрипт на питоне…

kuguar
() автор топика
Ответ на: комментарий от mergood

Я тоже об этом подумывал… Но решил отложить - м.б. чего попроще найдётся.

kuguar
() автор топика
Ответ на: комментарий от kuguar

Зависит от приложения. В некоторых настройки сети есть, в некоторых — нет

XMs ★★★★★
()
Ответ на: комментарий от kuguar

На сегодня, ни поисковики, ни нейронка, ничего дельного (или достаточно простого, для десктопного пользователя Линуксов) не могут подсказать

Вот тут рецепт относительно простой через подмену функции socket (с установкой SO_BINDTODEVICE) https://unix.stackexchange.com/a/648791

MirandaUser2 ★★
()
Ответ на: комментарий от mergood

Это если приложение умеет прокси во все функции. А поскольку нынче это не то чтобы не редкость когда оно так не умеет, то network namespaces выглядит более универсальным решением.

no-dashi-v2 ★★★★
()

Есть обычный домашний комп. На компе стоит Debian 13 + Plasma + всякий юзерский софт (браузер\игрульки\телега\etc). У компа два сетевых соединения. Обычный LAN и USB`шный wifi-свисток. Каждое соединение ведёт в разные сети. Оба - постоянно активны. Что надо: чтобы юзер, запуская приложение (например: телегу) мог вручную указывать, какое соединение использовать приложению. Возможно ли такое? Если возможно, то как это настроить?

У тебя обе сетевые карты подключены к одному домашнему роутеру? Если да, то гораздо лучше переключать сетевые потоки данных из одной подсети в другую на роутере, а не на компе.

Enthusiast ★★★★
()

Может поможет firejail и 2 desktop файла для приложения, в одном -net=eth0, а в другом -net=wlan0. По идее можно и обертки написать простенькие(типа startwithlan.sh firefox или startwithwlan.sh firefox), которые будут запускать любое приложение через выбранный интерфейс.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)

Отвечает ИИ.

Да, это абсолютно возможно. В Linux такая задача решается с помощью сетевых пространств имен (Network Namespaces).

Суть метода: мы создаем для приложения изолированную «комнату», в которую «переносим» физический Wi-Fi адаптер. Для системы (и остальных программ) этот Wi-Fi адаптер как бы исчезает, а приложение видит только его и работает через него.

Поскольку у вас стоит KDE Plasma (графическая среда), самым простым и безопасным способом для десктопных приложений является использование утилиты Firejail. Она умеет правильно пробрасывать в изолированное пространство не только сеть, но и звук, графику (X11/Wayland) и файлы.

Ниже приведена пошаговая инструкция.


Шаг 1. Узнаем имя Wi-Fi интерфейса

Откройте терминал (Konsole) и выполните:

ip link

Найдите ваш USB Wi-Fi свисток. Обычно он называется wlan0, wlan1 или, если это USB-свисток, что-то вроде wlx001122334455. Далее в инструкции я буду использовать имя wlan0. Замените его на ваше реальное имя интерфейса во всех командах.

Шаг 2. Отключаем Wi-Fi в NetworkManager

По умолчанию NetworkManager (значок сети в трее) пытается сам управлять всеми адаптерами. Если мы отдадим Wi-Fi приложению, NetworkManager будет с ним «воевать». Нужно сказать ему игнорировать этот свисток.

sudo nmcli device set wlan0 managed no

После этого Wi-Fi пропадет из списка сетей в трее KDE. Это нормально, теперь он будет отдаваться только нужным программам. (Чтобы вернуть всё как было в будущем, используйте команду sudo nmcli device set wlan0 managed yes).

Шаг 3. Устанавливаем Firejail

sudo apt update
sudo apt install firejail

Шаг 4. Проверяем работу

Запустим Telegram через Firejail, принудительно указав ему использовать только wlan0:

firejail --net=wlan0 telegram-desktop

Примечание: если у вас Telegram Flatpak или Snap, команда будет немного другой, но для стандартного deb-пакета из репозиториев Debian это сработает.

Если Telegram запустился и успешно подключился к сети (при этом в основной системе интернет через Wi-Fi работать перестанет, а через LAN продолжит) — всё настроено верно.

Шаг 5. Интегрируем в меню KDE Plasma

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

  1. Скопируем системный ярлык Telegram в вашу локальную папку (чтобы обновления системы его не затерли):

    cp /usr/share/applications/org.telegram.desktop.desktop ~/.local/share/applications/
    

    (Если файл называется иначе, найдите его через ls /usr/share/applications/ | grep telegram).

  2. Откройте скопированный файл в текстовом редакторе:

    nano ~/.local/share/applications/org.telegram.desktop.desktop
    
  3. Найдите строку, начинающуюся с Exec=. Было: Exec=/usr/bin/telegram-desktop ... Стало: Exec=firejail --net=wlan0 /usr/bin/telegram-desktop ... (Просто добавьте firejail --net=wlan0 в самое начало команды).

  4. Сохраните файл (Ctrl+O, Enter, Ctrl+X).

Теперь в меню приложений KDE (в поиске или в списке) у вас появится второй значок Telegram.

  • Один запускается как обычно (через LAN).
  • Второй (с приставкой или просто дубликат) запускается через Wi-Fi.

Вы можете переименовать второй ярлык в меню KDE (правой кнопкой мыши -> Свойства -> Изменить имя), например, в «Telegram (Wi-Fi)».


⚠️ Важные нюансы и возможные проблемы

  1. DNS и имя хоста: Firejail автоматически настраивает DNS внутри изолированного пространства, копируя его из основной системы. Если Telegram пишет, что нет связи, но пинг проходит, возможно, нужно прописать DNS вручную. Но в 95% случаев на Debian 13 Firejail справляется сам.
  2. Звук и Wayland: Если Telegram запустился, но нет звука или он вылетает (в Debian 13 по умолчанию может использоваться Wayland), попробуйте добавить к команде флаги проброса сессии: Exec=firejail --net=wlan0 --protocol=unix --env=WAYLAND_DISPLAY=wayland-0 /usr/bin/telegram-desktop
  3. Другие приложения: Таким же образом вы можете запускать браузер, торренты или игры. Просто создавайте копии .desktop файлов и меняйте Exec=.
  4. Если вам нужно, чтобы ОС тоже использовала Wi-Fi: Описанный выше метод «забирает» физический адаптер у системы. Если вам нужно, чтобы система тоже могла выходить в интернет через Wi-Fi, но Telegram ходил только через него — задача усложняется. В этом случае физический интерфейс трогать нельзя, и нужно использовать маршрутизацию на основе cgroups (создание группы процессов, пометка пакетов через nftables/iptables и правило ip rule). Это требует написания скриптов и настройки systemd-сервисов. Если нужен именно такой вариант — дайте знать, я распишу алгоритм для него. Но для 99% домашних сценариев (LAN для системы, Wi-Fi-свисток воткнут только для разгрузки канала или обхода блокировок провайдера для конкретных задач) метод с Firejail является самым надежным и простым.
gruy ★★★★★
()

Самое простое это через прокси. В сетевых программах в той же телеге и фф, есть выбор прокси и таким макаром рулить. А в локальной прокси прописать как и через что идти.

vtVitus ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария