Özel bir linux ağ ad alanından varsayılan alana nasıl geçiş yapabilirim?


14

İp netns exec ile özel ağ ad alanında bir komut yürütebilirsiniz - ancak varsayılan ad alanında bir komut yürütmenin de bir yolu var mı?

Örneğin, bu iki komutu yürüttükten sonra:

sudo ip netns add test_ns
sudo ip netns exec test_ns bash

Yeni oluşturulan bash, varsayılan ağ ad alanındaki programları nasıl yürütebilir? Hiçbir ip netns exec varsayılan veya bulduğum kadarıyla benzer bir şey yoktur .

Benim senaryom:

SSH sunucusunu ayrı bir ağ ad alanında çalıştırmak istiyorum (sistemin ağ testi için kullanıldığı için sistemin geri kalanını ağ bağlantısından habersiz tutmak için), ancak varsayılan ağ ad alanındaki programları yürütebilmek istiyorum SSH bağlantısı.

Şimdiye kadar ne buldum:

Yanıtlar:


13

Daha yeni dağıtımlar / çekirdekler nsenter, istediğinizi yapmanız gereken, bunu yaparken kök olmanızı sağlayan komutu destekler .

İşte bir örnek (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 ~]# 

Bu setnssistem çağrısına dayanır . Bunun çalışması için en az 3.0 çekirdeğe ve glibc-2.14'e ihtiyacınız var.

RHEL 6.5 kalıcı ad alanları için destek sağlar, ancak mevcut işlemleri yeni ad alanlarına taşıma için destek sağlamaz .


Bu iyi çalışır, Ubuntu'nun nsenter olmadan eski bir util-linux paketi sağladığı gerçeğini yerine getirir. Bununla birlikte, ayrıntılı oluşturma talimatlarını burada buldum: askubuntu.com/questions/439056/…
Martin

Denedim nsenter -t 1 -nama yeni bir süreç yarattı ip netns execve mevcut sürecin ad alanını değiştirmedi.
Pavel Šimerda

15

İki basit komutla varsayılan ağ ad alanına dönebileceğinizi buldum:

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

Bu yöntem, açıkça procdosya sistemi aracılığıyla kendi ad alanınızın dışındaki işlemleri görebileceğinizi varsayar . Ayrı bir PID ad alanındaysanız, varsayılan ad alanına dönmek o kadar kolay değildir.

Yukarıdaki komutlar Ubuntu 14.04 üzerinde test edildi. Yaklaşımla ilgili özel bir dağıtım olup olmadığını bilmiyorum.


1
Bu oldukça yeni! Bu komut çok da yönetebilir anlamına gelir mount --bindyerine aslında yerine öneriyoruz (ip temelde kalıcı ad alanlarını ayarlamak için bu ad alanı dosyalarına karşı mount - bağlama yapar). ln -sip
Matthew Ife

@kasperd, ayrı bir PID ad alanı ile o kadar basit olmadığını söylüyorsunuz. Yine de gerçekten mümkün mü? Nasıl olduğunu söyleyebilir misin?
copumpkin

@copumpkin Bunu test etmedim.
kasperd

0

"ln -s / proc / 1 / ns / net / var / run / netns / default" <----- Hiç önerilmez.

"İp netns show" u veren kodun sayacı

Eğer bir bash kabuğunuz varsa, bash dışında basit var, çıkın.

Bir ağa ssh varsa, varsayılan ns arabirimine ssh ve orada yapmanız gerekenleri yapın.

Son çare olarak bu yüzden ln yukarıdaki gibi, ama yapılır yapılır yapılmaz kaldırılmasını ve herhangi bir değişiklik meydana gelmeden önce ns. Aksi takdirde sayaç bozulur ve sorunlara neden olur.


2
Bu başka bir cevap üzerine yorum gibi görünüyor.
RalfFriedl

Maalesef yeni kaydoldum ve yorum yapamadım. Artık taşınmaktan mutluluk duyuyorum yorum gönderebilirim. @RalfFriedl
Luke A

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

Pid formunu 'ps aux' yapıyor, hatta isterseniz bir üst alabilirsiniz.

Şahsen her zaman ana ad alanına ssh, sonra her zaman çıkış yazıp sonra gerekirse ad alanını yeniden girerek varsayılana geri dönebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.