Linux下的虚拟网络设备 netns brctl
原文链接: Linux下的虚拟网络设备 netns brctl
Linux-虚拟网络设备-veth pair - CSDN博客
虚拟网络设备
Linux提供了许多虚拟设备,这些虚拟设备有助于构建复杂的网络拓扑,满足各种网络需求。
网桥(bridge)
网桥是一个二层设备,工作在链路层,主要是根据MAC学习来转发数据到不同的port。
# 创建网桥
brctl addbr br0
# 添加设备到网桥
brctl addif br0 eth1
# 查询网桥mac表
brctl showmacs br0
veth
veth pair是一对虚拟网络设备,一端发送的数据会由另外一端接受,常用于不同的网络命名空间。
# 创建veth pair
ip link add veth0 type veth peer name veth1
# 将veth1放入另一个netns
ip link set veth1 netns newns
TAP/TUN
TAP/TUN设备是一种让用户态程序向内核协议栈注入数据的设备,TAP等同于一个以太网设备,工作在二层;而TUN则是一个虚拟点对点设备,工作在三层。
ip tuntap add tap0 mode tap
ip tuntap add tun0 mode tun
Topology
ns2 tap2 ----------br-tap2 br88 br-tap3-------------tap3 ns3
Prerequisite
- VirtualBox Network on
Internal
mode
Manipulation
create 2 network namespaces:
ip netns add ns2 ip netns add ns3 ip netns list
- create 2 veth pairs:
bash ip link add dev tap2 type veth peer name br-tap2 ip link add dev tap3 type veth peer name br-tap3
- create 2 veth pairs:
set veth to the namespaces:
ip link set tap2 netns ns2 ip link set tap3 netns ns3
- create and setup a Linux bridge
br88
:bash brctl addbr br88 brctl showmacs br88 brctl addif br88 br-tap2 brctl addif br88 br-tap3 brctl showmacs br88
- create and setup a Linux bridge
activate all the devices:
ip link set dev br-tap2 up ip link set dev br-tap3 up ip link set dev br88 up ip netns exec ns2 ip link set dev lo up ip netns exec ns2 ip link set dev tap2 up ip netns exec ns3 ip link set dev lo up ip netns exec ns3 ip link set dev tap3 up brctl showmacs br88
- associate IP addresses to the devices:
bash ip netns exec ns2 ip addr add 192.168.88.2/24 dev tap2 ip netns exec ns3 ip addr add 192.168.88.3/24 dev tap3
- associate IP addresses to the devices:
The script can be found here and the cleanup script is here
Test
ip netns exec ns2 ping 192.168.88.3
Bug
In VirtualBox with NAT
or Bridge
network mode, maybe the ping doesn't work
- solution: activate forwarding in the VM:
iptables -P FORWARD ACCEPT