veth连接network namespace

简介

网络命令空间可以给进程提供一个隔离的网络栈(网络设备,路由表,防火墙,/proc/net等)。
进程默认继承父进程的network namespace,也就是一般进程都是继承了系统初始进程(pid=1)的network namespace。
虚拟设备veth用来连接不同network namespace,功能有点像网线连接不同的设备。

连通network namespace

用veth虚拟设备连接两个network namespace

ip netns help

#创建两个network namespace
ip netns add test0
ip netns add test1
ls -l /var/run/netns/

#查看命令空间test1的网络地址
[root@k8snode1 netns]# ip netns exec test0  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

#添加虚拟设备对veth
ip link add type veth

[root@k8snode1 scripts]# ip link
1:...
2:...
3: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 7e:85:4b:5a:af:b1 brd ff:ff:ff:ff:ff:ff
4: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 8e:d3:af:21:4b:d0 brd ff:ff:ff:ff:ff:ff

#将veth设备放入网络命令空间
ip link set veth0 netns test0
ip link set veth1 netns test1

#配置veth设备ip地址
ip netns exec test0 ip link set veth0 up
ip netns exec test0 ip addr add 10.0.1.10/24 dev veth0
ip netns exec test0 ip addr

ip netns exec test1 ip link set veth1 up
ip netns exec test1 ip addr add 10.0.1.11/24 dev veth1
ip netns exec test1 ip addr

#测试连通性
[root@k8snode1 scripts]# ip netns exec test0 ping -c 3 10.0.1.11
PING 10.0.1.11 (10.0.1.11) 56(84) bytes of data.
64 bytes from 10.0.1.11: icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from 10.0.1.11: icmp_seq=2 ttl=64 time=0.015 ms
64 bytes from 10.0.1.11: icmp_seq=3 ttl=64 time=0.010 ms

#删除test0会导致veth0被删除,veth1也会跟着被删除

用bridge连接不同的namespace

实际应用中,将veth一端连接network namespace,另一端连接bridge,bridge的作用类似物理设备交换机。

#创建bridge
ip link add brtest type bridge
ip link set dev brtest up

ip netns add test0
ip netns add test1

#t0用于连接test0和brtest,t1用于连接test1和brtest
ip link add t0 type veth
ip link add t1 type veth

#连接veth设备的一端到network namespace
ip link set dev veth0 netns test0
ip link set dev veth1 netns test1

#连接veth设备的另一端到brtest
ip link set dev t0 master brtest
ip link set dev t0 up
ip link set dev t1 master brtest
ip link set dev t1 up

#配置network namespace内的veth设备的ip地址
ip netns exec test0 ip link set veth0 up
ip netns exec test0 ip addr add 10.0.1.10/24 dev veth0
ip netns exec test0 ip addr

ip netns exec test1 ip link set veth1 up
ip netns exec test1 ip addr add 10.0.1.11/24 dev veth1
ip netns exec test1 ip addr

#测试连通性
[root@k8snode1 scripts]# ip netns exec test0 ping -c 3 10.0.1.11
PING 10.0.1.11 (10.0.1.11) 56(84) bytes of data.
64 bytes from 10.0.1.11: icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from 10.0.1.11: icmp_seq=2 ttl=64 time=0.024 ms
64 bytes from 10.0.1.11: icmp_seq=3 ttl=64 time=0.021 ms

总结

ip netns ls
ip netns add  netnsname
ip netns exec netnsname command
ip addr help
ip link help

ip link add brname type bridge
#连接devname到bridge设备
ip link set dev devname master bridgename

参考

  • man ip-netns
posted @ 2024-04-19 16:35  董少奇  阅读(32)  评论(0)    收藏  举报