1. 网络架构图
2. 环境准备
两台CentOS7的机器。
网关为192.168.154.1。
2.1 特别注意
如果是虚拟机,那么虚拟机的网卡(我们架构图中的enp0s8对应的网络设备)需要设置为允许混杂模式
,后续配置的两个机器桥接的网络才能通。如果之前禁用了混杂模式,设置为全部允许混杂模式后需要重启虚拟机才能生效。否则不能生效。
比如virtual box的配置如下:
-
直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。
-
混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧。
3. A主机执行
# 创建 namespace
ip netns add ns1
ip netns add ns2
# 创建 veth pair
ip link add tap1 type veth peer name eth0 netns ns1
ip link add tap2 type veth peer name eth0 netns ns2
# 配置 tap IP 地址
ip netns exec ns1 ip addr add local 192.168.154.111/24 dev eth0
ip netns exec ns2 ip addr add local 192.168.154.112/24 dev eth0
# 将 tap、lo设备设置为 up
ip link set tap1 up
ip link set tap2 up
ip netns exec ns1 ip link set eth0 up
ip netns exec ns2 ip link set eth0 up
ip netns exec ns1 ip link set lo up
ip netns exec ns2 ip link set lo up
ip link add name mybr0 type bridge
ip link set dev mybr0 up
# 将tap1、tap2设备接入到mybr0网桥
ip link set dev tap1 master mybr0
ip link set dev tap2 master mybr0
ip link set dev enp0s8 master mybr0
ip address flush enp0s8
# 安装bridge-utils
# yum install -y bridge-utils
# 查看网桥信息
# brctl show
bridge name bridge id STP enabled interfaces
mybr0 8000.080027017fb9 no enp0s8
tap1
tap2
4. B主机执行
# 创建 namespace
ip netns add ns1
ip netns add ns2
# 创建 veth pair
ip link add tap1 type veth peer name eth0 netns ns1
ip link add tap2 type veth peer name eth0 netns ns2
# 配置 tap IP 地址
ip netns exec ns1 ip addr add local 192.168.154.121/24 dev eth0
ip netns exec ns2 ip addr add local 192.168.154.122/24 dev eth0
# 将 tap、lo设备设置为 up
ip link set tap1 up
ip link set tap2 up
ip netns exec ns1 ip link set eth0 up
ip netns exec ns2 ip link set eth0 up
ip netns exec ns1 ip link set lo up
ip netns exec ns2 ip link set lo up
ip link add name mybr0 type bridge
ip link set dev mybr0 up
# 将tap1、tap2设备接入到mybr0网桥
ip link set dev tap1 master mybr0
ip link set dev tap2 master mybr0
ip link set dev enp0s8 master mybr0
ip address flush enp0s8
# 安装bridge-utils
# yum install -y bridge-utils
# 查看网桥信息
# brctl show
bridge name bridge id STP enabled interfaces
mybr0 8000.080027e49796 no enp0s8
tap1
tap2
5. 测试主机执行
在A主机的ns1中测试连接B主机的ns1:
# 以下命令在A主机执行
ip netns exec ns1 ping 192.168.154.121
在B主机的ns1中测试连接A主机的ns1:
# 以下命令在B主机执行
ip netns exec ns1 ping 192.168.154.111