Linux 网络命名空间如何连接到宿主机网桥
把 Linux 网络命名空间接到宿主机网桥,最常见的做法是创建一对 veth:宿主机端作为 bridge 的端口,另一端移动到命名空间。随后把宿主机侧的三层地址配置在网桥设备上,把命名空间地址配置在命名空间内的 veth 端口上。下面以 labns、br-lab 和 10.200.0.0/24 为例,完成基础互通、核对和清理。
官方文档:https://man7.org/linux/man-pages/man8/ip-netns.8.html
连接关系可以记成:宿主机网络栈 → br-lab → veth-host ↔ veth-ns → labns。不要把宿主机侧地址配到已经加入网桥的 veth-host 上,三层地址应放在 br-lab 上。
先画清宿主机与命名空间的连接边界
网络命名空间拥有独立的网络设备、路由表和防火墙规则。新建的 labns 一开始只有关闭状态的回环设备,并不会自动连接宿主机。veth 设备总是成对出现,一端收到的数据会从另一端出现,因此它很适合跨越命名空间边界。

网桥工作在二层,它负责在端口之间转发以太网帧。把 veth-host 加入 br-lab 后,veth-host 的角色是网桥端口;宿主机要在这个二层网络里拥有 IP,应把地址设置在 br-lab 上。这样设备职责清楚,也便于后续再接入其他命名空间或虚拟机。
创建命名空间和宿主机网桥
以下命令需要 root 权限。执行前先确认 10.200.0.0/24 没有与宿主机已有路由、VPN、容器网段或办公网络重叠。
# 创建名为 labns 的命名网络空间 sudo ip netns add labns # 创建 Linux bridge,并在宿主机侧配置网关地址 sudo ip link add br-lab type bridge sudo ip addr add 10.200.0.1/24 dev br-lab # 网桥设备必须处于 UP 状态 sudo ip link set br-lab up
这一步完成后,可以用下面的命令核对命名空间和网桥是否存在:
# 核对命名空间名称 ip netns list # 核对网桥状态和地址 ip link show dev br-lab ip addr show dev br-lab
预期能看到 labns,并且 br-lab 处于 UP,持有 10.200.0.1/24。如果添加地址时报冲突,应先更换测试网段,而不是覆盖已有路由。
创建 veth 对并把宿主机端加入网桥
创建一对设备后,先处理仍在宿主机中的 veth-host:把它设为 br-lab 的从属端口,再启用链路。
# 创建一对虚拟以太网设备 sudo ip link add veth-host type veth peer name veth-ns # 把宿主机端加入 br-lab,随后启用该端口 sudo ip link set veth-host master br-lab sudo ip link set veth-host up # 核对 br-lab 当前包含哪些端口 ip link show master br-lab
这里不要再对 veth-host 执行 ip addr add。它已经是网桥端口,三层地址由 br-lab 承担。若 ip link show master br-lab 看不到 veth-host,说明端口归属尚未建立,应先修复这一层,再进入命名空间配置。
移动另一端并完成命名空间配置
把 veth-ns 移入 labns 后,默认命名空间将不再直接看到这个设备。可以使用 ip -n labns 在目标命名空间中操作,也可以用 ip netns exec labns 执行普通命令。
# 把 veth 的另一端移动到 labns sudo ip link set veth-ns netns labns # 启用命名空间内的回环和 veth 设备 sudo ip -n labns link set lo up sudo ip -n labns link set veth-ns up # 为命名空间端口配置同一子网中的地址 sudo ip -n labns addr add 10.200.0.2/24 dev veth-ns
现在 10.200.0.1 与 10.200.0.2 位于同一个直连子网。基础互通不要求默认路由,也不要求 NAT。先核对命名空间中的设备、地址与直连路由:
# 查看命名空间中的链路、地址和路由 sudo ip -n labns link show sudo ip -n labns addr show dev veth-ns sudo ip -n labns route show # 从命名空间测试宿主机网桥地址 sudo ip netns exec labns ping -c 3 10.200.0.1
若 ping 不通,按层检查:先确认 br-lab、veth-host 和 veth-ns 都是 UP;再确认 veth-host 属于 br-lab;最后确认两端地址使用相同掩码且没有地址冲突。这样比一开始就修改防火墙更容易定位问题。
地址应该配在网桥和命名空间端口上

如果命名空间只需要访问宿主机网桥地址和同一网桥上的其他节点,到这里已经足够。只有当 labns 需要访问其他网段时,才添加默认路由:
# 仅在需要访问 10.200.0.0/24 以外网络时添加 sudo ip -n labns route add default via 10.200.0.1 # 核对默认路由是否指向宿主机网桥地址 sudo ip -n labns route show
默认路由只告诉命名空间把未知目标交给 10.200.0.1,它不会自动让宿主机转发报文。要访问外网,还要根据生产拓扑明确启用 IPv4 转发,并配置允许范围、回程路由以及防火墙或 NAT 策略。不要为了“先通再说”直接清空防火墙或加入无限制转发规则;应限制源网段、出口接口和目标范围,并把变更纳入现有安全基线。
生产使用时补齐权限、持久化和审计
手工命令适合实验和排障,生产环境还需要处理以下边界:
- 最小权限:创建 netns、bridge 和 veth 需要 root 或相应能力,不要把不受控的网络管理权限交给普通业务进程。
- 命名与网段登记:统一维护命名空间、网桥、veth 和子网清单,避免与容器平台、VPN 或其他租户冲突。
- 持久化:重启后仍需存在的拓扑,应交给 systemd-networkd、NetworkManager、容器运行时或受控配置系统管理,而不是只保留一组临时命令。
- 日志与变更:记录谁创建、修改和删除网络对象;转发、防火墙与 NAT 规则应走同一套审计和回滚流程。
- 发布检查:确认链路状态、端口归属、地址、路由、回程路径和策略范围,再开放业务流量。
清理测试拓扑并避免残留
清理前先确认 labns 中没有仍需保留的进程。删除命名空间会移除其中的虚拟端口,对端 veth 也会随这对设备一起消失;最后再删除网桥。
# 查看 labns 中是否仍有进程 sudo ip netns pids labns # 删除命名空间;veth 对会随命名空间端清理 sudo ip netns del labns # 删除宿主机网桥 sudo ip link del br-lab
如果命名空间中仍有后台进程,先按业务流程停止它们,再删除命名空间。完成后用 ip netns list、ip link show dev br-lab 和 ip link show dev veth-host 复查对象已不存在。这样既能避免临时地址和设备名残留,也能保证下一次实验从可预测状态开始。
常见问题
为什么 br-lab 有地址,veth-host 不需要地址?
veth-host 是网桥的二层端口,br-lab 才是宿主机在该二层网络上的三层接口。把地址放在 bridge 上,可以让多个网桥端口共享同一个宿主机三层入口。
为什么基础 ping 通了,命名空间还是不能上网?
基础 ping 只证明命名空间与宿主机网桥地址可达。访问外部网络还依赖默认路由、宿主机转发、回程路由、防火墙和可能的 NAT,这些都不由创建 veth 或 bridge 自动完成。
能把真实物理网卡也加入 br-lab 吗?
技术上可以,但这会改变宿主机现有二层和三层拓扑,远程机器还可能因此失联。生产主机应先在带外控制台或变更窗口中设计迁移,不要把本文的隔离实验命令直接套到承载管理流量的物理接口上。
离线环境遇到 toolchain 自动下载失败怎么办
- 上一篇
- 离线环境遇到 toolchain 自动下载失败怎么办
- 下一篇
- React useOptimistic 如何处理失败回滚与并发更新
-
- 文章 · linux | 3小时前 |
- Linux zram 写回如何在内存与磁盘间平衡
- 373浏览 收藏
-
- 文章 · linux | 5小时前 |
- Linux Landlock 怎样限制普通进程访问文件目录
- 151浏览 收藏
-
- 文章 · linux | 10小时前 |
- Linux dm-verity 如何校验只读根文件系统
- 190浏览 收藏
-
- 文章 · linux | 12小时前 | Linux BPF ring buffer BPF_MAP_TYPE_RINGBUF libbpf bpf_ringbuf_reserve
- Linux BPF ring buffer 怎样向用户态传递事件
- 348浏览 收藏
-
- 文章 · linux | 14小时前 |
- Linux nftables 集合如何动态维护封禁地址
- 193浏览 收藏
-
- 文章 · linux | 21小时前 | Linux · memory.events Linux cgroup v2 memory.events.local cgroup内存事件 OOM定位
- Linux cgroup v2 的 memory.events.local 怎样区分本组事件
- 180浏览 收藏
-
- 文章 · linux | 23小时前 | Linux · 性能监控 · Pressure Stall Information poll Linux PSI POLLPRI 资源压力
- Linux PSI 触发器如何在压力超过阈值时通知进程
- 331浏览 收藏
-
- 文章 · linux | 1天前 |
- systemd socket 的 Accept=yes 如何启动实例化服务
- 386浏览 收藏
-
- 文章 · linux | 1天前 | Linux · 最小权限 StateDirectory systemd 服务 systemd DynamicUser 动态用户
- systemd DynamicUser 如何运行无固定账号的服务
- 261浏览 收藏
-
- 文章 · linux | 1天前 | cgroup v2 memory.max Linux OOM OOM Killer oom_score
- OOM Killer 选择了哪个进程:分数、限制与证据收集
- 233浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 396次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 476次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 482次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 426次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 253次使用
-
- Redis 为什么不能直接暴露公网:protected-mode、ACL 和审计检查
- 2026-07-17 364浏览
-
- Linux ip route get 怎么确认实际选中的出口网卡
- 2026-09-09 436浏览
-
- Linux 策略路由怎么按源地址选择路由表
- 2026-10-06 181浏览
