Dengan ip netns exec Anda dapat menjalankan perintah di namespace jaringan khusus - tetapi apakah ada juga cara untuk mengeksekusi perintah di namespace default?
Misalnya, setelah menjalankan dua perintah ini:
sudo ip netns add test_ns
sudo ip netns exec test_ns bash
Bagaimana bash yang baru dibuat dapat menjalankan program di namespace jaringan default? Tidak ada ip netns exec default atau yang serupa sejauh yang saya temukan.
Skenario saya adalah:
Saya ingin menjalankan server SSH di namespace jaringan yang terpisah (untuk menjaga agar sistem tidak mengetahui koneksi jaringan, karena sistem ini digunakan untuk pengujian jaringan), tetapi ingin dapat menjalankan program di namespace jaringan default melalui koneksi SSH.
Apa yang saya temukan sejauh ini:
Ruang nama jaringan yang dibuat terdaftar sebagai file di bawah / var / run / netns (tetapi tidak ada file untuk namespace default)
Kode ip netns exec dapat ditemukan di sini: http://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/ip/ipnetns.c#n132 - Saya belum memahami semuanya itu masih dilakukan, tetapi itu tidak terlihat sangat menjanjikan.
ip netns mengidentifikasi $$ seperti yang disarankan oleh Howto query dan mengubah namespace jaringan di linux? mengembalikan apa-apa ketika di namespace jaringan default
nsenter -t 1 -n
tetapi ia menciptakan proses baru sama sepertiip netns exec
dan tidak mengubah namespace dari proses saat ini.Saya menemukan bahwa Anda dapat kembali ke namespace jaringan default dengan dua perintah sederhana:
Metode ini jelas mengasumsikan bahwa Anda dapat melihat proses di luar namespace Anda sendiri melalui
proc
sistem file. Jika Anda berada di namespace PID yang terpisah juga, kembali ke namespace default tidak sesederhana itu.Perintah di atas diuji pada Ubuntu 14.04. Saya tidak tahu apakah ada distribusi khusus tentang pendekatan ini.
sumber
mount --bind
bukanln -s
, karena itu berartiip
perintah dapat mengelolanya juga (ip pada dasarnya melakukan mount --bind terhadap file namespace ini untuk mensetup ruang nama yang persisten)."ln -s / proc / 1 / ns / net / var / run / netns / default" <----- Tidak direkomendasikan sama sekali.
Penghitung untuk kode yang menampilkan "ip netns show"
Jika Anda memiliki exec bash shell, ada yang sederhana dari bash, keluar.
Jika Anda memiliki ssh ke jaringan, kemudian ssh ke antarmuka default ns dan lakukan apa yang perlu Anda lakukan di sana.
Sebagai upaya terakhir, jadi seperti di atas, tapi saya sarankan menghapusnya segera setelah selesai, dan sebelum perubahan terjadi pada ns. Kalau tidak konter akan rusak dan menyebabkan masalah.
sumber
Anda bisa mendapatkan bentuk pid melakukan 'ps aux' atau bahkan gasing jika Anda mau.
Secara pribadi saya selalu ssh ke namespace utama, maka saya selalu bisa kembali ke default dengan mengetikkan exit dan kemudian memasukkan kembali namespace jika diperlukan.
sumber