基于 4 个 8 撸了一个 CDN 友好的 DNS

2017-01-24 18:32:41 +08:00
 lbp0200

https://github.com/lbp0200/PRCDNS

  1. 只支持 TCP ,防止二级运营商搞事
  2. CDN 友好, img.alicdn.com 返回大陆地址

拿 opendns 做测试对比

dig @23.106.151.177 +tcp -p 3535 google.com.hk #PRCDNS
dig @208.67.222.222 +tcp -p 443 google.com.hk #opendns

dig @23.106.151.177 +tcp -p 3535 img.alicdn.com #PRCDNS
dig @208.67.222.222 +tcp -p 443 img.alicdn.com #opendns

测试 IP 仅供测试, DDoS 留情

14989 次点击
所在节点    DNS
75 条回复
lbp0200
2017-02-11 17:16:42 +08:00
@q0000x 也可以放到后台运行
q0000x
2017-02-11 19:45:35 +08:00
@lbp0200 如何操作?
q0000x
2017-02-11 20:47:26 +08:00
@lbp0200 搞定了
matsuz
2017-02-12 09:06:57 +08:00
这个如果放在本地路由器上的话应该是没办法做到 CDN 友好的吧。

Google Public DNS 是通过用户的 ip 来实现 cdn 友好的,如果部署在本地的话,你的 ip 是一个内网 ip , google 是没法对一个内网 ip 进行 cdn 优化的。

我也写过一个这种程序,不过是用 Java 写的。依我之见,必须得找个 vps 部署到服务器上。
lbp0200
2017-02-12 10:03:36 +08:00
@matsuz 先通过 http://ipinfo.io/的接口拿到本地公网 ip ,然后把本地公网 IP 作为参数传给 Google 的 DNS 接口,所以部署在本地是可以的。
matsuz
2017-02-12 10:15:49 +08:00
@lbp0200 如果是这样的话倒是可以
q0000x
2017-02-13 15:24:55 +08:00
@lbp0200 默认是把访问 IP 当作参数给传递了吗?今天发现有些解析不对,会解到它网的 IP ,本网 DNS 解析正常
lbp0200
2017-02-13 17:19:16 +08:00
@q0000x https://dns.google.com/resolve?name=域名&edns_client_subnet=你的公网 ip/24
访问 Google 的接口,直接看 Google 给的结果。
我在使用中发现 china.com 的解析有问题,所以在 pdnsd 里,添加 114 做补充,不过无所谓了,我不看中华网。
titanium98118
2017-02-14 13:20:52 +08:00
在 PRCDNS 可以手动指定一个 EDNS IP 吗?
lbp0200
2017-02-15 13:09:52 +08:00
没有这个功能
lbp0200
2017-02-15 13:10:11 +08:00
@titanium98118 没有这个功能
HalloCQ
2017-02-17 18:01:11 +08:00
[root@localhost ~]# python PRCDNS
python: can't open file 'PRCDNS': [Errno 2] No such file or directory
怎么回事啊?
q0000x
2017-02-18 12:33:22 +08:00
@HalloCQ 直接 PRCDNS &就可以了
HalloCQ
2017-02-18 22:27:54 +08:00
[root@localhost ~]# PRCDNS &
[1] 15402
[root@localhost ~]# -bash: PRCDNS: command not found

[1]+ Exit 127 PRCDNS
[root@localhost ~]# PRCDNS
-bash: PRCDNS: command not found

@q0000x
HalloCQ
2017-02-18 22:29:32 +08:00
@q0000x
[root@localhost ~]# pip install PRCDNS
Requirement already satisfied: PRCDNS in /usr/local/python3/lib/python3.5/site-packages
Requirement already satisfied: asyncio in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: aiohttp in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: aiodns in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: cchardet in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: dnslib in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: argparse in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: IPy in /usr/local/python3/lib/python3.5/site-packages (from PRCDNS)
Requirement already satisfied: yarl<0.10,>=0.9.8 in /usr/local/python3/lib/python3.5/site-packages (from aiohttp->PRCDNS)
Requirement already satisfied: multidict>=2.1.4 in /usr/local/python3/lib/python3.5/site-packages (from aiohttp->PRCDNS)
Requirement already satisfied: async-timeout>=1.1.0 in /usr/local/python3/lib/python3.5/site-packages (from aiohttp->PRCDNS)
Requirement already satisfied: chardet in /usr/local/python3/lib/python3.5/site-packages (from aiohttp->PRCDNS)
Requirement already satisfied: pycares>=1.0.0 in /usr/local/python3/lib/python3.5/site-packages (from aiodns->PRCDNS)
[root@localhost ~]# PRCDNS
-bash: PRCDNS: command not found
q0000x
2017-02-19 00:01:59 +08:00
@HalloCQ 系统默认的 python 是 2.7 的,你要给换成 3.5 以上的版本
q0000x
2017-02-19 00:03:28 +08:00
@lbp0200 突然发现一个问题, fast.com 测速的时候会报错,你开着 vps 然后上 fast.com 试试看
HalloCQ
2017-02-19 08:28:17 +08:00
可以了
lbp0200
2017-02-20 14:25:30 +08:00
@q0000x 结果看起来貌似是对的

dig @23.106.151.177 +tcp -p 3535 fast.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @23.106.151.177 +tcp -p 3535 fast.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50980
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;fast.com. IN A

;; ANSWER SECTION:
fast.com. 19 IN A 23.48.253.70

;; Query time: 398 msec
;; SERVER: 23.106.151.177#3535(23.106.151.177)
;; WHEN: Mon Feb 20 14:24:47 CST 2017
;; MSG SIZE rcvd: 42
HalloCQ
2017-02-23 23:09:41 +08:00
@lbp0200 centos 怎么安装 polipo 啊?

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

https://tanronggui.xyz/t/336726

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

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

© 2021 V2EX