0

0

Linux ip netns 的 mount / pid / net 命名空间组合使用场景

舞夢輝影

舞夢輝影

发布时间:2026-02-18 15:31:45

|

613人浏览过

|

来源于php中文网

原创

需用 unshare --pid --mount-proc --net=ns1 --fork bash 启动带独立 /proc 和 netns 的 shell;ip netns exec 不创建新 mount/pid 命名空间,故无法隔离 /proc、/sys;组合 user+net+pid 时须配置 uid_map/gid_map 并设 setgroups=deny。

linux ip netns 的 mount / pid / net 命名空间组合使用场景

netns 里怎么让进程看到自己的 /proc 和 /sys

默认创建的 ip netns 只隔离网络栈,/proc/sys 仍是宿主机视图,导致 pslsmod 或容器内工具行为异常。必须手动挂载独立的伪文件系统。

实操建议:

  • 先用 unshare --pid --mount-proc --user --fork bash 启动带独立 /proc 的 shell,再进 netns;否则 mount --bind 到已有 netns 的 /proc 会失败(因为已挂载)
  • 进 netns 后执行:
    mkdir -p /var/run/netns/ns1
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
  • 注意:挂载前确保 /proc 目录为空且未被占用,否则报错 Device or resource busy
  • /proc 挂载后,ps aux 显示的 PID 是该命名空间内的 PID(从 1 开始),但实际进程仍运行在宿主机 PID 命名空间中——这是预期行为,不是 bug

为什么 ip netns exec 不继承 mount 或 pid 命名空间

ip netns exec 本质是用 setns() 系统调用切换到目标 netns,但它不创建新 mount 或 pid 命名空间,也不重挂载 /proc。所以你在 netns 里看到的仍是宿主机的挂载点和进程列表。

常见错误现象:

  • 在 netns 中执行 df -h,显示的是宿主机磁盘使用情况,而非“隔离环境”的存储视图
  • ip netns exec ns1 ps aux 看到所有宿主机进程,而非仅该 netns 内启动的进程
  • 试图在 netns 内 mount --bind 新路径失败,提示 Permission denied(因未启用 --mount 权限)

解决方向:不用 ip netns exec,改用 unshare 组合命令,例如:

unshare --net=/var/run/netns/ns1 --pid --mount-proc --fork bash

多个命名空间组合时 uid_map 和 setgroups 的坑

当你同时用 --user + --net + --pid,内核要求必须配置 user namespace 的 uid/gid 映射,否则 setns() 失败或进程无法访问网络设备。

关键参数差异:

  • 没配 /proc/self/uid_map 就执行 ip link set dev veth0 netns ns1,会报错:Operation not permitted
  • setgroups 必须设为 deny 才能写 gid_map,否则报错:Operation not permitted
  • 典型初始化顺序:
    unshare --user --net --pid --fork bash
    echo "0 1000 1" > /proc/self/uid_map
    echo "deny" > /proc/self/setgroups
    echo "0 1000 1" > /proc/self/gid_map
  • uid_map 中第二列(host UID)必须是你当前 shell 的真实 UID,否则 netns 内 pingss 会因权限不足失败

netns + pidns 下 systemd 服务起不来的原因

在完整隔离的 netns + pidns 中直接运行 systemd --system 几乎必然失败,不是配置问题,而是设计限制:systemd 需要访问 /dev/kmsg/run/systemd 等全局路径,且依赖 cgroup v1/v2 的挂载状态。

实用替代方案:

  • 不要在 netns 中启动完整 systemd,改用 dbus-run-session + 单个守护进程(如 dnsmasq -k -C /etc/dnsmasq.d/ns1.conf
  • 若真需 init-like 行为,用 init=/bin/bash 启动最小 init,再手动 exec 主进程,避免 fork 多进程带来的 pidns 混乱
  • 检查 /proc/1/cgroup:如果显示的是宿主机 cgroup 路径(如 /system.slice),说明未进入独立 cgroup,systemd 会拒绝启动
  • 绝大多数场景下,“netns + 手动启动单个网络服务”比“netns + systemd”更稳定、更易调试

复杂点在于命名空间不是开关式隔离,而是叠加式约束——漏掉任意一层(比如忘了 --mount-procuid_map),就可能让某个看似无关的系统调用突然失败,而且错误信息往往不指向根本原因。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2023.12.20

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

327

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

772

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

419

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

594

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1520

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

714

2023.06.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.3万人学习

Git 教程
Git 教程

共21课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号