我正在尝试将拆分 DNS 添加到 wireguard 隧道(这实际上不是一个 wireguard 问题)。
我有一个 PostUp 命令:resolvectl dns %i 10.160.20.15
翻译为:resolvectl dns wg0 10.160.20.15
但它不起作用。
当我以 root 身份运行该命令时,似乎没有任何变化。没有 DNS 服务器添加到 resolvectl 状态。如果我启用 DEBUG 级别的日志记录,我会收到大量消息,journalctl
但我看不到失败的原因。
它太长了,无法在这里发布;但error-message
所有日志中唯一没有填充的字段n/a
是Link lan0 is managed
,它有另一个error-name
值为的字段org.freedesktop.resolve1.LinkBusy
lan0
是我的主以太网的名称(在中重命名netplan
),并且据我所知,实际上不应该涉及该命令?
如果我很天真,并且以某种方式lan0
参与其中,我该如何使其不忙(不受管理);这样我就可以在不同的接口上设置 DNS?
编辑:在org.freedesktop.resolve1上发现以下内容:
org.freedesktop.resolve1.LinkBusy
无法进行请求的配置更改,因为 systemd-networkd(8) 已经占有该接口并为其提供了配置数据。
所以我想我需要知道networkd
“占有”是什么意思?以及如何重新占有?
经过一番思考后,我发现向(至少)wireguard 接口添加自定义 DNS 是依赖于顺序的。
即:您必须先指定搜索域,然后才能指定服务器。
不知道为什么,我怀疑这是一个短暂的错误;但如果你指定:
(和/或简单地在 wg0 启动后执行这些命令)。实际上什么也没发生。没有错误消息,但 的输出完全没有变化
resolvectl
。但是,如果您反转顺序并在 DNS 服务器之前指定域,它就可以完美运行。
因此,wireguard 配置文件的正确代码片段应该是:
还要注意(超出了这个问题的范围)wireguard 内置技术:
也失败了,因为它尝试使用
resolvconf
实际上不适用于 systemd 的旧版本(是的,有一种模拟模式)。版本信息: