Dnsmasq 如何转发客户的请求到上游 DNS

2019-05-11 10:35:32 +08:00
 Liang

背景:公司为了方便开发时测试域名的 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,是带上客户的线路信息的。

4607 次点击
所在节点    程序员
9 条回复
Judoon
2019-05-11 10:47:02 +08:00
不能,简单的 dns 请求是根据请求来源的 ip 直接判断后返回的地址
dnsmasq 服务器只有一个公网出口的话基本上不行了

可以给 dnsmasq 机器配两个运营商的出口,然后识别请求来源,不同的请求来源按照不同的网络分发到上游服务器
不过印象中 dnsmasq 实现不了这么复杂,你需要的可能是 bind
tomczhen
2019-05-11 10:51:56 +08:00
运行两个实例,一个上游 DNS 是电信一个是联通,然后根据不同线路分配。
expy
2019-05-11 10:55:49 +08:00
可以换成 https://github.com/shawn1m/overture
上游 dns 要用支持 EDNS Client Subnet 的,配置里用 auto 会把客服端的 ip 发送给上游 dns。
也支持 hosts 文件。
Judoon
2019-05-11 11:28:46 +08:00
@expy 我觉得单纯这样不行,我猜楼主的分公司请求走的是内网,所以这里的客户端 ip 会是内网 ip,传给上游 dns 没有用吧? 这中间需要自己做一下映射转换
Liang
2019-05-11 11:54:33 +08:00
@Judoon DNS 是公网,分公司请求的也是通过公网的,只不过 DNS 部署在电信,部分业务就返回了电信的线路。内部的 Hosts 没受影响
Judoon
2019-05-11 14:41:24 +08:00
@Liang 既然如此为啥不直接在你的 DNS 服务商配置你的 ip,比如阿里云或者 dnspod
然后全部走公网
ipwx
2019-05-11 15:12:18 +08:00
用 iptables 控制内网走哪个 dns。

@Judoon
Liang
2019-05-11 15:51:50 +08:00
@expy
@Judoon

感谢,用 shawn1m/overture 实现了。上游支持 EDNS 就可以了
NUT
2019-05-11 18:04:31 +08:00
直接使用 CoreDNS 配置简单,插件强大。

还可以根据 Etcd 上面的数据进行动态解析。

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

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

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

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

© 2021 V2EX