V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
dbg
V2EX  ›  Linux

奇怪的 DNS 问题,太多程序能修改系统 DNS 了

  •  
  •   dbg · 2022-12-15 16:36:09 +08:00 · 4019 次点击
    这是一个创建于 487 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在用 tailscale ,这虚拟组网工具配置起来超简单,太爱这样的工具了,在我所有的 windows 操作机和 Linux VPS 上安装都非常顺利,唯独在我的 Arch Linux 笔记本电脑上出了问题:启动 tailscale 后能连通虚拟网的 IP ,但是 DNS 有问题,无法使用 VPS 作为出口( exit node )。按照官网的说明调整了还是没用。
    https://tailscale.com/kb/1188/linux-dns/#dhcp-dhclient-overwriting-etcresolvconf
    最后发现是 Arch Linux 的 dhcpcd 在自动更新 resolv.conf 导致的,最终解决方法如下:

    #不要让 dhcpcd 接管 resolv.conf ,增加如下配置
    vim /etc/dhcpcd.conf
    nohook resolv.conf

    systemctl reload dhcpcd

    #不要让 NetworkManager 接管 resolv.conf
    vim /etc/NetworkManager/NetworkManager.conf 文件:
    [main]
    dns=none

    systemctl reload NetworkManager

    #让 systemd-resolved 接管 resolv.conf
    ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
    systemctl enable --now systemd-resolved

    #重启 tailscaled
    systemctl restart tailscaled

    问题解决。

    在 Linux 平台上,能设置系统 DNS 的程序,真是不少,看来以后要多注意了。
    11 条回复    2022-12-16 14:28:50 +08:00
    dagouxiong
        1
    dagouxiong  
       2022-12-15 16:40:04 +08:00
    使用 VPS 作为出口( exit node ),怎么实现,1.这个 VPS 开启 exit node 功能,2.其他机器是把网关指向到这个 IP 吗?
    dbg
        2
    dbg  
    OP
       2022-12-15 16:43:10 +08:00
    @dagouxiong 使用如下命令
    sudo tailscale up --exit-node=<你有 exit node 功能的节点名称或者 IP>
    这样就可以把本机流量全部转发给 exit node 处理了,这个功能很方便,还能用来科学上网。
    dagouxiong
        3
    dagouxiong  
       2022-12-15 16:46:53 +08:00
    @dbg 最近我也安装了 tailscale +DERP 服务器,做了异地虚拟组网,确实挺方便的。exit node 功能又看过,还没实验下,我去试试看。
    wwbfred
        4
    wwbfred  
       2022-12-15 22:13:02 +08:00
    我改 DNS 都是删了 resolv.conf 的软链接,然后直接建立一个文件,写入想用的 DNS 地址。
    别的方法都是在搞笑,折腾半天也不好使。尤其是 Ubuntu 自带的那个 systemd-resolved 还是什么玩意,我到现在都没搞清楚那玩意究竟怎么修改配置。
    root01
        5
    root01  
       2022-12-16 09:09:32 +08:00
    @dagouxiong 教程分享一下呢
    dagouxiong
        6
    dagouxiong  
       2022-12-16 10:38:23 +08:00
    @root01 安装 tailscale ,直接去官网用一键脚本,debian 系统很顺利。安装完成之后,假设本机器内网 IP 是 192.168.99.X ,命令
    tailscale up --auth-key=秘钥 --accept-routes --advertise-exit-node --advertise-routes=192.168.99.0/24
    参数说明

    --accept-routes
    允许使用其他机器的子网路由

    --advertise-exit-node
    允许本机器设置为 出口节点

    --advertise-routes=192.168.99.0/24
    设置本机器为子网路由,

    --auth-key=秘钥,秘钥从哪来。授权秘钥 https://login.tailscale.com/admin/settings/keys 菜单路径 Personal-- Settings--Auth keys
    dagouxiong
        7
    dagouxiong  
       2022-12-16 10:40:21 +08:00
    @root01 有需要的话,还要去网页端开启 子网路由 出口节点 功能。可以参考这个博文 https://imnks.com/5554.html
    AlynxZhou
        8
    AlynxZhou  
       2022-12-16 11:40:39 +08:00
    首先问题在于你开了 NetworkManager 为什么要开 dhcpcd ,NetworkManager 本身就是全功能的网络管理,他们之间功能有重复。

    然后我最近恰好研究了一下到底该让谁管 DNS 解析,我的结论是普通用户全都交给 NetworkManager 就可以了,其它的尽量关掉,普通使用也没必要用 systemd-resolved ,除非你真的有什么特殊需求要用它:<https://sh.alynx.one/posts/Who-Moved-My-DNS-Resolving/>
    pagxir
        9
    pagxir  
       2022-12-16 13:00:13 +08:00 via Android
    systemd 跑去管 dns 感觉是最离谱的事情。
    root01
        10
    root01  
       2022-12-16 13:59:36 +08:00
    @dagouxiong 我是说服务端部署的方法,抱歉哈
    dagouxiong
        11
    dagouxiong  
       2022-12-16 14:28:50 +08:00
    @root01 Headscale 私有部署,我没整。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   6048 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:09 · PVG 14:09 · LAX 23:09 · JFK 02:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.