#fuse #dns #networking #resolvconf

app resolvconffs

特殊单文件 FUSE 文件系统,根据请求进程的 Linux 网络命名空间映射文件

2 个版本

0.1.1 2023 年 3 月 5 日
0.1.0 2022 年 1 月 30 日

#898文件系统

MIT/Apache

17KB
322

resolvconffs

Linux 网络命名空间允许一组进程(共享 uid 或来自不同用户)拥有独立的网络环境。但是 DNS 设置(/etc/resolv.conf)在所有这些环境中是共享的,这带来了一定的不便。

通常(即在 ip netns 工具中)会使用(文件系统)命名空间与 netns 一起作为解决方案,将不同的 /etc/netns/... 文件映射到主要的 /etc/resolv.conf。这个工具基于 FUSE 文件系统提供了一种不同的方法,该方法提供了这种映射而不需要使用额外的挂载命名空间。

它通过检查访问挂载的 /etc/resolv.conf 的每个程序的 PID,使用 /proc//ns/net 来找出应使用哪个底层文件,并将读取和写入转发到该文件。缺失的文件可能从用户指定的模板文件中传播。

示例

(未测试)

# 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 实现类似的单文件文件系统,该文件系统根据访问进程的 uidgidpid 映射文件。

依赖项

~5MB
~101K SLoC