Linux 的网络命名空间(Network Namespace)是 Linux 内核的一种特性,用于实现网络资源的隔离和独立。每个网络命名空间都拥有自己的网络接口、IP 地址、路由表和网络配置,从而实现不同网络命名空间之间的网络隔离。
在 Linux 中,可以使用 ip netns 命令来创建和管理网络命名空间。下面是创建网络命名空间的简单示例:
创建网络命名空间:
sudo ip netns add ns1
在网络命名空间中配置网络接口:
sudo ip netns exec ns1 ip link set lo up
sudo ip netns exec ns1 ip link add veth0 type veth peer name veth1
sudo ip netns exec ns1 ip link set veth1 netns <其他网络命名空间的名称>
这将在 "ns1" 中设置回环接口,并创建一对虚拟网络接口 veth0 和 veth1,其中 veth0 属于 "ns1",而 veth1 则连接到另一个网络命名空间。
配置网络接口的 IP 地址和路由:
sudo ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth0
sudo ip netns exec ns1 ip link set veth0 up
sudo ip netns exec ns1 ip route add default via 10.0.0.1
这将为 veth0 设置 IP 地址和路由,使得 "ns1" 中的网络接口可以与其他网络命名空间或宿主主机的网络接口通信
启用网络命名空间中的网络:
sudo ip netns exec ns1 iptables -P FORWARD ACCEPT
sudo ip netns exec ns1 iptables -t nat -A POSTROUTING -o <宿主主机网络接口> -j MASQUERADE
这将允许 "ns1" 中的网络接口进行网络转发,并设置 NAT 规则以实现与宿主主机之间的网络连接。
通过这种方式,可以创建多个网络命名空间,并在其中配置不同的网络接口、IP 地址和路由,从而实现网络资源的隔离和独立。网络命名空间为实现容器化、虚拟化等场景中的网络隔离提供了强大的功能支持,使得不同网络命名空间中的应用程序可以独立运行,并通过网络接口进行通信。