netns (Network Namespace)¶
netns (network namespace), ağ kaynaklarını izole etmek için kullanılan bir mekanizmadır. Birden fazla ağ yığınını tek bir Linux çekirdek üzerinde çalıştırarak, her bir yığın için ayrı ağ ayarları, araçları ve protokolleri oluşturma imkanı sunar.
netns oluşturma ve kaldırma¶
Bir netns oluşturmak için aşağıdaki komut kullanılır:
$ ip netns add deneme
Silmek için ise şu komut kullanılır:
$ ip nets del deneme
Var olanları listelemek için:
$ ip nets list
netns içerisinde komut çalıştırma¶
Bir netns içerisinde komut çalıştırarak o komutun izole bir ağ ortamında çalışması sağlanabilir. Bunun için şu komuttan yararlanılabilir.
$ ip nets exec deneme /bin/bash
Bu komut hiçbir ağ arayüzü eklemediğimiz için ağ bağlantısı bulunmayan deneme ağında çalıştırılır.
netns içine ağ arayüzü eklenmesi¶
Bir ağ arayüzünü netns içine ekleyebilirsiniz. birden çok ethernet ile çalışmanız gerektiğinde kullanışlı olabilmektedir.
# eth1 arayüzünü eklemek için (2. ethernet arayüzü)
$ ip link set eth1 netns deneme
# loop arayüzünü açalım (127.0.0.1 için)
$ ip netns exec deneme ip link set up lo
# dhcp ile ip almak için
$ busybox udhcpc -i eth1
# netns içinde firefox başlatmak için (pingu kullanıcısı ile)
$ ip netns exec deneme su pingu -c "firefox"
netns arası iletişim sağlanması¶
Öncelikle veth arayüzü eklememiz gerekmektedir.
$ ip link add veth0 type veth peer name veth1
Burada veth0 ve veth1 adında 2 adet veth arayüzümüz oluşmaktadır. Arayüzlernden birini netns içine alalım.
$ ip link set veth1 netns deneme
Ardından arayüzlere birer ip adresi atayalım.
# açık hale getirelim
$ ip link set up veth0
$ ip netns exec deneme ip link set up veth1
# loop arayüzünü açalım (127.0.0.1 için)
$ ip netns exec deneme ip link set up lo
# ip atayalım
$ ip addr add 10.0.3.1 dev veth0
$ ip netns exec deneme ip addr add 10.0.3.2 dev veth1
Artık deneme adındaki netns içerisinden ana makinamıza 10.0.3.1 adresi ile ulaşabilirsiniz. Ana makinanızdan ise 10.0.3.2 adresi ile netns içerisine ulaşabilirsiniz.
# netns içinde 8000 portunda tcp dinlemek için
$ ip netns exec deneme netcat -l -p 8000
# netns içindeki 8000 portuna bağlanmak için
$ netcat 10.0.3.2 8000