لینوکس ۳۰۵؛ شب ۳۲: network namespace و veth دوطرفه
فهرست نوشته
NIC، route و socket میتوانند در network namespace جدا باشند. امشب دو namespace را با یک veth pair وصل میکنیم، بدون NIC فیزیکی یا NAT اینترنت.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 352.1 آزمون 305-300.
محیط: containers، نامهای ns305a/ns305b و v305a/v305b آزاد؛ subnet 172.30.5.0/24 با هیچ شبکهٔ واقعی تداخل ندارد.
sudo ip netns add ns305a
sudo ip netns add ns305b
sudo ip link add v305a type veth peer name v305b
sudo ip link set v305a netns ns305a
sudo ip link set v305b netns ns305b
sudo ip -n ns305a address add 172.30.5.1/24 dev v305a
sudo ip -n ns305b address add 172.30.5.2/24 dev v305b
sudo ip -n ns305a link set lo up
sudo ip -n ns305b link set lo up
sudo ip -n ns305a link set v305a up
sudo ip -n ns305b link set v305b up
veth دو endpoint متصل دارد؛ جابهجایی آنها به namespace، interfaceهای host را تغییر نمیدهد. loopback هر namespace مستقل است.
sudo ip netns exec ns305a ping -c 3 172.30.5.2
sudo ip -n ns305a route
sudo ip -n ns305b neigh
sudo ip netns exec ns305a ss -lntup
ping باید بین دو endpoint کار کند؛ route default اینترنتی نداریم. نبود DNS را با نبود IP connectivity یکی ندان. ip netns exec محیط فایل کامل کانتینر نمیسازد؛ برای /etc/resolv.conf و mountها طراحی جدا لازم است.
تمرین: endpoint b را down کن، شکست را ثبت و up برگردان. اگر بخواهی چند namespace به bridge وصل شوند، هرکدام veth pair و MAC خودشان را میخواهند؛ یک endpoint نمیتواند همزمان در دو namespace باشد.
بازگشت: همهٔ processهای آزمایش را پایان بده؛ سپس sudo ip netns delete ns305a و counterpart b. از wildcard برای حذف همهٔ namespaceهای host استفاده نکن. handle باز process میتواند namespace را بعد از حذف نام زنده نگه دارد.