Linux: Чи є зручний спосіб виконати програму, прив'язуючи її до обраної IP-адреси?


11

У FreeBSD 4.9 це було дуже легко виконати лише за допомогою однієї команди, як-от

jail [-u username]  path hostname ip-number command

якщо шлях був у /вас, ви працювали з тією ж програмою, що і звичайно, але все його мережеве спілкування було обмежено використовувати лише вказану IP-адресу в якості джерела. Іноді це дуже зручно.

Тепер у Linux є LXC, який виглядає дуже схоже на jailзони FreeBSD (або зони Solaris) - чи можете ви придумати подібний спосіб виконання програми?


З якою програмою ви намагаєтеся це зробити? Багато програм є достатньо настроєними, щоб їм можна було сказати, до якого IP-адреси слід зв’язатись.
Warren Young

@WarrenYoung, спасибі КО, але "багато"! = "Всі"
poige

Хороший випадок використання для «ув’язнення» виконуваного файлу для використання певного IP - це запуск декількох ігрових серверів на одній машині в локальній мережі. Наприклад, ігри Valve транслюються лише через порти 27015-27020, тому на IP-адресу у вас може бути лише 6 серверів. Таким чином, ви додаєте віртуальні IP-адреси в NIC, але тоді вам потрібно вказати "+ ip <адреса>" в командному рядку ігрового сервера, який припиняє трансляцію своєї присутності клієнтам => відсутні сервери, видимі в браузері локальної мережі. Тож "+ ip" не працюватиме. Тому нам потрібно ув’язнити кожен сервер у середовищі, де він може знайти лише 1 IP-адресу. Результат: без обмежень #servers + клієнти бачать усі сервери.
Тиммос

Відповіді:


12

Запуск процесу всередині мережевого простору імен, який може бачити лише потрібну IP-адресу, може досягти чогось подібного. Наприклад, я вважаю, що я хотів, щоб локальний хост був доступний для певної програми.

Спочатку я створюю мережевий простір імен:

ip netns add limitednet

У просторах імен за замовчуванням є інтерфейс зворотного зв'язку, тому наступне мені просто потрібно піднести його:

sudo ip netns exec limitednet ip link set lo up

Тепер я можу запустити програму за допомогою, ip netns exec limitednetі вона зможе бачити лише інтерфейс зворотного зв'язку:

sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Якщо я хотів обмежити його адресою, відмінною від localhost, я міг би додати інші інтерфейси в область імен за допомогою:

ip link set DEVICE_NAME netns NAMESPACE

Мені доведеться трохи експериментувати, щоб зрозуміти, як додати одну ІР-адресу до простору імен у випадку, коли в інтерфейсі може бути більше однієї IP-адреси

Стаття LWN про простори імен також корисна.


Але варто згадати, що це потребує набагато більшої підготовки, оскільки мережевий простір імен має власну таблицю маршрутизації тощо. Якщо хтось прийде з більш простим способом імітувати jail, я буду використовувати його. ;)
poige
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.