Як я можу перейти з користувальницького простору імен мережі Linux назад до типового?


14

За допомогою ip netns exec ви можете виконати команду у власному просторі імен мереж - але чи є також спосіб виконання команди у просторі імен за замовчуванням?

Наприклад, після виконання цих двох команд:

sudo ip netns add test_ns
sudo ip netns exec test_ns bash

Як новостворений bash може виконувати програми в просторі мережевих імен за замовчуванням? Існує немає IP - netns EXEC по замовчуванням або що - небудь подібне, наскільки я знайшов.

Мій сценарій:

Я хочу запустити сервер SSH в окремому просторі мереж імен (щоб решта системи не знала про мережеве з'єднання, оскільки система використовується для тестування мережі), але хочу мати змогу виконувати програми в просторі мережевих імен за замовчуванням через з'єднання SSH.

Що я дізнався поки що:

Відповіді:


13

Більш нові дистрибутиви / ядра підтримують nsenterкоманду, яка повинна робити те, що ви хочете, за умови, що ви будете мати root, коли ви це зробите.

Ось приклад (Fedora 20).

[root@home ~]# unshare -n /bin/bash
[root@home ~]# ip a l
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@home ~]# ping google.com
ping: unknown host google.com
[root@home ~]# nsenter -t 1 -n -- ping -c 2 google.com
PING google.com (74.125.230.65) 56(84) bytes of data.
64 bytes from lhr14s23-in-f1.1e100.net (74.125.230.65): icmp_seq=1 ttl=56 time=14.2 ms
64 bytes from lhr14s23-in-f1.1e100.net (74.125.230.65): icmp_seq=2 ttl=56 time=15.0 ms

--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 14.239/14.621/15.003/0.382 ms
[root@home ~]# nsenter -t 1 -n -- ip a l
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
2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 10:bf:48:88:50:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global p4p1
       valid_lft forever preferred_lft forever
    inet6 fe80::12bf:48ff:fe88:50ee/64 scope link 
       valid_lft forever preferred_lft forever
[root@home ~]# 

Це спирається на setnsсистемний виклик. Для цього вам потрібно щонайменше ядро ​​3.0 та glibc-2.14.

RHEL 6.5 забезпечує підтримку стійких просторів імен, але не підтримує переміщення існуючих процесів у нові простори імен.


Це прекрасно працює, окрім того, що Ubuntu надає застарілий пакет util-linux без nsenter. Тут я знайшов детальні інструкції щодо збирання: askubuntu.com/questions/439056/…
Мартін

Я спробував, nsenter -t 1 -nале це створило новий процес так само, як ip netns execі не змінило простір імен поточного процесу.
Павло Шімерда

15

Я виявив, що можна повернутися до простору мережевих імен за замовчуванням за допомогою двох простих команд:

ln -s /proc/1/ns/net /var/run/netns/default
ip netns exec default ifconfig -a

Цей метод, очевидно, передбачає, що ви можете бачити процеси за межами власного простору імен через procфайлову систему. Якщо ви також перебуваєте в окремому просторі імен PID, повернутися до простору імен за замовчуванням не так просто.

Вищезазначені команди були протестовані на Ubuntu 14.04. Я не знаю, чи є щось подібне, що стосується підходу.


1
Це досить роман! Я б рекомендував насправді робити mount --bindзамість цього ln -s, оскільки це означає, що ipкоманда також може керувати нею (ip в основному робить mount --пов'язати з цими файлами простору імен для налаштування стійких просторів імен).
Метью Іфе

@kasperd ви кажете, що це не так просто з окремим простором імен PID. Чи насправді це все ж можливо? Ви можете згадати як?
гарбуз

@copumpkin Я цього не перевіряв.
kasperd

0

"ln -s / proc / 1 / ns / net / var / run / netns / default" <----- Зовсім не рекомендується.

Лічильник коду, який видає "ip netns show"

якщо у вас є оболонка bash, просто існуйте з bash, вийдіть.

Якщо у вас є ssh до мереж, то ssh до інтерфейсу ns за замовчуванням і робіть все, що вам потрібно там зробити.

В крайньому випадку, так, як ln, як зазначено вище, але я б запропонував видалити його, як тільки це буде зроблено, і до того, як будь-які зміни відбудуться до будь-яких ns. Інакше лічильник буде пошкоджений і спричинить проблеми.


2
Здається, це коментар до іншої відповіді.
RalfFriedl

На жаль, я щойно підписався і не зміг прокоментувати. Радий переїхати зараз, я можу публікувати коментарі. @RalfFriedl
Лука А

0
nsenter -n -t <pid of a process running in the default ns>

Ви можете отримати форму pid, роблячи "ps aux" або навіть верх, якщо хочете.

Особисто я завжди ssh до основного простору імен, тоді я завжди можу повернутися до типового значення, ввівши вихід і потім повторно ввівши простір імен, якщо потрібно.

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