AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 442598
Accepted
Piotr Dobrogost
Piotr Dobrogost
Asked: 2018-05-09 09:01:24 +0800 CST2018-05-09 09:01:24 +0800 CST 2018-05-09 09:01:24 +0800 CST

如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

  • 772

我通过网关连接到局域网并访问 Internet。本地网络中有 DNS 服务器,能够解析本地网络中计算机的主机名。

我想配置systemd-resolved和systemd-networkd以便本地主机名的查找请求将专门定向(路由)到本地 DNS 服务器,而对所有其他主机名的查找请求将专门定向到另一个远程 DNS 服务器。

假设我不知道配置文件在哪里,或者我是否应该添加更多文件并要求在答案中指定它们的路径。

linux systemd
  • 3 3 个回答
  • 162043 Views

3 个回答

  • Voted
  1. Best Answer
    Piotr Dobrogost
    2018-05-09T09:01:24+08:002018-05-09T09:01:24+08:00

    在本地网络接口的配置文件(匹配名称模式的文件/etc/systemd/network/*.network)中,我们必须指定我们要使用DHCP=选项从 DHCP 服务器获取本地 DNS 服务器地址:

    [Network]
    DHCP=yes
    

    DNS=或使用选项明确指定其地址:

    [Network]
    DNS=10.0.0.1
    

    此外,我们需要使用Domains=选项指定(在同一部分中)本地域

    Domains=domainA.example domainB.example ~example
    

    我们指定本地域domainA.example domainB.example以获得以下行为(来自systemd-resolved.service,systemd-resolved手册页):

    查找以每个接口域之一结尾的主机名将专门路由到匹配的接口。

    这种方式hostX.domainA.example将由我们的本地 DNS 服务器专门解析。

    我们指定~example所有以结尾的域example都将被视为仅路由域以获得以下行为(来自此提交的描述):

    具有仅路由域的 DNS 服务器应仅用于指定的域。

    这种方式hostY.on.the.internet将由我们的全球远程 DNS 服务器专门解析。

    笔记

    理想情况下,使用 DHCP 协议时,应该从 DHCP 服务器获取本地域名,而不是在上面的网络接口配置文件中明确指定。见UseDomains=选项。但是,此功能仍然存在未解决的问题 - 请参阅systemd-networkd DHCP 搜索域选项问题。

    我们需要将远程 DNS 服务器指定为我们的全局、系统范围的 DNS 服务器。我们可以在/etc/systemd/resolved.conf文件中这样做:

    [Resolve]
    DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
    

    不要忘记重新加载配置并重新启动服务:

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart systemd-networkd
    $ sudo systemctl restart systemd-resolved
    

    警告!

    上述保证仅适用于由systemd-resolved 解析名称时- 请参阅nss-resolve、libnss_resolve.so.2的手册页和 systemd-resolved.service、systemd-resolved 的手册页。

    也可以看看:

    • systemd 相关手册页中路由查找请求的描述不清楚
    • 如何使用 systemd-resolved 对 DNS 进行故障排除?

    参考:

    • systemd-resolved.service 的手册页,systemd-resolved
    • 已解决.conf 的手册页,已解决.conf.d
    • systemd-network 的手册页
    • 71
  2. F1Linux
    2019-04-30T13:11:37+08:002019-04-30T13:11:37+08:00

    只是为了扩展 @piotrDobrogost 的出色答案,不要忘记配置/etc/nsswitch.conf为systemd-resolved用作 DNS 解析源。对于您的特定用例,您的hosts指令应如下所示:

    /etc/nsswitch.conf

    hosts:  files resolve dns
    

    因此,如果您将解析限制为仅在上述 Piotr 详细说明中指定的那些域,则接下来应按照在指令中未找到域时指定的名称解析源Domains的顺序查询DNS :/etc/systemd/resolved.conf/etc/nsswitch.confDomains

    以下链接引用了指定解析的要求,/etc/nsswitch.conf因此systemd-resolved在名称解析期间会参考:

    https://github.com/systemd/systemd/issues/940

    我发现 SystemD 文档很糟糕。我必须从多个链接中拼凑出一个理解,包括上面 Piotr 的回答 ;-)

    • 7
  3. dols
    2020-04-23T13:52:33+08:002020-04-23T13:52:33+08:00

    如果您这样做是因为您使用 OpenVPN 配置了连接,则需要按照https://wiki.archlinux.org/index.php/OpenVPN使用https://github.com/jonathanio/update-systemd-resolved #The_update-systemd-resolved_custom_script

    具体来说,一旦您update-systemd-resolved在 OpenVPN 客户端配置中安装并激活了脚本,您还将添加dhcp-option DOMAIN-ROUTE yourdomain.com到相同的客户端配置中。

    您应该会看到 OpenVPN 的以下输出:

    <14>Apr 22 16:10:31 update-systemd-resolved: Link 'tun0' coming up
    <14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Routed Domain yourdomain.com
    <14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Domain yourdomain.com
    <14>Apr 22 16:10:31 update-systemd-resolved: Adding IPv4 DNS Server 192.168.XYZ.XYZ
    <14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDNS(640 1 2 4 192 168 XYZ XYZ)
    <14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDomains(640 2 yourdomain.com false yourdomain.com true)
    

    您可以使用以下命令验证 DNS 配置resolvectl status:

    Link 3 (wlp0s....)
          Current Scopes: DNS
    DefaultRoute setting: yes
           LLMNR setting: yes
    MulticastDNS setting: no
      DNSOverTLS setting: no
          DNSSEC setting: no
        DNSSEC supported: no
      Current DNS Server: 192.168.XYZ.XYZ
             DNS Servers: 192.168.XYZ.XYZ
              DNS Domain: ~.
                          lan
    Link 640 (tun0)
          Current Scopes: DNS
    DefaultRoute setting: no
           LLMNR setting: yes
    MulticastDNS setting: no
      DNSOverTLS setting: no
          DNSSEC setting: no
        DNSSEC supported: no
      Current DNS Server: 192.168.XYZ.XYZ
             DNS Servers: 192.168.XYZ.XYZ
              DNS Domain: ~yourdomain.com
    
    • 3

相关问题

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 200806
  • 回答 265436
  • 最佳答案 132718
  • 用户 66935
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve