KCheshireCat
V2EX  ›  DNS

dnspod-httpdns-proxy 一个小轮子,解决 DNS 污染和解析优化问题。

  •  1
     
  •   KCheshireCat · Mar 25, 2017 · 12094 views
    This topic created in 3517 days ago, the information mentioned may be changed or developed.

    https://github.com/KCCat/dnspod-httpdns-proxy

    大家好,这次我带来一个新的小轮子,功能:

    • 把本地 DNS 请求转发到 dnspod 的 httpdns 并带上本地 IP ,来保证不会失去本地运营商解析优化。
    • 同时提供解析结果过滤,把不在期望范围内的解析丢弃来达到类似加权解析的效果。

    这个轮子的使用环境,我举个栗子:
    本地使用 DNSMASQ 作为 DNS 查询基础,
    用 vps 转发或者其他手段我能得到干净的查询结果,通常来说跳板解析掩饰很长,
    用这个轮子可以得到本地优化,
    在 DNSMASQ 上设置all-servers之后, DNSMASQ 会对所有上游服务器查询,谁先到用谁的结果。
    这时候在这个轮子里设置只返回自己宽带运营商 IP 这样就得到了本地优化结果。

    这个小轮子是在 python3.6 上写的,在 3.5 上运行通过,不保证向下兼容, linux , win 都可以运行,设计使用环境如上面的栗子。

    22 replies  •  2017-08-05 14:04:59 +08:00
    taowen
    taowen
    Mar 25, 2017
    1
    造轮子不易,支持一下
    wwqgtxx
    wwqgtxx
    Mar 25, 2017 via iPhone
    2
    默默地问一下,这个轮子是怎么能获得自己真正的 ip 呢
    KCheshireCat
    KCheshireCat
    OP
    Mar 25, 2017 via iPhone
    3
    @wwqgtxx 自己填本地区运营商的一个公网 ip 就好…… dns 解析优化也没分那么细
    qcloud
    qcloud
    Mar 25, 2017 via iPhone
    4
    防劫持吗?
    KCheshireCat
    KCheshireCat
    OP
    Mar 25, 2017 via iPhone
    5
    @qcloud 上游走 dnspod 的 httpdns 查询,不是 dns 包
    whx20202
    whx20202
    Mar 25, 2017
    6
    已 Star ,请教一下几个问题:
    1. dnspod 里面的 DNS 都是无污染的吧? 我的意思是如果用 httpdns 去请求 youtube ,他会给你正确的 IP 吗?
    2. 如果请求国内普通网站,比如 www.baidu.com 什么的, httpDNS 和 udp DNS 时延您这边感觉有多大区别?
    johnjiang85
    johnjiang85
    Mar 25, 2017❤️1
    7
    @whx20202
    1. 这个做到的话很简单,但是向外公开提供服务,有些事情是不能做的,所以还是有问题的
    2. 我们的 httpDNS 的全国所有地区所有运营商的平局数据, ping 延时是平均 35ms , httpdns 平均延时是 200ms ,比 udp 肯定是要慢的,不过主要还是慢在非本地覆盖上,北上广周边还是很快的
    whx20202
    whx20202
    Mar 25, 2017
    8
    @johnjiang85 能理解国家政策方面的要求,但是目前如果我真的请求了被墙的那种域名,您那边也好,友商也好都是怎么处理的? 是直接超时还是返回一个错的?
    KCheshireCat
    KCheshireCat
    OP
    Mar 25, 2017
    9
    @whx20202 #6
    httpdns 请求 google 之类的是有污染的
    我写这个轮子原因就是 AliDNS 在我这边用 udp 请求各种被移动的劫持,
    而用 TCP 请求丢包率 96%,可能是被针对性劣化了。
    请求国内站点比 udp 是要慢的,但也就是数值上差距,感觉不到。
    HalloCQ
    HalloCQ
    Mar 25, 2017
    10
    可以理解为跟 @lbp0200 这个兄弟的 PRCDNS 一样的效果吗? PRCDNS 可以防被墙的污染哦
    HalloCQ
    HalloCQ
    Mar 25, 2017
    11
    你这个对国内的 CDN 应该比 prcdns 要好,不过你这个要手动填 ip 吗?如果能自动获取就好了
    KCheshireCat
    KCheshireCat
    OP
    Mar 25, 2017
    12
    @HalloCQ #11
    我这个轮子是方便使用 dnspod httpsdns 服务来得到本地 CDN 解析优化的。
    能防止运营商的污染,不能防止墙的污染。

    手动填是因为移动流量穿透很厉害,一穿,网络解析的 IP 就不准了,不如手动填一个准的。
    johnjiang85
    johnjiang85
    Mar 25, 2017
    13
    @whx20202 一般就是不处理,墙返回什么就按照什么返回。
    johnjiang85
    johnjiang85
    Mar 25, 2017
    14
    @KCheshireCat 手工填上 IP 参数确实会比直接请求更准确,不会被运营商的 NAT 影响。
    johnjiang85
    johnjiang85
    Mar 25, 2017
    15
    @whx20202 另外就是延迟这里,我们一般会要求本地进行一定时间的缓存,并在缓存快过期时提前进行预取来抵消 httpdns 比 udp 延迟高的影响。这样做之后只有在第一次请求和网路类型切换强制刷新缓存时延时会高一些,但偶尔高的这接近 200ms 延时一般感知不明显。
    gwind
    gwind
    Mar 28, 2017
    16
    支持!
    前段时间污染严重,正要思考 golang 实现一下 UDP port 映射,这样就可以支持所有基于 UDP 的协议。不过不同于 TCP , UDP 的断开不好判断。还未完成。
    firefox12
    firefox12
    Apr 8, 2017 via iPhone
    17
    用 dnspod 可以获得国外域名正确 ip ?
    KCheshireCat
    KCheshireCat
    OP
    Apr 9, 2017
    18
    @firefox12 #17
    这个不是为了获得国外的干净解析,而是在你有办法获得干净解析的情况下,帮助你获得本地 CDN 优化。

    关于 dnspod 本身解析的问题,看 johnjiang85 的回复就行。
    firefox12
    firefox12
    Apr 9, 2017 via iPhone
    19
    如果不能解析 google 这样的域名,那这东西的作用在那里?帮助我们获得 dnspod 对域名的智能解析?和我直接用 dnspod 有什么区别?我们使用 dnspod 存在被劫持的现象?
    KCheshireCat
    KCheshireCat
    OP
    Apr 10, 2017
    20
    @firefox12 #19

    至少我这里所有的标准端口 DNS 都存在劫持现象,
    而且,移动还有流量穿透,就算请求没有被劫持,很有可能 DNS 看到你的请求时,因为穿透的关系,源 IP 变成了电信,联通,而不是本来的移动 IP 。甚至有可能 IP 的地区都不对。
    DNS 想给你正确的优化也做不到啊。
    bclerdx
    bclerdx
    May 20, 2017 via Android
    21
    具体怎么使用啊,看不懂!
    gdtv
    gdtv
    Aug 5, 2017
    22
    具体怎么使用啊,看不懂!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 22:22 · PVG 06:22 · LAX 14:22 · JFK 17:22
    ♥ Do have faith in what you're doing.