VPN DNS设置及resolvectl输出中‘~.’的含义咨询
VPN DNS设置及resolvectl输出中‘~.’的含义咨询
嘿,这个问题问得特别实用!我来给你把resolvectl里这个~.的门道讲明白~
在systemd-resolved(也就是resolvectl背后的DNS服务)的逻辑里,~.是个特殊的DNS搜索域标记,专门用来调整域名查询的优先级和逻辑,尤其在VPN场景下作用很大。
具体来说:
- 平时我们的DNS搜索域,比如
work-vpn.com,作用是当你输入短域名(比如fileserver)时,系统会自动把搜索域拼在后面,变成fileserver.work-vpn.com去查询DNS。 - 但
~.的作用刚好是反过来的——它相当于一个“强制绝对查询”的开关:只要搜索域列表里有~.,所有不带末尾点的短域名,都会被直接当作绝对域名来查询,也就是系统会自动给这个短域名补个末尾的.(比如把github变成github.),不会去拼接任何其他的搜索域。
给你举个VPN场景的真实例子:
假设你的公司VPN推送了corp.yourcompany.com作为搜索域,如果没有~.,当你想访问github时,系统会先跑去查github.corp.yourcompany.com(大概率内网DNS根本不知道这个地址),等查不到了才会去查真正的github.;但有了~.之后,系统会直接跳过拼接内网域的步骤,直接查github.,既不影响你用短域名访问内网服务(比如输入fileserver时,系统还是会按照规则尝试拼接内网域),又能避免外部域名被无效的内网DNS查询拖慢。
简单总结就是:~.是systemd-resolved用来强制非完全限定域名走绝对查询的特殊标记,在VPN环境下能完美平衡内网域名访问和外部域名解析的需求,是个很贴心的小配置。
备注:内容来源于stack exchange,提问作者user279771
相关产品推荐
相关产品推荐

