从用户的角度来看,我们只需使用工具ip(package is iproute2)来创建一个新的持久网络命名空间。
2.3.1 创建net命名空间
1 2
创建名称为msb的网络命名空间 # ip netns add msb
1 2 3
查看已创建的网络命名空间 # ip netns ls msb
2.3.2 删除net命名空间
1 2
删除已创建的网络命名空间 # ip netns delete msb
2.3.3 在net命名空间中执行命令
1 2
在网络命名空间中执行bash命令,如果想退出,需要使用exit # ip netns exec msb bash
2.3.4 在net命令空间中执行查看网络连接(网卡)命令
1 2 3 4
在网络命名空间中查看网络命名空间中的网卡信息 # ip link 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
1 2 3 4
在Linux主机系统中查看 # ip netns exec msb ip link list 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2.3.5 退出当前的net命名空间
1 2 3
退出已进入的网络命名空间 # exit exit
2.3.6 在net命名空间中执行多条命令
1 2 3 4
在网络命名空间中查看路由表 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface
创建虚拟网卡对 # ip link add veth0 type veth peer name veth1
1 2 3 4 5 6 7
在物理机上查看 # ip a s ...... 10: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:44:f8:b7:12:65 brd ff:ff:ff:ff:ff:ff 11: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 46:5e:89:8c:cb:b3 brd ff:ff:ff:ff:ff:ff
把创建的veth1网卡添加到msb网络命名空间中 # ip link set veth1 netns msb
1 2 3 4 5 6
在Linux系统命令行查看网络命名空间中的网络 # ip netns exec msb ip link 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 10: veth1@if11: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether de:44:f8:b7:12:65 brd ff:ff:ff:ff:ff:ff link-netnsid0
2.3.9 命名空间中迁出虚拟网卡
1 2
在Linux系统命令行把虚拟网卡veth1从网络命名空间删除 # ip netns exec msb ip link delete veth1
1 2 3 4
在Linux系统命令行查看结果 # ip netns exec msb ip link 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2.3.10 配置虚拟网卡IP地址
1 2 3 4
再次创建虚拟网卡,添加到msb网络命名空间,并设置IP地址 # ip link add veth0 type veth peer name veth1 # ip link set veth1 netns msb # ip netns exec msb ip addr add 192.168.50.2/24 dev veth1
1 2 3 4 5 6 7 8
在Linux系统命令行查看网络状态 # ip netns exec msb ip addr 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 12: veth1@if13: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether fe:20:ac:a8:13:4c brd ff:ff:ff:ff:ff:ff link-netnsid0 inet 192.168.50.2/24 scope global veth1 valid_lft forever preferred_lft forever
1 2 3 4
启动虚拟网卡,veth1与lo全部要启动 # ip netns exec msb ip link set veth1 up
# ip netns exec msb ip link set lo up
1 2 3 4 5 6 7
为物理机veth0添加IP地址
# ip a s ...... 15: veth0@if14: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group defau lt qlen 1000 link/ether 2e:b4:40:c8:73:dc brd ff:ff:ff:ff:ff:ff link-netnsid0
1 2 3 4 5 6 7
# ip addr add 192.168.50.3/24 dev veth0
# ip a s veth0 15: veth0@if14: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 2e:b4:40:c8:73:dc brd ff:ff:ff:ff:ff:ff link-netnsid0 inet 192.168.50.3/24 scope global veth0 valid_lft forever preferred_lft forever
1
# ip link set veth0 up
1 2 3 4 5 6
在宿主机上ping msb中的veth1 # ping 192.168.50.2 PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data. 64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=0.102 ms 64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=0.068 ms 64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=0.068 ms
1 2 3 4 5 6
在msb中的veth1 ping 宿主机上veth0 # ip netns exec msb ping 192.168.50.3 PING 192.168.50.3 (192.168.50.3) 56(84) bytes of data. 64 bytes from 192.168.50.3: icmp_seq=1 ttl=64 time=0.053 ms 64 bytes from 192.168.50.3: icmp_seq=2 ttl=64 time=0.031 ms 64 bytes from 192.168.50.3: icmp_seq=3 ttl=64 time=0.029 ms
1 2
如果需要访问本机的其它网段,可手动添加如下默认路由条目。 # ip netns exec msb ip route add default via 192.168.50.3