Network namespace (Ağ isim alanı) ve cgroups, yazılım kapsayıcılığı (Docker) konusundaki yeni trendin çoğunun temel çekirdek teknolojilerinden ikisidir. Basitçe ifade etmek gerekirse, cgroups bir ölçüm ve sınırlama mekanizmasıdır, bir sistem kaynağının (CPU, bellek) ne kadarını kullanabileceğinizi kontrol ederler. Öte yandan, network namespace görebileceğiniz şeyleri sınırlar.
Network namespace ler fiziksel ağ altyapısından bağımsız olarak kendi ağ yapılarına sahipmiş gibi çalışırlar.
Bir örnekle açıklamaya çalışalım;
sudo ip netns add elvan
Yukarıdaki komut ile elvan isminde network namespace oluşturdum.
Oluşturduğumuz namespace si kontrol ediyoruz.
Daha önce de belirtildiği gibi, bir namespace kendi ağ kaynaklarını içerir: arayüzler, yönlendirme tabloları, vb.
Şimdi oluşturduğumuz bu elvan isimli namespace in içinde ağ arayüzlerini listelemek için ip a komutunu çalıştıralım. Bunun için exec parametresini kullanacağız.
sudo ip netns exec elvan ip a
lo arayüzümüz down gözükmekte gözükmekte . Lo arayüzümüzü aşağıdaki komut yardımıyla açalım.
sudo ip netns exec elvan ip link set lo up
Artık ağ arayüzümüz aktif ve ip adresi 127.0.0.1
Şimdi sanal bir ağ arayüz çifti oluşturularak bu oluşturduğumuz bu kartlar üzerinden internete çıkacağız.
sudo ip link add deneme-in type veth peer name deneme-out
Resimde görüldüğü gibi ağ arayüz çifti oluştu.
Şimdi daha önceden oluşturduğumuz elvan arayüzüne deneme-in arayüzünü bağlayacağız.
Artık ip a komutunun çıktında deneme-in ağ arayüzünü göremediğinizi fark edeceksinizdir. Çünkü deneme-in arayüzü namespace de tanımlanmış oldu.
Şimdi bu oluşturulan arayüzlere ip ataması gerçekleştirerek konuşmalarını sağlayalım.
İlk başta ana sistemde router görevi gören ağ arayüzüne ip ataması gerçekleştiriyoruz.
sudo ip link add deneme-in type veth peer name deneme-out
Şimdi bağladığımız ağ arayüzüne ip ataması gerçekleştireceğiz.
sudo ip link add deneme-in type veth peer name deneme-out
Ağ arayüzlerimiz fark ettiğiniz üzere DOWN olarak gözüküyor. Ağ arayüzlerimizin durumunu UP olarak değiştirelim.
sudo ip netns exec elvan ip link set deneme-in up
sudo ip link set deneme-out up
Şimdi bu iki arayüz aralarında konuşabiliyor mu test edelim.
sudo ip netns exec elvan ping 192.168.1.1 -c 5
Şimdi aklınıza şu gelebilir senin modemin router’ı192.168.1.1 değil mi? Hayır değil! Çünkü bu yazı telefon internetinden yazılmıştır. Telefonun dnsmasq üzerinden bana vermiş gateway 192.168.43.1 dir.
Zaten istesekte atamazdık. Çünkü bu ağ arayüzleri sadece kendi aralarında konuşabilir. İnternete çıkamazlar . Şimdi deneme-out ağ kartını wlp2s0 üzerinden köprüleyerek dışarıya çıkmasını sağlayacağız.
Şimdi deneme-out arayüzündeki ip adresini silelim ve köprü arayüzü oluşturalım.
sudo ip addr delete 192.168.1.1/24 dev deneme-out
Köprü arayüzünü oluşturalım.
sudo ip link add kopru type bridge
Şimdi deneme-out arayüzünü kopru arayüzüne bağlayalım.
sudo ip link set deneme-out master kopru
Şimdi kopru arayüzüne deneme-out taki ip adresini verelim.
sudo ip addr add 192.168.1.1/24 dev kopru
deneme-out ve kopru kartını tekrar UP yapalım
sudo ip link set kopru up
sudo ip link set deneme-out up
sanal oluşturduğumuz elvan arayüzünü bağlı olduğu köprü arayüzünü namespace alanına ekleyelim
sudo ip netns exec elvan ip route add default via 192.168.1.1
Linux çekirdeğindeki ip yönlendirmeyi aktif hale getirelim.
echo ‘1’ | sudo tee /proc/sys/net/ipv4/ip_forward
Son olarak iptables üzerinden arayüzlerimizin yönlerdirmesini yapıyoruz. Ben wlp2s0 kartının üzerinden çıktığım için komutu aşağıdaki gibi belirttim.
sudo iptables -t nat -A POSTROUTING -o kopru -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE
Ve artık elvan arayüzü üzerinden internete çıkabiliyoruz.
Comments