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

2022-12-15 16:36:09 +08:00
 dbg
最近在用 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 的程序,真是不少,看来以后要多注意了。
4520 次点击
所在节点    Linux
11 条回复
dagouxiong
2022-12-15 16:40:04 +08:00
使用 VPS 作为出口( exit node ),怎么实现,1.这个 VPS 开启 exit node 功能,2.其他机器是把网关指向到这个 IP 吗?
dbg
2022-12-15 16:43:10 +08:00
@dagouxiong 使用如下命令
sudo tailscale up --exit-node=<你有 exit node 功能的节点名称或者 IP>
这样就可以把本机流量全部转发给 exit node 处理了,这个功能很方便,还能用来科学上网。
dagouxiong
2022-12-15 16:46:53 +08:00
@dbg 最近我也安装了 tailscale +DERP 服务器,做了异地虚拟组网,确实挺方便的。exit node 功能又看过,还没实验下,我去试试看。
wwbfred
2022-12-15 22:13:02 +08:00
我改 DNS 都是删了 resolv.conf 的软链接,然后直接建立一个文件,写入想用的 DNS 地址。
别的方法都是在搞笑,折腾半天也不好使。尤其是 Ubuntu 自带的那个 systemd-resolved 还是什么玩意,我到现在都没搞清楚那玩意究竟怎么修改配置。
root01
2022-12-16 09:09:32 +08:00
@dagouxiong 教程分享一下呢
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
2022-12-16 10:40:21 +08:00
@root01 有需要的话,还要去网页端开启 子网路由 出口节点 功能。可以参考这个博文 https://imnks.com/5554.html
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
2022-12-16 13:00:13 +08:00
systemd 跑去管 dns 感觉是最离谱的事情。
root01
2022-12-16 13:59:36 +08:00
@dagouxiong 我是说服务端部署的方法,抱歉哈
dagouxiong
2022-12-16 14:28:50 +08:00
@root01 Headscale 私有部署,我没整。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX