Linux系统内置了完善的虚拟网络功能,通过内核提供的虚拟网络设备,我们可以灵活搭建各类虚拟网络拓扑,满足容器网络、隔离测试、多网络环境模拟等需求,不需要依赖额外的商业网络工具。

Linux虚拟网络核心组件
在开始配置前,需要先了解几个常用的虚拟网络组件:
- veth pair:一对虚拟网卡,一端发送的数据会直接到达另一端,常用于连接不同的网络命名空间。
- bridge(网桥):虚拟的二层交换机,可以把多个虚拟网卡或者物理网卡接入同一个二层网络,实现同网段通信。
- network namespace(网络命名空间):独立的网络栈隔离环境,每个命名空间有自己独立的网卡、路由表、防火墙规则。
- tap/tun设备:用户态和内核态的网络数据通道,常用于虚拟机网络、VPN等场景。
基础环境准备
首先确认系统已经安装了iproute2工具集,大部分主流Linux发行版默认已经安装,如果没有可以通过包管理器安装:
# Debian/Ubuntu系统安装命令 sudo apt update && sudo apt install -y iproute2 # CentOS/RHEL系统安装命令 sudo yum install -y iproute
同时需要开启内核的IP转发功能,方便后续跨网段通信配置:
# 临时开启IP转发 sudo sysctl -w net.ipv4.ip_forward=1 # 永久开启IP转发,编辑/etc/sysctl.conf文件,添加以下内容 net.ipv4.ip_forward=1 # 执行以下命令让配置生效 sudo sysctl -p
常见虚拟网络配置场景
场景一:搭建虚拟网桥实现多虚拟网卡互通
虚拟网桥可以模拟二层交换机的功能,把多个虚拟网卡接入同一个网段,实现同网段内的直接通信,适合容器集群的基础网络搭建。
具体配置步骤如下:
- 创建虚拟网桥
br0:
sudo ip link add br0 type bridge sudo ip link set br0 up
- 给网桥配置IP地址,作为网段的网关:
sudo ip addr add 192.168.10.1/24 dev br0
- 创建两个veth pair虚拟网卡,分别接入网桥:
# 创建第一对veth,命名为veth0和veth1 sudo ip link add veth0 type veth peer name veth1 # 将veth1接入网桥br0 sudo ip link set veth1 master br0 sudo ip link set veth1 up # 创建第二对veth,命名为veth2和veth3 sudo ip link add veth2 type veth peer name veth3 # 将veth3接入网桥br0 sudo ip link set veth3 master br0 sudo ip link set veth3 up
- 验证配置,查看网桥的端口信息:
sudo bridge link show br0
如果输出中包含veth1和veth3,说明两个虚拟网卡已经成功接入网桥。
场景二:使用网络命名空间实现网络隔离
网络命名空间可以实现完全独立的网络环境,不同命名空间内的网卡、路由、防火墙规则互不影响,适合多租户隔离、测试环境隔离等场景。
具体配置步骤如下:
- 创建两个网络命名空间
ns1和ns2:
sudo ip netns add ns1 sudo ip netns add ns2
- 创建veth pair,将一端分别放入两个命名空间,另一端接入之前创建的网桥
br0:
# 创建veth pair,命名为veth_ns1和br_veth1 sudo ip link add veth_ns1 type veth peer name br_veth1 # 将veth_ns1放入ns1命名空间 sudo ip link set veth_ns1 netns ns1 # 将br_veth1接入网桥br0 sudo ip link set br_veth1 master br0 sudo ip link set br_veth1 up # 创建另一对veth pair,命名为veth_ns2和br_veth2 sudo ip link add veth_ns2 type veth peer name br_veth2 # 将veth_ns2放入ns2命名空间 sudo ip link set veth_ns2 netns ns2 # 将br_veth2接入网桥br0 sudo ip link set br_veth2 master br0 sudo ip link set br_veth2 up
- 给命名空间内的虚拟网卡配置IP地址:
# 给ns1内的veth_ns1配置IP sudo ip netns exec ns1 ip addr add 192.168.10.10/24 dev veth_ns1 sudo ip netns exec ns1 ip link set veth_ns1 up # 配置ns1的默认路由指向网桥IP sudo ip netns exec ns1 ip route add default via 192.168.10.1 # 给ns2内的veth_ns2配置IP sudo ip netns exec ns2 ip addr add 192.168.10.11/24 dev veth_ns2 sudo ip netns exec ns2 ip link set veth_ns2 up # 配置ns2的默认路由指向网桥IP sudo ip netns exec ns2 ip route add default via 192.168.10.1
- 验证隔离效果,在
ns1中pingns2的IP:
sudo ip netns exec ns1 ping 192.168.10.11
如果可以正常ping通,说明两个隔离的网络命名空间通过网桥实现了互通。
场景三:配置NAT实现虚拟网络访问外网
如果希望虚拟网络内的设备可以访问外部网络,需要配置NAT转发规则,这里使用iptables工具实现。
具体配置步骤如下:
- 确认物理网卡的名称,假设物理网卡为
eth0,查看物理网卡信息:
ip addr show eth0
- 添加SNAT规则,将虚拟网段
192.168.10.0/24的流量转发到物理网卡:
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
- 在
ns1命名空间中测试访问外网:sudo ip netns exec ns1 ping 8.8.8.8如果可以正常ping通公网IP,说明NAT配置成功。
配置清理方法
测试完成后,可以按照以下步骤清理所有虚拟网络配置:
# 删除网络命名空间,会自动清理命名空间内的网卡 sudo ip netns del ns1 sudo ip netns del ns2 # 删除网桥,会自动解除网桥上的端口 sudo ip link set br0 down sudo ip link del br0 # 清理iptables规则(如果需要) sudo iptables -t nat -D POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE注意事项
- 所有配置默认是临时的,重启系统后会失效,如果需要永久保存配置,需要根据发行版的不同,把命令写入网络配置文件或者使用网络管理工具持久化。
- 配置防火墙时需要注意,部分系统的默认防火墙规则可能会阻止虚拟网络的流量,需要根据实际情况调整
filter表的规则。 - 如果使用的是云服务器,部分虚拟网络功能可能受到云平台的安全组或者网络策略限制,需要提前确认权限。
Linux虚拟网络配置bridge_模式network_namespaceveth_pair修改时间:2026-06-29 23:21:48