Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

权威DNS迁移至第三方服务商 #79

Closed
gaoyifan opened this issue Dec 18, 2016 · 14 comments
Closed

权威DNS迁移至第三方服务商 #79

gaoyifan opened this issue Dec 18, 2016 · 14 comments

Comments

@gaoyifan
Copy link
Member

gaoyifan commented Dec 18, 2016

新开个issue用于讨论将权威DNS迁移至第三方服务商~

迁移动机:

  1. 减少DDOS的影响
  2. 更精准的IP库(解析结果更精确)
  3. 其实主要原因还是找不到人维护....

一些服务商:

服务商 DNSSec 国内运营商分域 国内延迟 DDOS 子域名支持
CloudFlare 支持 不支持 延迟较高,普遍在150ms以上 官网未找到具体数据
CloudXNS 不支持 支持 延迟很低 防护峰值10wqps
DNSPod 不支持 支持 延迟很低 防护峰值5wqps

注:对于类似{mirrors,blog,freeshell,lug}.ustc.edu.cn的子域名,cloudflare和dnspod是不支持的。

related issue:
DNS Slave (mirrors) 电信 ACL 问题 #52
权威DNS遭到DDOS攻击 #71

@zhsj
Copy link
Contributor

zhsj commented Dec 18, 2016

@gaoyifan 我前面对比过,国外服务商基本可以忽略,因为即使付费支持geo ip,也没法细分到国内运营商级别。而国内的服务商我是不是很放心,比如遇到ddos直接把服务停掉之类的事情也是时有发生,即使付费也不见得能抗上次那流量(上次观测到的只是因cpu处理包速到达的瓶颈,还不知道能达到多大规模)。。综上,这锅只能自己背

@gaoyifan
Copy link
Member Author

@zhsj 如果服务被停掉,说明这种流量我们自己也扛不住,与停掉其实没太大区别..... 就算增加DNS服务器的配置,也很难抗住大规模的DDOS,何况我们的DDOS防护任然十分初级,与专业服务商相差甚远。

@zhsj
Copy link
Contributor

zhsj commented Dec 18, 2016

@gaoyifan 这个停掉的区别是,要是服务商把你服务停了,再恢复就要发ticket之类的,感觉很麻烦。

@gaoyifan
Copy link
Member Author

@zhsj 有类似先例吗? 似乎CloudXNS只是降低服务SLA,并没有听说要发ticket

@bojieli
Copy link
Member

bojieli commented Dec 18, 2016

@gaoyifan 建议尝试 nsd,一个高性能权威 DNS 服务器
https://www.nlnetlabs.nl/projects/nsd/

用四核 E5 的情况下,nsd 能够跑到 689K requests per second(zone file 仅有一条记录)。当 zone file 有 10K 条记录时,nsd 仍然能够跑到 570K requests per second。而 bind9 每个核只能跑 30K rps,相当于 nsd 的 20%。

老 mirrors 的网卡应该有 8 个 queue,就是可以让 8 个核并行处理,这样性能可达 1.2M rps。事实上这已经超过 1G 网卡的最高速率了。尽管 1G 网卡的理论速率是 1.488 M packet per second,但 DNS 响应包不可能只有 64 字节这么小。DNS 请求包一般比响应包小,因此出带宽是瓶颈。典型的 DNS 响应包 UDP payload 大小为 60~100 字节,对应最大响应包速率为 600K ~ 800K rps。

我们那两天遇到的 DDoS 攻击,其中一台 DNS 服务器的峰值请求速率是 200K rps,用了 nsd 之后应付这个流量的攻击是足够的。而 CloudXNS、DNSPod 免费版本能够防护的攻击流量都没有到 200K rps,也就是再遇到这种攻击,我们的服务可能被暂停。

Azure 里面流量超过 SLA 里指明的服务能力的时候,就会进行限速。如果攻击流量达到一定程度(影响到数据中心运行的程度),就会把这个目标 IP 暂时导入路由黑洞。不过是攻击停止之后自动恢复。

@gaoyifan
Copy link
Member Author

@bojieli 曾经用过nsd,感觉坑也不小..... 其实现在最大的问题就在于没人能填上这个坑......

@bojieli
Copy link
Member

bojieli commented Dec 18, 2016

@gaoyifan 现在 IP 库不准确造成的影响大吗?其实根据 ASN 的信息来分感觉就差不多了,电信、联通、移动、教育网的 ASN 号是互不重叠的。例外是一些小运营商和数据中心,小运营商和数据中心一般要从一个或多个大的接入运营商中选路,精确的 IP 地址库会有帮助,不过默认分到电信问题也不大(我们没有联通出口,广大联通用户现在也是分到电信 IP 的)。

@bojieli
Copy link
Member

bojieli commented Dec 18, 2016

@gaoyifan 如果没人填 DNS 的坑,就让它现在这样跑着呗,Roy Zhang 搞的这套 DNS 也挺稳定的,除了学校断网和遭到 DDoS 以外从未出过问题。

@gaoyifan
Copy link
Member Author

@bojieli IP库不准确的问题我遇到多次,包括新疆电信、安徽合肥电信;另有light用户报告称解析不准确。 不算是件紧急的事情,还是可以凑合用的。
P.S. 广大联通用户实际上匹配的是default view,返回移动IP

迁移服务商是出于防患于未然的动机,如果保持现有状态,那么下次出现DDOS仍然会导致大规模服务失效。IP解析不精确的问题也很难根治。

@bojieli
Copy link
Member

bojieli commented Dec 19, 2016

@gaoyifan 现在的 IP 库是怎么区分不同运营商的呢?把出错的源 IP 到 bgp.he.net 上根据 ASN 查一下,也是错的吗?如果是错的,希望发出来我来看看。(我会去 traceroute 这个 IP 来看网络路径是怎样的)

我忘了权威 DNS 怎么配置的了,应该是教育网走教育网,移动走移动,国内默认走电信,国外走移动吧?

DDoS 这个问题,除非花大价钱,我觉得第三方服务商也没有这么愿意帮我们背锅。如果决定使用某个服务商,建议先自己做个 DDoS 实验,就是把一个试验域名托管上去,然后发起一波 DDoS(我可以帮忙发起 DDoS),看防护效果怎样。

@gaoyifan
Copy link
Member Author

我忘了权威 DNS 怎么配置的了,应该是教育网走教育网,移动走移动,国内默认走电信,国外走移动吧?

ACL:

"UNKNOWN"
"CGWNET"
"CHINAGBN"
"TieTong"
"CSTNET"
"CMCC"
"CHINANET"
"Unicom"
"CERNET"

view(ACL):

Default(any)
ChinaNet(CHINANet)
CMCC(CMCC,CHINAGBN)
CERNET(CERNET, CSTNET)

domain-view:

domain \ view Default ChinaNet CMCC CERNET
lug.ustc.edu.cn. Default ChinaNet CMCC in-view "ChinaNet"
mirrors.ustc.edu.cn. Default ChinaNet in-view "Default"; CERNET
ustclug.org. Default ChinaNet CMCC CERNET
blog.ustc.edu.cn. Default ChinaNet CMCC in-view "ChinaNet"
pxe.ustc.edu.cn. Default in-view "Default" in-view "Default" in-view "Default"
freeshell.ustc.edu.cn. Default ChinaNet CMCC in-view "ChinaNet"
dnamer.net. Default in-view "Default" in-view "Default" in-view "Default"
mirrors1.ustc.edu.cn. Default in-view "Default" in-view "Default" in-view "Default"
mirrors2.ustc.edu.cn. Default in-view "Default" in-view "Default" in-view "Default"
mirrors3.ustc.edu.cn. Default in-view "Default" in-view "Default" in-view "Default"
mirrors4.ustc.edu.cn. Default ChinaNet in-view "Default" CERNET
mirrors6.ustc.edu.cn. Default in-view "Default" in-view "Default" in-view "Default"

现在的 IP 库是怎么区分不同运营商的呢?

@bojieli 我不太清楚现在的IP库是哪来的。得问下 @pudh4418 .

把出错的源 IP 到 bgp.he.net 上根据 ASN 查一下,也是错的吗?如果是错的,希望发出来我来看看。(我会去 traceroute 这个 IP 来看网络路径是怎样的)

新疆电信的IP从bgp.he.net上手工查找AS信息,得到的运营商是正确的,但我们的ACL库中没有对应记录,因此解析到default域中了。目前尚不清楚被遗漏的IP到底有多少。或者有多少错误记录。

DDoS 这个问题,除非花大价钱,我觉得第三方服务商也没有这么愿意帮我们背锅。如果决定使用某个服务商,建议先自己做个 DDoS 实验,就是把一个试验域名托管上去,然后发起一波 DDoS(我可以帮忙发起 DDoS),看防护效果怎样。

赞成DDoS测试! 不过,师兄这是有多少肉鸡啊.......

@bojieli
Copy link
Member

bojieli commented Dec 19, 2016

@gaoyifan 有很多机构提供实时 BGP 数据的。

比如 ftp://archive.routeviews.org/dnszones/ 这是从 U of Oregon, USA 收集的 BGP 信息。其中

  • originas.bz2 是解析成 DNS zone file 格式的 /24 IP 段到 AS 号的映射关系
  • aspath.bz2 是解析成 DNS zone file 格式的 /24 IP 段到 AS 路径(从 U of Oregon 到源 AS)的映射关系
  • rib.bz2 是完整的 BGP 路由表信息。这是 MRT 格式的,可以用 bgpdump(https://labs.ripe.net/Members/yasuhiro_ohara/bgpdump2 )parse 出来

{asn,aspath}.routeviews.org 使用上述的 DNS zone file 提供 IP 到 ASN 映射的查询。比如202.141.160.110,如下可以查到属于 AS 4134,就是中国电信的。

$ dig TXT 110.160.141.202.asn.routeviews.org
;; ANSWER SECTION:
110.160.141.202.asn.routeviews.org. 86395 IN TXT "4134" "202.141.160.0" "20"
$ dig TXT 110.160.141.202.aspath.routeviews.org
;; ANSWER SECTION:
110.160.141.202.aspath.routeviews.org. 86400 IN TXT "47872 6762 4134" "202.141.160.0" "20"

ASN 名字和说明信息表可以从这里下载: http://www.cidr-report.org/as2.0/autnums.html

根据这个 IP 到 Origin ASN 的映射,再用字符串匹配的方法把 ASN 归类到不同的运营商,就可以处理出一个相对准确的 DNS view 表了。

还有机构提供 live BGP update 的 streaming,比如 http://www.bgpmon.io/join-the-peering.html
telnet 这里的 live stream,基本上屏幕是不断刷出 BGP update 的信息的。

由于 BGP 路由表在不断变化,建议每天下载 originas.bz2 更新一次 DNS view。当然如果根据 live BGP update 来 streaming,那就更 fancy 了。

我们做出来的这些东西可以开源,处理出来的数据库公开发布,相信会挺有用的,因为国内大多数人不知道查 BGP 表的方法。

@bojieli
Copy link
Member

bojieli commented Dec 19, 2016

赞成DDoS测试! 不过,师兄这是有多少肉鸡啊.......

我并没有肉鸡,只是会租几台 VPS,用 DNS 反射 open resolver 的方法来 DDoS 权威 DNS。

Open resolver 可以自己用 zmap 扫描(别在学校里扫了,不然 james 又该抱怨了,在 VPS 上扫的时候也注意下发包速率,我被 linode 警告过),也可以从网上下载。

比如下面列表有 40K 左右的 active public resolver。(总的 public resolver 在 15M 个左右,不过其中大多数是不稳定的)
http://public-dns.info/nameservers.txt

@gaoyifan
Copy link
Member Author

新NS:
ns-a.ustclug.org.
ns-b.ustclug.org.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants