登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  linux

Linux 网络命名空间如何连接到宿主机网桥

来源:17golang原创

时间:2026-10-10 01:32:01 354浏览 收藏

把 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 设备总是成对出现,一端收到的数据会从另一端出现,因此它很适合跨越命名空间边界。

宿主机网络栈、br-lab、veth 对与 labns 的静态归属关系图
图1:结构图。宿主机端 veth-host 作为 br-lab 的端口,veth-ns 位于 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;最后确认两端地址使用相同掩码且没有地址冲突。这样比一开始就修改防火墙更容易定位问题。

地址应该配在网桥和命名空间端口上

br-lab、veth 两端、labns 路由与宿主机转发边界的静态关系图
图2:结构图。宿主机地址配置在 br-lab,命名空间地址配置在 veth-ns;默认路由只在需要访问其他网段时使用,宿主机转发与防火墙策略属于额外边界。

如果命名空间只需要访问宿主机网桥地址和同一网桥上的其他节点,到这里已经足够。只有当 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 吗?

技术上可以,但这会改变宿主机现有二层和三层拓扑,远程机器还可能因此失联。生产主机应先在带外控制台或变更窗口中设计迁移,不要把本文的隔离实验命令直接套到承载管理流量的物理接口上。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>