Як можна призначити один IP на користувача?


11

Я будую безголовий ігровий сервер Steam, який використовує потоковий вхід Steam для того, щоб дві людини грали одночасно. Багатосезонна частина налаштування виконана і функціональна, але примусити її працювати бездротово - досить клопітно.

Лише один клієнт Steam може одночасно включати потокове передачу в домашніх умовах. Це, швидше за все, пов'язано з використанням тих же портів та IP-адреси. Як я можу призначити кожному користувачеві власну IP-адресу?

Потокове передавання буде здійснюватися лише з внутрішньої мережі. Сама машина вже має 3 IP-адреси в одному інтерфейсі.

Відповіді:


21

Ви можете призначити різну мережеву конфігурацію процесу за допомогою просторів мережевих імен Linux . Теоретично слід налаштувати PAM * для встановлення кожного користувача у його окремому просторі мережевих імен, але, швидше за все, простіше запустити відповідну програму у власному просторі імен.

Загальна установка може описувати створення мостового інтерфейсу Linux для підключення просторів імен до мережі. Трохи простіші налаштування можна архівувати за допомогою ipvlan (включений у версії ядра 3.19 і вище) або пристрою macvlan (для бездротового доступу не можна використовувати macvlan ). Документація ядра Linux містить докладний приклад налаштування ipvlan у мережевому просторі імен.

Слідуючи прикладу в документації:

  1. Створіть мережевий простір імен ns0

    ip netns add ns0
    
  2. Створення ipvlan slave на eth0 (головний пристрій)

    ip link add link eth0 ipvl0 type ipvlan mode l2
    
  3. Призначте рабів до простору мережевих імен ns0

    ip link set dev ipvl0 netns ns0
    
  4. Налаштуйте ведений пристрій у мережевому просторі імен ns0

    ip netns exec ns0 ip link set dev ipvl0 up
    ip netns exec ns0 ip link set dev lo up
    ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
    ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
    ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
    

    Надайте адреси хостів та маршрутизаторів у $IPADDRта $ROUTER.

  5. Запустіть додаток у мережевому просторі імен за допомогою ip exec

    ip netns exec ns0 <command>
    

    Щоб виконати команду як інший користувач, використовуйте звичайну su <user> -c -- <command>.


* EDIT: від теорії до практики: я написав простий модуль PAM, щоб продемонструвати, як змінити мережевий простір імен на користувача. Потрібно налаштувати мережеве ім'я з ip netnsподібним чином вище та зіставити конкретних користувачів на конкретні простори імен. Після цього всі користувацькі процеси будуть знаходитись у їх налаштованому просторі імен замість стандартного. Код розміщений на github . Використовуйте на свій страх.


ваша друга команда не працює для мене на ubuntu 14.04я тільки отримую: Garbage instead of arguments "mode ...". Try "ip link help".
Сім

1
Я оновив відповідь версією ядра, схоже, Ubuntu 14.04 не містить достатньо недавньої версії ядра. Я не можу придумати рішення, яке дозволяє налаштувати окремі IP-адреси під час використання бездротового зв’язку. Якщо ви використовуєте Ethernet, ви можете просто замінити ipvlan на macvlan в команді 3 і слідувати решті прикладу.
sebasth

ти маєш на увазі команду 2? Змінні $IPADDRі $ROUTERповинні бути надані мною або вони вже встановлені?
Сім

1
Дійсно команда 2 . Ви повинні надати власну мережну конфігурацію.
sebasth

2
@ Симпатичний улов, не вдалося. Виправлена ​​відповідь, простір імен потрібно вказати після ключового слова exec, як і в інших частинах прикладу.
sebasth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.