Làm cách nào tôi có thể chuyển từ không gian tên mạng linux tùy chỉnh trở lại mặc định?


14

Với ip netns exec, bạn có thể thực thi một lệnh trong một không gian tên mạng tùy chỉnh - nhưng đó cũng là một cách để thực thi một lệnh trong không gian tên mặc định?

Ví dụ, sau khi thực hiện hai lệnh này:

sudo ip netns add test_ns
sudo ip netns exec test_ns bash

Làm thế nào các bash mới được tạo thực thi các chương trình trong không gian tên mạng mặc định? Không có ip netns exec mặc định hoặc bất cứ điều gì tương tự như tôi đã tìm thấy.

Kịch bản của tôi là:

Tôi muốn chạy máy chủ SSH trong một không gian tên mạng riêng biệt (để giữ cho phần còn lại của hệ thống không biết về kết nối mạng, vì hệ thống được sử dụng để kiểm tra mạng), nhưng muốn có thể thực thi các chương trình trong không gian tên mạng mặc định thông qua kết nối SSH.

Những gì tôi đã tìm ra cho đến nay:

Câu trả lời:


13

Các distro / kernel mới hơn hỗ trợ nsenterlệnh, nên làm những gì bạn muốn, cung cấp cho bạn quyền root khi bạn thực hiện nó.

Đây là một ví dụ (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 ~]# 

Điều này phụ thuộc vào setnscuộc gọi hệ thống. Bạn cần ít nhất một hạt nhân 3.0 và glibc-2.14 để nó hoạt động.

RHEL 6.5 cung cấp hỗ trợ cho các không gian tên liên tục nhưng không hỗ trợ cho việc di chuyển các quy trình hiện có sang các không gian tên mới.


Điều này hoạt động tốt, thực tế là Ubuntu cung cấp gói linux-linux lỗi thời mà không cần nsenter. Tuy nhiên, tôi đã tìm thấy hướng dẫn xây dựng chi tiết tại đây: askubfox.com/questions/439056/ mẹo
Martin

Tôi đã thử nsenter -t 1 -nnhưng nó đã tạo ra một quy trình mới giống như ip netns execvà không thay đổi không gian tên của quy trình hiện tại.
Pavel imerda

15

Tôi thấy rằng bạn có thể trở về không gian tên mạng mặc định bằng hai lệnh đơn giản:

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

Phương pháp này rõ ràng giả định rằng bạn có thể thấy các quy trình bên ngoài không gian tên của riêng bạn thông qua prochệ thống tệp. Nếu bạn cũng ở trong một không gian tên riêng biệt, việc quay lại không gian tên mặc định không đơn giản.

Các lệnh trên đã được thử nghiệm trên Ubuntu 14.04. Tôi không biết nếu có bất cứ điều gì phân phối cụ thể về cách tiếp cận.


1
Đây là cuốn tiểu thuyết khá hay! Tôi khuyên bạn nên thực sự làm mount --bindthay vì ln -s, vì điều đó có nghĩa là iplệnh cũng có thể quản lý nó (ip về cơ bản không gắn kết - chống lại các tệp không gian tên này để thiết lập các không gian tên liên tục).
Matthew Ife

@kasperd bạn nói nó không đơn giản với một không gian tên riêng biệt. Là nó thực sự vẫn có thể, mặc dù? Bạn có thể đề cập đến như thế nào?
copumpkin

@copumpkin Tôi chưa kiểm tra điều đó.
kasperd

0

"ln -s / Proc / 1 / ns / net / var / run / netns / default" <----- Hoàn toàn không được khuyến nghị.

Bộ đếm cho mã xuất ra "ip netns show"

nếu bạn đã thực hiện một bash shell, đơn giản tồn tại trong bash, thoát.

Nếu bạn có ssh tới netns, thì ssh tới giao diện của ns mặc định và làm những gì bạn cần làm ở đó.

Như một phương sách cuối cùng vì vậy ln như trên, nhưng tôi sẽ đề nghị loại bỏ nó ngay khi nó được thực hiện, và trước khi có bất kỳ thay đổi nào xảy ra với bất kỳ ns nào. Nếu không bộ đếm sẽ bị hỏng và gây ra vấn đề.


2
Đó dường như là một nhận xét về một câu trả lời khác.
RalfFriedl

Thật không may, tôi vừa mới đăng ký và không thể bình luận. Hạnh phúc để di chuyển bây giờ tôi có thể gửi bình luận. @RalfFriedl
Luke A

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

Bạn có thể lấy mẫu pid làm 'ps aux' hoặc thậm chí là đỉnh nếu bạn muốn.

Cá nhân tôi luôn ssh vào không gian tên chính, sau đó tôi luôn có thể quay lại mặc định bằng cách nhập exit và sau đó nhập lại không gian tên nếu được yêu cầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.