首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemd-n派生容器DNS不工作

systemd-n派生容器DNS不工作
EN

Server Fault用户
提问于 2020-12-18 16:37:20
回答 1查看 1.3K关注 0票数 2

我正在尝试启动一个带有systemd派生的容器(来自systemd-容器包,版本241),但是容器无法解析主机名。主机环境是PureOS 9.0,它类似Debian,基于Ubuntu。

容器映像是使用debootstrap创建的,并安装了systemd容器:

代码语言:javascript
复制
debootstrap \
    --components main,restricted,universe \
    --include systemd-container \
    bionic /var/lib/machines/bionic http://archive.ubuntu.com/ubuntu/
echo bionic > /var/lib/machines/bionic/etc/hostname

我将从图像目录启动容器:

代码语言:javascript
复制
systemd-nspawn -qbD /var/lib/machines/bionic

从容器内部,我可以访问主机网络:

代码语言:javascript
复制
root@bionic:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=130 ms

但是DNS解析失败了:

代码语言:javascript
复制
root@bionic:~# ping google.com
ping: google.com: Temporary failure in name resolution

容器resolv.conf是我所期望的;它看起来像一个非常标准的本地DNS解析器,它应该由主机系统解析提供。

代码语言:javascript
复制
nameserver 127.0.0.53

我看到DNS解析器监听主机:

代码语言:javascript
复制
root@host:~$ lsof -i -Pn | grep LISTEN | grep 53
systemd-r  6957 systemd-network   13u  IPv4 5300137      0t0  TCP 127.0.0.53:53 (LISTEN)
systemd-r  7252 systemd-resolve   12u  IPv4 5313025      0t0  TCP *:5355 (LISTEN)
systemd-r  7252 systemd-resolve   14u  IPv6 5313028      0t0  TCP *:5355 (LISTEN)

这与我以前在Ubuntu上使用的设置类似,没有问题。我没有理由相信这在PureOS或我的systemd版本上是行不通的。我猜想主机网络配置中有些东西是不同的,但我不知道该检查什么。

我发现我的主机在默认情况下没有运行systemd解析或。我手动启动了这些服务,行为没有改变。我还阻止了NetworkManager,认为这可能是干扰,但那里也没有运气。

EN

回答 1

Server Fault用户

发布于 2021-02-21 05:44:24

我在Linux上尝试使用商业VPN时遇到了这个问题。我和你一样使用了一个带有Debootstrap的Systemd容器。我做了一些研究,发现Systemd容器在DNS中有很多问题,原因有两个:编写代码而不编写文档。在没有测试的情况下在网络上部署一些东西。

我还读了一些文章,这些文章通过搜索Google中的“systemd容器和vpn dns问题”来说明问题。事实证明,有几件事你应该检查,但有一个正确的方法做每件事,并正确的方式起作用。看看我的读物..。

在本文中,作者查看了DNS缓存条目,并发现更新更改了resolv.conf的符号链接。

如何使用新的系统解析解析器查看DNS缓存项

在本文中,他们将讨论这个问题,以及在拆分DNS的场景中是如何引起的。

systemd解决方案:拆分DNS简介

如何在Kubernetes 1.10及更早版本上修复它。

解决系统服务器上的Kubernetes DNS问题

一个更简单的解决方案是删除Systemd或使用没有Systemd的Linux发行版,但是创建一个Chroot或容器而不是Systemd容器并不容易。当然,所有其他的注意事项都适用,但是真正的失败点是连接和断开连接到名称服务器。Systemd将在resolv.conf中使用自己的名称服务器。在我使用VPN的情况下,真正的解决方案是创建一个杀死开关,以确保如果与DNS名称服务器的连接丢失,它将不再试图解析DNS。

什么是VPN Killswitch,它是如何工作的?

这种有问题的行为不仅与Systemd容器有关,而且在WSL2中也以类似的方式发生.

修正WSL2 2中的DNS解析

又一个值得一读的书!

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1046776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档