2 个版本
0.1.1 | 2023 年 3 月 5 日 |
---|---|
0.1.0 | 2022 年 1 月 30 日 |
#898 在 文件系统
17KB
322 行
resolvconffs
Linux 网络命名空间允许一组进程(共享 uid 或来自不同用户)拥有独立的网络环境。但是 DNS 设置(/etc/resolv.conf
)在所有这些环境中是共享的,这带来了一定的不便。
通常(即在 ip netns
工具中)会使用(文件系统)命名空间与 netns 一起作为解决方案,将不同的 /etc/netns/...
文件映射到主要的 /etc/resolv.conf
。这个工具基于 FUSE 文件系统提供了一种不同的方法,该方法提供了这种映射而不需要使用额外的挂载命名空间。
它通过检查访问挂载的 /etc/resolv.conf
的每个程序的 PID,使用 /proc/
来找出应使用哪个底层文件,并将读取和写入转发到该文件。缺失的文件可能从用户指定的模板文件中传播。
示例
(未测试)
# cp /etc/resolv.conf /etc/resolv.conf.bak
# mkdir /tmp/resolvconfs
# /opt/resolvconffs -d /etc/resolv.conf.bak /tmp/resolvconfs /etc/resolv.conf&
安装
从 Github 版本中下载预构建的 x64_64 版本或尝试 cargo install
或下载源代码并使用 cargo build --release
。将生成的可执行文件复制到您想要的位置。
将此工具与发行版的网络堆栈集成超出了本文件的范畴。
使用输出
resolvconffs --help
Usage: /opt/resolvconffs [OPTIONS]
Special FUSE filesystem that maps its sole file to other files based on network namespace of process that queries the file.
Positional arguments:
backing_directory Directory where to look for resolv.conf-like files for each netns.
mountpoint_file
Optional arguments:
-h, --help
-p, --extension EXTENSION Filename extension. resolvconffs maps its file to <backing_directory>/<netns_identifier><postfix> (default: conf)
-d, --default-file DEFAULT-FILE
In case of target file does not exist, copy this file to target instead of returning ENOENT.
-P, --procfs PROCFS Directory where to look up network namespace IDs based on PIDs. (default: /proc)
-o, --fuse-opt OTHER-FUSE-OPTS
库使用
项目未提供库支持,因此不打算使用库。
内部有一个名为 FileMapperFs
的简单可重用组件,允许根据 fuser
crate 实现类似的单文件文件系统,该文件系统根据访问进程的 uid
、gid
或 pid
映射文件。
依赖项
~5MB
~101K SLoC