为一个特定的 Linux 进程设置唯一的 DNS 设置

为一个特定的 Linux 进程设置唯一的 DNS 设置

我不确定是否可以做到,但这就是我想做的。我使用的是 Mac,但首先尝试解决 Linux 的问题,这可能更通用,也更容易。

  • 我希望我的系统配置8.8.8.8为在每种用途下使用通用 DNS。

  • 我希望一个进程(即 Plex 服务器)使用另一个 DNS 服务器 - 即允许我绕过付费内容订阅的区域限制的 DNS(嘿,至少我说得没错)。我们将其称为 DNS 服务器3.3.3.3

这样做的原因是,如果 DNS 出现问题,我不希望损害整个系统的稳定性3.3.3.3。是的,我更信任 Google 的 DNS。

有可能实现这种诡计吗?或者,还有其他聪明的方法来实现这个目标吗?

我周围还有其他几台机器,如果有人能想到一个有创意的解决方案,我也愿意进行路由欺骗等:)

非常感谢!

约纳坦

答案1

我想你需要的是一种“类似容器”的技术。

看一下docker(现在非常著名的容器技术)。

它在单独的容器中运行该进程,该容器可能具有不同的控制组、资源命名空间等,并且可能具有不同的 DNS 服务器配置。

答案2

使用 Linux 的 mount 命名空间覆盖/etc/resolv.conf您想要的内容。Bubblewrap 是一款无需 root 权限即可完成此操作的好工具。

bwrap --dev-bind / / --ro-bind-data {FD} /etc/resolv.conf

FD 是包含的文件描述符nameserver {the-dns-you-need}

请记住使您的进程(Plex服务器)无法访问系统的DNS缓存(例如bwrap --tmpfs /var/run/nscd/

整个命令:

bwrap --dev-bind / / --ro-bind-data {fd} /etc/resolv.conf --tmpfs /var/run/nscd/ sh -c "your command and arguments"

我编写了一个 bash 脚本来完成所有步骤。给你

相关内容