背景:公司为了方便开发时测试域名的 Hosts,用 Dnsmasq 搭建了一个 DNS,线路是电信。
因为有些分公司使用的是联通网络。部分正式的 CDN 业务,公司 DNS 递归上游 DNS 查询出来的返回了电信的线路,导致跨线路体验很慢。
假设公司 DNS 是 1.2.3.4,上游 DNS 是 114.114.114.114
联通线路的客户端测过结果是这样的:
# nslookup www.163.com 114.114.114
Address: 11.11.11.11 (联通线路)
# nslookup www.163.com 1.2.3.4
Address: 22.22.22.22 (电信线路)
请问 Dnsmasq 如何转发客户的请求到上游 DNS,是带上客户的线路信息的。
1
Judoon 2019-05-11 10:47:02 +08:00 1
不能,简单的 dns 请求是根据请求来源的 ip 直接判断后返回的地址
dnsmasq 服务器只有一个公网出口的话基本上不行了 可以给 dnsmasq 机器配两个运营商的出口,然后识别请求来源,不同的请求来源按照不同的网络分发到上游服务器 不过印象中 dnsmasq 实现不了这么复杂,你需要的可能是 bind |
2
tomczhen 2019-05-11 10:51:56 +08:00 via Android 1
运行两个实例,一个上游 DNS 是电信一个是联通,然后根据不同线路分配。
|
3
expy 2019-05-11 10:55:49 +08:00 1
可以换成 https://github.com/shawn1m/overture
上游 dns 要用支持 EDNS Client Subnet 的,配置里用 auto 会把客服端的 ip 发送给上游 dns。 也支持 hosts 文件。 |
4
Judoon 2019-05-11 11:28:46 +08:00
@expy 我觉得单纯这样不行,我猜楼主的分公司请求走的是内网,所以这里的客户端 ip 会是内网 ip,传给上游 dns 没有用吧? 这中间需要自己做一下映射转换
|
5
Liang OP @Judoon DNS 是公网,分公司请求的也是通过公网的,只不过 DNS 部署在电信,部分业务就返回了电信的线路。内部的 Hosts 没受影响
|
9
NUT 2019-05-11 18:04:31 +08:00
直接使用 CoreDNS 配置简单,插件强大。
还可以根据 Etcd 上面的数据进行动态解析。 |