隔壁老哥有需求,折腾了一下午把 systemd-resolved 重新折腾了一遍 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fiveelementgid

隔壁老哥有需求,折腾了一下午把 systemd-resolved 重新折腾了一遍

  • &nbp;
  •   fiveelementgid 2021 年 2 月 23 日 4554 次点击
    这是一个创建于 1887 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题需求参考老哥的帖子: https://v2ex.com/t/755417

    先上成果图 Screenshot from 2021-02-23 18-32-43.png @lizenghui 需求在于走自建 DNS,但是无法理解 NetworkManager 与 systemd-resolved 的关系

    梳理了一下(不知道对不对,有错误请踹我):NetworkManager 管理整个网络,systemd-resolved.service 本质上只提供了一个 DNS 服务器(IP:127.0.0.53),NetworkManager 所需要做的只是把 DNS request 交付给 systemd-resolved.service 的 DNS 服务器进行处理

    但是对于系统 DNS 工具来说,这个 DNS 服务器(127.0.0.53)是一个黑箱,因此查询的结果只能看到一个 DNS 服务器:

    Screenshot from 2021-02-23 18-41-29.png

    原帖里面老哥采用绕过这个 DNS 服务器,直接用 @指定外部 DNS 服务器会让整个 service 无用

    因此正确的处理方案应该是进去 127.0.0.53 内部查看,用 resolvectl(就第一个图)

    上面的 Global 段的 DNS 服务器很好改,直接改 /etc/systemd/resolved.conf

    Screenshot from 2021-02-23 18-47-48.png

    但是这个实际上并没有用,因为 .~ 代表匹配的域名

    Screenshot from 2021-02-23 18-50-41.png

    我们可以看到 Global 和 wifi 的 wlp3s0 都有.~

    意思是任何域名都会往这两个 field 的所有 DNS 服务器同时发送查询(这就是 split DNS 的 concurrency 优势,被引入的原因),因为 ISP 提供的 10.0.0.1 肯定比 cf 的 1.1.1.1 快,所以肯定会用 ISP 的,这样设置 DNS 会实效

    但是实际上你可以学我之前配置的(我之前也没想明白怎么消除 wlp3s0 的),一个一个手动自己加,例如 google.com ,用 wireshark 抓包可以证此时不会向 wlp3s0 的 DNS(就 10.0.0.1)发送 DNS 包查询

    但是这种方法很 nt,因为不可能把所有常用的网站列上去

    所以最好的解决方案应该是 把 wlp3s0 自动分配的 DNS 消除掉

    思路回到最上面,resolved 的 DNS 服务只是单纯接受从 NetworkManager 处接受的 DNS 设置,因此要在 NetworkManager 这一级管理的 Network 动心思

    旧版本的配置文件位于:

    /etc/sysconfig/network-scripts/

    参考配置信息是: man nm-settings-ifcfg-rh

    新版本的配置文件位于:

    /etc/NetworkManager/system-connections/

    参考的配置信息为:man nm-settings

    要达到老哥的需求,应该是两个方面: 1.去除 ISP 自带的 DNS 2.添加自己的 DNS

    对应上面两点加两条两个指令配置

    Screenshot from 2021-02-23 19-13-50.png

    Screenshot from 2021-02-23 19-15-42.png

    [完]

    第 1 条附言    2021 年 2 月 23 日
    补充以下,如果需要自定义多个 DNS,用分号(;)间隔
    dns=1.1.1.1;208.67.222.222;8.8.4.4;
    12 条回复    2021-02-24 13:53:24 +08:00
    fiveelementgid
        1
    fiveelementgid  
    OP
       2021 年 2 月 23 日
    @lizenghui 为啥 @不到人
    lizenghui
        2
    lizenghui  
       2021 年 2 月 23 日
    @fiveelementgid 认真拜读了您的文章,真的非常感谢,百忙之中还在研究这个问题。
    其实我之前也尝试了 /etc/systemd/resolved.conf 改这个 但是确实像您所说不可能每个域名都加一遍;

    后面这种 改 networkmanager 对应连接配置这种也试了,在插有线网是 OK 的。拨了网线 使用 wifi 就会导致无法上网。因为自定义的 DNS:192.168.1.1 无法连接,因为我目前的有线网和 wifi 是两个完全独立的网络。。。(不喷我啊,实际情况)

    我下午写了一个临时脚本来解决:
    1 、脚本监测有线网状态
    2 、如果是有线网连接状态,用 iptables 将本机所有访问 53 端口的 udp 连接重定向到 192.168.1.1
    3 、如果是有线网断开的状态,将 iptables 重定向部分去掉

    暂时能用,感觉很不优雅。。。
    lizenghui
        3
    lizenghui  
       2021 年 2 月 23 日
    @fiveelementgid 咱可以加个电报,以后方便交流,有点找到伙伴的感觉,身边还真没人能聊这些奇葩的网络问题。
    我的电报同名 @ lizenghui
    fiveelementgid
        4
    fiveelementgid  
    OP
       2021 年 2 月 23 日
    “因为我目前的有线网和 wifi 是两个完全独立的网络”
    那样的话方案确实不太行,那就只能写脚本了
    忙倒是不忙,大学本科在读,准备回学校了,失业人员找实习中
    这些网络问题算是很冷门的了,不过我也不是主要做这个的
    电报好友+1
    yanqiyu
        5
    yanqiyu  
       2021 年 2 月 23 日   2
    有一点想要提到的,其实 systemd-resolved 提供的 127.0.0.53 只是一个 failback,默认情况下解析会通过 glibc 的 nss 扩展借助 dbus 完成解析。那个 127.0.0.53 一般是给 golang 程序那些 nss 管不到的程序做解析的。不过在 Ubuntu 上那个 nss 模块默认没开,于是修改 resolved.conf 可能有效果,在 Fedora 上可能对于大部分程序就会不好使了。

    systemd-resolved 获得上游 DNS 配置的方法有很多,默认情况下会从 network manager,比如 systemd-networkd 或者 NetworkManager 取得。但是也可以手动配置,确实通过 network manager 层面配置更可靠

    至于 #2 提到的,要不试试 FallbackDNS 配置,我建议的配置是
    1. 有线网通过 NM 设置 DNS
    2. 无线网通过 NM 禁用 DNS
    3. 设置 FallbackDNS,在有线网断开的时候 resolved 没有 DNS 配置就会使用 FallbackDNS
    fiveelementgid
        6
    fiveelementgid  
    OP
       2021 年 2 月 23 日
    @yanqiyu 不用 Ubuntu 好多年,systemd-resolved 127.0.0.53 里面的 DNS 服务器的 Global 的也有 fallback 备用 DNS 服务器。Fedora 平台用的 nss-resolv 替换了 nss-dns
    https://fedoraproject.org/wiki/Changes/systemd-resolved#Summary

    >Ubuntu does not use nss-resolve. Instead, Ubuntu uses the traditional nss-dns provided by glibc upstream, so glibc on Ubuntu continues to read /etc/resolv.conf, as is traditional.

    确实 Ubuntu 还可以读 resolv.conf 有效果,NetworkManager 就是上游获取,不过 systemd-networkd 现在基本都是默认关闭了无法使用。你和楼上的老哥说的做法我想了一下,是可行的,但是是应该要修改 systemd-resolved.service 的这个文件

    `/etc/systemd/resolved.conf`
    jim9606
        7
    jim9606  
       2021 年 2 月 23 日
    systemd-resolved 的作用是替换掉 glibc nss,前者支持一些新特性,例如 DoT,同时前者集成 LLMNR 、DNSSEC 、mDNS 等后者需要用插件实现的功能,可以使用 CLI 提供 API 风格查询,也可以通过 stub resolver 127.0.0.1:53 支持。

    NetworkManager 本职是网络配置 DHCP 客户端、Wifi 加密、解析服务均依赖外部程序,功能对标的是 systemd-networkd,前者对无线网络支持更完善,后者集成 DHCP 客户端,支持通过 MAC 和驱动名匹配网卡,支持 bond 、bridge 、静态路由等配置,适合服务器使用。目前 Ubuntu Desktop 默认前者,Server 默认后者。

    networkd 的配置是 /etc/systemd/network/*.network 及 /etc/systemd/networkd.conf,CLI 为 networkctl 。

    resolved 的配置是 /etc/systemd/resolved.conf 及 networkd 配置文件内的 [DNS]小节,CLI 为 resolvectl 。
    fiveelementgid
        8
    fiveelementgid  
    OP
       2021 年 2 月 23 日
    @jim9606 我在上一楼说了....systemd-networkd 在 Fedora 默认是关闭的

    ```
    [GKD@fedora systemd-resolved]$ sudo systemctl status systemd-networkd
    ● systemd-networkd.service - Network Service
    Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; disabled; vendor preset: disabled)
    Active: inactive (dead)
    Docs: man:systemd-networkd.service(8)
    ```
    hanguofu
        9
    hanguofu  
       2021 年 2 月 24 日
    顺便问问 : 怎样才能在不修改路由器的设置的前提下, 在局域网内输入自定义的域名 就可以访问自己在 局域网内的设备 ?
    defunct9
        10
    defunct9  
       2021 年 2 月 24 日 via iPhone
    @hanguofu dnsmasq 劫持吧
    lizenghui
        11
    lizenghui  
       2021 年 2 月 24 日
    @yanqiyu
    方案确实可行! V2EX 果然万能!

    @jim9606
    多谢,学到了。

    @hanguofu
    像我一样自建一个 DNS
    fiveelementgid
        12
    fiveelementgid  
    OP
       2021 年 2 月 24 日 via Android
    @hanguofu 两个方案:
    1.改 hosts 文件,hard code,不过需要局域网内的设备的 ip 固定
    2.局域网内设备 ip 不固定的话,可能需要 DNS 。
    其他更多方案你可以考虑从更下一层 arp 层级直接进行 Mac 绑定(话说路由器可以根据设备 Mac 值直接绑定固定 ip 吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1043 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 18:27 PVG 02:27 LAX 11:27 JFK 14:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86