LINUX.ORG.RU

Как заставить пользователя/приложение использователь определенный IP или интерфейс?


2

1

Сегодня разобрался с мультиситом и столкнулся с вполне ожидаемой проблемой.
Многие игры и софт хотят слушать только определенные порты и поэтому даже будучи запущенными от разных пользователей две копии одновременно не работают.
Опенсорс иногда можно пропатчить, но и то не всегда (т.к теряется совместимость с непропатчеными версиями), с проприетарщиной не вариант.

В идеале хотелось бы каждому пользователю мультисита выделить свой IP или интерфейс.
Возможно ли?

★★★
Ответ на: комментарий от post-factum

Виртуализация не вариант, т.к:
1 - Конфигураций при которых быстро и стабильно работает 3D очень мало. Нужна правильная материнка, правильный процессор и видеокарты и фаза луны.
2 - Теряется экономическая целесообразность. Нельзя взять дешевое железо и запустить там 4 xorg на 4 дешевых видеокартах.
А ведь подшаманив можно на каждые иксы по несколько мониторов (пользователей) повесить. :)

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

А без неё никак. Только если не хочешь заморачиваться с Xen'ом, советую посмотреть в сторону cgroups и namespaces, ибо:

Network namespace isolates the network interface controllers (physical or virtual), iptables firewall rules, routing tables etc. Network namespaces can be connected with each other using the «veth» virtual Ethernet device.

По идее, так можно определённой группе процессов навязать своё виртуальное Ethernet-устройство.

post-factum ★★★★★
()
Ответ на: комментарий от qnikst

У меня есть огромные сомнения, что при этом проприетарный драйвер будет работать корректно и на хосте и внутри контейнера.

Т.е ядро и модули вроде же общие? А вот как будет работать юзерспейс мне лично не понятно.
Думаю никак работать не будет :(

winddos ★★★
() автор топика
Ответ на: комментарий от post-factum

Сейчас будут читать про это.


Сам знаю только про роутинг и про хаки через iptables.
Но не совсем понятно вынудит ли смена роутинга юзать «правильный» интерфейс.
Т.к есть подозрение, что большинство софта просто слушает все интерфейсы и потому вместе работать все равно не захочет.

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

большинство софта просто слушает все интерфейсы

namespaces как бы уровнем ниже, поэтому вряд ли они просто так обходимы юзерским софтом. Читай, потом расскажешь, если выйдет сделать задуманное.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

Спасибо огромное за идею c контейнерами и неймспейсами.
В общем все оказалось элементарно, я просто не знал про

1 - Контейнеры мне ставить не пришлось, т.к уже установлены.
2 - Не стал разбираться с более сложными вариантами и сделал из своего eth0 бридж br0.
Т.е убил networkmanager и прописал бридж в /etc/network/interfaces:

#auto eth0
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_fd 0

3 - Создал простейший конфиг для контейнера /root/lxc.conf:
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.1.42/24

4 - Запустил его
lxc-execute --name bash -f /root/lxc.conf /bin/bash

5 - Запустил Warcraft 3 в Wine (да от рута, ну да ладно).
6 - Запустил вторую копию игры от пользователя. Обе игры (в контейнере и вне его) слушают 0.0.0.0:6112:UDP и оба совершенно корректно работают.
Для теста так же прогнал внутри контейнера Unigine Heaven и просадок от него никаких нет.
Сейчас будут тестировать всякий другой софт в игры.

В идеале хотелось бы запускать внутри контейнера все приложения юзера, а лучше иксы целиком.
Буду пробовать.

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

Ну это, наверное, всё-таки не совсем то, что я имел в виду. Меня интересовал вопрос, можно ли виртуализировать сеть без lxc.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

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

Сейчас разбираюсь с cgroups

winddos ★★★
() автор топика
Ответ на: комментарий от post-factum

Вообще cgoups не имеют никаких функций специально для работы с сетью, но доступ к файловой системе можно ограничить.
Т.е можно заранее создать несколько VLAN*ов и потом просто органичить конкретному процессу/пользователю доступ ко всем остальным.

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

winddos ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.