使用ip netns可创建隔离网络环境,如ip netns add ns1创建命名空间,通过veth pair连接主机与命名空间并配置IP和路由,实现通信。

创建和管理网络命名空间
使用 ip netns 命令可以轻松创建和管理命名空间。
创建一个名为 ns1 的网络命名空间:
ip netns add ns1查看当前系统中所有网络命名空间:
ip netns list删除命名空间:
ip netns del ns1注意:删除命名空间会自动清理其中的网络资源(如果已挂载)。
在命名空间中执行命令
使用 ip netns exec 可以在指定命名空间中运行命令。
ip netns exec ns1 ip link这会显示 ns1 中的网络接口列表。你也可以执行其他网络命令,如:
ip netns exec ns1 ip addrip netns exec ns1 route
每个命名空间拥有独立的回环接口,但默认未启用。需手动开启:
ip netns exec ns1 ip link set lo up连接命名空间与主机网络(veth pair)
单独的命名空间无法与外部通信。通常使用虚拟以太网对(veth pair)将其连接到主机或其他命名空间。
创建一对虚拟网卡:
ip link add veth0 type veth peer name veth1将 veth1 分配给命名空间 ns1:
ip link set veth1 netns ns1为主机端的 veth0 配置 IP 并启用:
ip addr add 192.168.100.1/24 dev veth0ip link set veth0 up
在命名空间内配置 veth1:
ip netns exec ns1 ip addr add 192.168.100.2/24 dev veth1ip netns exec ns1 ip link set veth1 up
ip netns exec ns1 ip route add default via 192.168.100.1
此时,ns1 可通过 veth0 与主机通信。若主机开启 IP 转发,还可访问外部网络。
持久化与挂载(可选)
ip netns 会将命名空间挂载到 /var/run/netns/ 目录下,即使没有运行中的进程,命名空间仍可保留。
例如,手动挂载一个未持久化的命名空间(通过 unshare 创建):
unshare --net=/var/run/netns/ns2 baship netns add ns2
这样命名空间可被 ip netns 管理。
基本上就这些。通过命名空间 + veth + 路由,就能构建出完全隔离的网络环境,是实现容器网络的基础。不复杂但容易忽略细节,比如回环接口开启和子网规划。










