Ви можете призначити різну мережеву конфігурацію процесу за допомогою просторів мережевих імен Linux . Теоретично слід налаштувати PAM * для встановлення кожного користувача у його окремому просторі мережевих імен, але, швидше за все, простіше запустити відповідну програму у власному просторі імен.
Загальна установка може описувати створення мостового інтерфейсу Linux для підключення просторів імен до мережі. Трохи простіші налаштування можна архівувати за допомогою ipvlan (включений у версії ядра 3.19 і вище) або пристрою macvlan (для бездротового доступу не можна використовувати macvlan ). Документація ядра Linux містить докладний приклад налаштування ipvlan у мережевому просторі імен.
Слідуючи прикладу в документації:
Створіть мережевий простір імен ns0
ip netns add ns0
Створення ipvlan slave на eth0 (головний пристрій)
ip link add link eth0 ipvl0 type ipvlan mode l2
Призначте рабів до простору мережевих імен ns0
ip link set dev ipvl0 netns ns0
Налаштуйте ведений пристрій у мережевому просторі імен 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
.
Запустіть додаток у мережевому просторі імен за допомогою 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"
.