openwrt中添加虚拟网卡veth用于扩展网络能力,需先安装kmod-veth模块,再通过luci创建veth0/veth1对,将veth1桥接到br-lan,veth0配置为独立静态接口(如172.30.0.1/24),严禁同时桥接两端以防环路。

在OpenWrt虚拟机中添加虚拟网卡,是为了扩展网络接口能力,比如实现LAN/WAN分离、多WAN负载、容器桥接或与宿主机安全通信。不配置虚拟网卡,仅靠物理网卡直通,会限制网络拓扑灵活性,甚至导致br-lan桥接失效或IP冲突。
确认系统已加载veth内核模块
登录OpenWrt终端(SSH或TTYD),执行:
opkg update && opkg install kmod-veth
这一步必须完成,否则后续LuCI界面不会出现“虚拟以太网”设备类型选项。若提示“Unknown package”,说明当前固件未启用该模块仓库,需先检查/etc/opkg/distfeeds.conf中是否启用了base和kernel源。
安装完成后运行:lsmod | grep veth
看到veth字样即表示模块已加载成功。
通过LuCI创建持久化veth设备对
打开浏览器访问OpenWrt管理界面(如http://192.168.1.2),依次点击:网络 → 接口 → 设备 → 添加设备
方法一:图形化创建
① 设备类型选择【虚拟以太网】
② 设备名填入veth1(可自定义,但建议保持语义清晰)
③ 对端设备名留空→系统自动填为veth0
④ 其余字段(MAC地址、MTU等)全部留空即可
⑤ 点击“保存并应用”
注意:此操作写入/etc/config/network,重启后仍生效,属于【持久化配置】。若跳过“保存并应用”直接去下一步桥接,veth1将不会出现在br-lan的设备列表中。
将veth1桥接到br-lan
进入:网络 → 接口 → 编辑LAN → 物理设置
在“桥接接口”下方的设备列表中,勾选veth1(不要勾选veth0)
点击“保存并应用”
这一步把veth1接入局域网交换平面,使它成为br-lan桥的一部分。veth0此时尚未配置IP,处于独立状态,可用于后续绑定到Docker、LXC或作为旁路监听口。
⚠️ 千万不能同时勾选veth0和veth1——这等于用一根网线把交换机两个端口短接,触发STP环路,OpenWrt可能瞬间失联且无法响应HTTP或SSH请求。
手动配置veth0为独立接口
回到LuCI:网络 → 接口 → 添加新接口
名称填veth0,协议选“静态地址”
设备名填veth0(必须与对端完全一致)
IPv4地址设为172.30.0.1/24(避开主网段,避免路由冲突)
取消勾选“使用DHCP获取IPv4网关”和“使用对端通告的DNS服务器”
点击“保存并应用”
此时veth0已作为独立三层接口启用,可通过ping 172.30.0.2测试连通性(需另一端配好172.30.0.2)。该接口不参与br-lan广播域,仅用于点对点通信或容器网络对接。
验证虚拟网卡运行状态
在终端执行:
ip link show veth0 && ip link show veth1
两行输出均应显示“state UP”,且mtu值一致(默认1500)。
再执行:
brctl show
确认br-lan行中包含veth1。
最后执行:
ifconfig veth0 | grep "inet "
应返回类似“inet 172.30.0.1 netmask 255.255.255.0”的结果,证明veth0已正确获得IPv4地址。











