关于/etc/systemd/resolved.conf中DNS=设置里man手册格式address#server_name的含义问询
关于/etc/systemd/resolved.conf中DNS=设置里man手册格式address#server_name的含义问询
嘿,我来帮你把这个点掰扯清楚——systemd-resolved里DNS=配置项的address#server_name格式,其实是专门为DNS Over TLS(DoT)场景设计的,man手册的表述确实有点太简洁,容易让人摸不着头脑。
先直接给你答案:你理解的DNS=Server_IP#FQDN是完全正确的,比如你举的DNS=123.456.78.9#www.example.com(不过这里建议用DNS服务器专属的FQDN,比如dns.example.com会更合理,只要和你Unbound服务器证书里的域名一致就行)。
接下来拆解这个格式里每个部分的作用:
address:就是你Unbound DNS服务器的公网IP地址,直接指定IP是为了避免“先解析DNS服务器域名才能用DoT”的死循环问题。#:纯粹是分隔符,用来把IP地址和后面的服务器域名明确分开,让systemd-resolved能准确识别两个字段。server_name:这是DoT安全验证的核心——当开启DNSOverTLS=yes时,systemd-resolved会向指定IP发起TLS连接,然后检查服务器返回的SSL证书里的域名是否和这个server_name完全匹配,以此确认你连接的是真正属于你的Unbound服务器,而不是被篡改的伪装节点。
给你补充几个关键注意点:
- 如果只写IP不跟
#server_name,开启DoT后大概率会失败,因为systemd-resolved会尝试用IP地址去验证证书,但几乎没有DNS服务器会把IP绑定到SSL证书里。 - 如果只写FQDN不写IP,systemd-resolved会先用普通未加密的DNS去解析这个FQDN,完全失去了DoT的意义,所以必须用
IP#FQDN的格式。
举个符合规范的配置例子,假设你的Unbound服务器IP是123.456.78.9,FQDN是dns.example.com,那你的/etc/systemd/resolved.conf应该这么写:
[Resolve] DNS=123.456.78.9#dns.example.com DNSOverTLS=yes # 其他配置项按需添加
备注:内容来源于stack exchange,提问作者DanRan
相关产品推荐
相关产品推荐

