案例目標
隔離性 :在同一臺物理機上創建兩個獨立的網絡命名空間(模擬兩臺主機),確保其網絡配置完全隔離。內部通信 :允許兩個命名空間通過虛擬設備直接通信。外部訪問 :通過宿主機的網橋和 NAT 規則,使兩個命名空間能夠訪問外部互聯網。
核心要求
使用 ip netns
和 veth pair
實現網絡隔離。 通過網橋(Bridge)連接命名空間與宿主機物理網絡。 配置 NAT 實現外網訪問。 驗證隔離性、內部通信及外部連通性。
實現步驟
步驟 1:清理舊配置(如有)
sudo ip netns delete ns1 2 > /dev/null
sudo ip netns delete ns2 2 > /dev/null
sudo ip link delete br0 2 > /dev/null
sudo ip link delete veth1-host 2 > /dev/null
sudo ip link delete veth2-host 2 > /dev/null
步驟 2:創建網絡命名空間
sudo ip netns add ns1
sudo ip netns add ns2
步驟 3:創建網橋并連接物理網絡
sudo ip link add br0 type bridge
sudo ip link set br0 up
sudo ip link set eth0 master br0
sudo dhclient br0
步驟 4:為每個命名空間創建 veth pair 并連接網橋
sudo ip link add veth1-host type veth peer name veth1-ns
sudo ip link set veth1-host master br0
sudo ip link set veth1-host up
sudo ip link add veth2-host type veth peer name veth2-ns
sudo ip link set veth2-host master br0
sudo ip link set veth2-host up
sudo ip link set veth1-ns netns ns1
sudo ip link set veth2-ns netns ns2
步驟 5:配置命名空間的網絡
sudo ip netns exec ns1 ip addr add 192.168 .1.101/24 dev veth1-ns
sudo ip netns exec ns1 ip link set veth1-ns up
sudo ip netns exec ns1 ip route add default via 192.168 .1.1
sudo ip netns exec ns2 ip addr add 192.168 .1.102/24 dev veth2-ns
sudo ip netns exec ns2 ip link set veth2-ns up
sudo ip netns exec ns2 ip route add default via 192.168 .1.1
步驟 6:配置 NAT 允許外網訪問
sudo sysctl -w net.ipv4.ip_forward= 1
sudo iptables -t nat -A POSTROUTING -s 192.168 .1.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
步驟 7:驗證網絡功能
sudo ip netns exec ns1 ping -c 3 192.168 .1.102
sudo ip netns exec ns2 ping -c 3 192.168 .1.101
sudo ip netns exec ns1 ping -c 3 8.8 .8.8
sudo ip netns exec ns2 ping -c 3 8.8 .8.8
ping -c 3 192.168 .1.101
最終網絡拓撲
宿主機網橋 br0 (IP: 自動獲取或手動配置)
│
├─ eth0 (物理網卡,通過 DHCP/NAT 訪問外網)
├─ veth1-host (連接到 ns1 的 veth1-ns, IP: 192.168.1.101)
└─ veth2-host (連接到 ns2 的 veth2-ns, IP: 192.168.1.102)
總結
實現目標回顧
隔離性 :通過 ip netns
創建獨立命名空間,確保 ns1 和 ns2 的網絡配置互不影響。內部通信 :通過 veth pair 和網橋,兩個命名空間可直接通信(同一子網)。外部訪問 :通過網橋綁定物理網卡并配置 NAT,命名空間可訪問外網。
關鍵技術點
網絡命名空間 :隔離網絡協議棧(IP、路由表、設備)。veth pair :跨命名空間通信的虛擬“網線”。網橋 :連接多個網絡接口,模擬物理交換機。NAT :通過 iptables 實現地址轉換,允許內網訪問外網。
應用場景
容器網絡 :Docker/Kubernetes 使用類似機制為容器提供網絡。多租戶測試 :為不同租戶分配獨立網絡環境。安全實驗 :隔離測試環境,防止實驗影響宿主機網絡。