ShunYea
V2EX  ›  DNS

请教如何能自己建立一个私有的 DNS 服务器呢?

  •  5
     
  •   ShunYea · May 9, 2014 · 71842 views
    This topic created in 4564 days ago, the information mentioned may be changed or developed.
    如题,就像v2ex一样,建立一个:199.91.73.222或者178.79.131.110这样用途的DNS服务器?网上搜了一下,要么讲如何建立自己的域名解析服务器,要么是私网的。
    我想自己建立一个自用,这几天国内大环境特殊,用运营商包括114等的DNS都无法访问app store和itunes.apple.com域名,均提示“错误,您所请求的网址(URL)无法获取”,换成4个8或者一些小众DNS就正常,但是众所周知的原因4个8不好用,经常性丢包,路由不对反而访问更慢,而小众DNS怕不安全,怕信息泄漏。
    所以想到自己建立一个,不知道私人能不能做?要求就是解析大众网站要跟114等一样的高效,不说访问facebooke等能访问,但是最起码之前正常的app store能用。
    请教能不能自己实现?
    Supplement 1  ·  May 10, 2014
    谢谢各位,已经自建好一台服务器开始运行了,目前基本功能实现了,正在不断完善/etc/dnsmasq.conf
    93 replies  •  2016-09-17 23:16:12 +08:00
    heiher
    heiher
    May 9, 2014
    1
    有国外的服务器,装个 dnsmasq 跑都服务就行了。
    LazyZhu
    LazyZhu
    May 9, 2014
    2
    你要的其实是递归DNS服务器,推荐使用MaraDNS
    ShunYea
    ShunYea
    OP
    May 9, 2014
    3
    @heiher 我国内有服务器的,也有独立IP。求教程。
    ShunYea
    ShunYea
    OP
    May 9, 2014
    4
    @LazyZhu 反正我要的就是建立个类似4个8这样的服务器,然后配置到我的网卡上就自己用。
    Shieffan
    Shieffan
    May 9, 2014
    6
    楼上都说啦,就是dnsmasq。

    dnsmasq.conf里可以配置server=208.67.220.220#5353,然后就能避免dns污染了。
    或者iptables过滤掉那几个投毒ip
    ShunYea
    ShunYea
    OP
    May 9, 2014
    7
    @LazyZhu
    @Shieffan
    谢谢,我研究下这个东东。
    dianso
    dianso
    May 9, 2014
    8
    bind dns就是一套完整的解决方案
    ShunYea
    ShunYea
    OP
    May 9, 2014 via Android
    9
    @Shieffan 再请教下,我怎么知道那些是污染的IP呢?你这个写法:server=208.67.220.220#5353就是屏蔽这个污染IP的意思吧?
    Shieffan
    Shieffan
    May 9, 2014 via iPhone❤️1
    10
    @ShunYea 这个表示你的上游递归服务器地址,这里写的是opendns,gfw目前只监听53端口的请求,所以如果你向上游的5353端口请求解析,就能逃过gfw的dns污染。

    投毒ip表 http://zh.wikipedia.org/zh-cn/%E5%9F%9F%E5%90%8D%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BC%93%E5%AD%98%E6%B1%A1%E6%9F%93

    可以用iptables过滤,自己google吧
    ShunYea
    ShunYea
    OP
    May 9, 2014
    11
    @Shieffan 上游的5353端口,话说上游的服务器有开放这个5353端口吗?例如4个8
    ShunYea
    ShunYea
    OP
    May 9, 2014
    12
    @dianso 这个好像更加复杂一点吧。我看dnsmasq确实更简单。谢谢。
    Shieffan
    Shieffan
    May 9, 2014 via iPhone
    13
    @ShunYea 开放不开放你用nmap看看不就知道了。
    sandtears
    sandtears
    May 9, 2014
    14
    直接加密转发 Open-dns 的就是了,具体工具自己查,就是 DNS 解析慢点。
    leavic
    leavic
    May 9, 2014
    15
    我又要来推AutoDDVPN了,其中提到很重要的一点是,DNS服务器的访问也要走VPN,不是说你用8.8.8.8解析的就是对的,不走VPN,用哪家的DNS都有可能被污染,不信你挂VPN和不挂VPN用同样的DNS解析twitter试试
    mywaiting
    mywaiting
    May 9, 2014
    17
    要是在自己的电脑上,装个 DNSCrypt 本地DNS设置成 127.0.0.1 不用自建DNS server这么麻烦吧

    什么缓存污染直接忽视吧,DNS query都提交到OpenDNS去解析了~
    ShunYea
    ShunYea
    OP
    May 10, 2014
    18
    谢谢各位,已经自建好一台服务器开始运行了,目前基本功能实现了,正在不断完善/etc/dnsmasq.conf
    ShunYea
    ShunYea
    OP
    May 10, 2014
    19
    @mywaiting 我是要在家里设置到路由器上用,然后多个设备就正常运行了,包括我办公室电脑等都可以共享了。每台都装的方式不方便,而且安卓、苹果等还不通用。所以自建DNS服务器是最佳方案。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    20
    @phuslu 谢谢,只是新手看不懂怎么用,呵呵。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    21
    @Shieffan 具体命令是什么呢?我现在上游设置的4个8,这个是否有开放5353呢?感觉国外的DNS就4个8做的好点,其他感觉CDN路由解析会无法判断,反而访问国内网站会更慢。很久以前感觉4个8在国内有镜像一样,ping值只在50ms左右,现在都是180ms以上了,感觉又移除国内了?
    ShunYea
    ShunYea
    OP
    May 10, 2014
    22
    @sandtears 我还是想搞简单点,自建DNS方便多个设备共享。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    23
    @leavic 这个方法还需要有VPN帐号,算了,成本高,还是我自己自建服务器比较好。
    phuslu
    phuslu
    May 10, 2014
    24
    @ShunYea 这个是使用国内外 dns 多路解析的,速度快,cdn 友好。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    25
    @phuslu 谢谢,那我要怎么利用呢?我看这是个脚本嘛。
    streamgo
    streamgo
    May 10, 2014
    26
    @ShunYea 可否共享一下具体的方法和教程吗?
    slixurd
    slixurd
    May 10, 2014
    27
    检测端口有没有开放自己nmap一下就完了
    slixurd@slixurd-pc:~$ nmap -v -Pn -p 5353 8.8.8.8

    Starting Nmap 6.40 ( http://nmap.org ) at 2014-05-10 00:29 CST
    Initiating Parallel DNS resolution of 1 host. at 00:29
    Completed Parallel DNS resolution of 1 host. at 00:29, 0.00s elapsed
    Initiating Connect Scan at 00:29
    Scanning google-public-dns-a.google.com (8.8.8.8) [1 port]
    Completed Connect Scan at 00:29, 2.00s elapsed (1 total ports)
    Nmap scan report for google-public-dns-a.google.com (8.8.8.8)
    Host is up.
    PORT STATE SERVICE
    5353/tcp filtered mdns
    GPU
    GPU
    May 10, 2014
    28
    @leavic 你说的这个 。有木有详细文档呢? openwrt支持否?
    GPU
    GPU
    May 10, 2014
    29
    搞一台国外服务器A 查询4个8 的dns 记录 。然后一台国内的去获取服务器A的记录 。这样效率会不会很低呢?
    tywtyw2002
    tywtyw2002
    May 10, 2014
    30
    dns没啥难度

    比如bind,先搞个acl只允许自己想要的ip访问。然后把请求forward刀8.8.8.8里面留好了。

    国内的话起个ipsec隧道到国外。
    phyng
    phyng
    May 10, 2014
    31
    @phuslu 应该是在Goagent里面的配置文件里面打开:
    [dns]
    enable = 1
    listen = 127.0.0.1:53
    yanwen
    yanwen
    May 10, 2014
    32
    @ShunYea 完善了之后 分享一下搭建心得?
    leavic
    leavic
    May 10, 2014 via iPad
    33
    @GPU 搜一下 autoddvpn和autoddvpn for openwrt就有了,iPad上不方便找链接粘贴过来。本质就是通过VPN连接和断开时间触发路由器上的脚本,添加路由表让被封的IP和DNS走VPN。
    JoeyChan
    JoeyChan
    May 10, 2014
    34
    unbound转发就可以了,简单,有国外服务器的话可以用国外服务器转发,没有的话用openwrt路由+unbound转发8.8.8.8的tcp解析也可以。
    sandtears
    sandtears
    May 10, 2014
    35
    @ShunYea 可以啊,一台设备配置好转发之后将53端口监听在 0.0.0.0 上,其他设备的 DNS 写那台设备的 IP 地址就好。
    至于简单的问题——难道下一个软件你觉得麻烦,而装 bind 再配置一大堆才不觉得麻烦?
    princeofwales
    princeofwales
    May 10, 2014
    36
    原来我刷的tomato路由器,里面自带dnsmasq,不过没配置成功

    将pppoe的DNS直接改成opendns5353,都OK了
    但家里还有人只上国内网站,看国内视频,路由器上改了DNS,对CDN不友好
    虽然dnsmasq里配置了部分域名直接国内DNS,但这种需手工维护的列表,很累,很麻烦

    算了,又改回SS了
    ShunYea
    ShunYea
    OP
    May 10, 2014
    37
    @slixurd 我这样添加了后,直接不工作了。解析不了域名了:
    server=8.8.8.8#5353
    server=8.8.4.4#5353
    ShunYea
    ShunYea
    OP
    May 10, 2014
    38
    @streamgo
    @yanwen
    我目前是参照这个教程来的: http://www.myhack58.com/Article/54/93/2014/43249.htm
    基本做法也就这样,还不会高级命令,正在研究,还有他那个不同域名不同DNS解析的表还得考虑怎么完善才最佳。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    39
    @GPU 感觉这个dnsmasq是个缓存,不是每次都先到自建DNS又到上游DNS查。查过一次后就缓存到自建DNS,下次就直接调用了,然后是定期再去上游读回最新的DNS,所以不应该很慢,首次可能慢点。
    不知道我理解对不对,高手请指点。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    40
    @Shieffan 你的意思就是,我的电脑先到自建DNS是靠53端口,然后自建DNS到上游比如4个8就转成5353端口,就跳过了gfw,然后返回的就是正确的IP,然后就可以上了?就这么简单?

    PS:能给几个上游可靠DNS和可用端口吗?刚才使用server=8.8.8.8#5353直接无法解析了。新手懂的命令不是很多,你执行的这个结果我也看不懂,哪里提示可用哪里提示不可用。谢谢。
    ShunYea
    ShunYea
    OP
    May 10, 2014
    41
    @princeofwales 嗯,就是这个手工列表麻烦。我参照这个弄了几个简单站点。http://www.myhack58.com/Article/54/93/2014/43249.htm
    GPU
    GPU
    May 10, 2014
    42
    @ShunYea 4个8 是没有开启5353端口的
    AntiGameZ
    AntiGameZ
    May 10, 2014
    43
    最傻瓜的我觉得就是PowerDNS REcursor了
    ShunYea
    ShunYea
    OP
    May 10, 2014
    44
    @GPU 怪不得,我说怎么无法解析,4个8有哪个端口可用呢?
    ShunYea
    ShunYea
    OP
    May 10, 2014
    45
    @GPU 但是为什么我找到一些教程直接就写有让用4个8的5353呢?
    http://huxos.me/2013/01/18/fuck-unicom-dns-ad/
    ShunYea
    ShunYea
    OP
    May 10, 2014
    46
    @slixurd
    搞半天是不是直接不能用5353端口?得装个@JoeyChan 说的unbound来转发?参照这个?https://www.cokebar.info/archives/246
    GPU
    GPU
    May 10, 2014
    47
    @ShunYea 反正我扫端口说了过滤了。
    ShunYea
    ShunYea
    OP
    May 10, 2014❤️1
    48
    @GPU 好的,我换成opendns了。
    Shieffan
    Shieffan
    May 10, 2014
    49
    @ShunYea opendns支持5353,而且掉包很低,8.8.8.8在我这儿包括阿里云上掉包掉的基本是没法用,被GFW照顾地不轻。

    opendns跟四个8一样都支持edns,所以国内支持edns的cdn服务商能很好地适用。

    如果你要使用其它国外dns的话,你也可以使用如下命令过滤掉墙的伪造响应包:
    iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x5d2e0859,0xcb620741,0x0807c62d,0x4e10310f,0x2e52ae44,0xf3b9bb27,0xf3b9bb1e,0x9f6a794b,0x253d369e,0x9f1803ad" -j DROP
    iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x3b1803ad" -j DROP
    GPU
    GPU
    May 10, 2014
    50
    @ShunYea 嗯 。对于你不是直接用opendns 。区别是不大的。
    princeofwales
    princeofwales
    May 10, 2014 via Android
    51
    @Shieffan 我只知道,用了opendns后,访问QQ,给了我北京网通的IP,而我用的是深圳电信啊
    Shieffan
    Shieffan
    May 10, 2014 via iPhone
    52
    说了这要取决于CDN服务商是否支持edns,据我的测试,网宿,蓝汛,阿里云等一些比较大的CDN提供商是支持edns的,你可以dig一下七牛自己阿里云等的cdn。而腾讯,新浪这些主要服务于自己公司的自建CDN是否支持edns就看厂商心情了。
    wanghui
    wanghui
    May 10, 2014
    53
    搭车问一下,想把大量域名(数万)在本机被解析为127.0.0.1,应该怎么做比较有效?可以让dns解析去调用某个脚本判断是否绑定到本机吗?
    Shieffan
    Shieffan
    May 11, 2014 via iPhone
    54
    @wanghui 如果没有特殊情况的话,写在hosts里不就行了么
    zjgood
    zjgood
    May 11, 2014 via Android
    55
    @Shieffan 搭车问下,我可以把某些pac里的国内网站域名全部添加到dnsmasq的配置里,用114来解析,这样来实现国内外分流,可行吗?
    Shieffan
    Shieffan
    May 11, 2014 via iPhone
    56
    @zjgood 可以的,dnsmasq.conf里可以配置针对不同域名使用不同的上游dns服务器,你甚至可以配置对所有cn域名指定上游dns服务器。具体你可以搜索或者看下dnsmasq的文档。
    librehat
    librehat
    May 11, 2014
    57
    还有更加轻量级的unbound,上游tcp查询就能解决DNS污染了。弄大一点缓存,多个线程,就足以应对大量的DNS请求了。
    ShunYea
    ShunYea
    OP
    May 11, 2014
    58
    @Shieffan 我已经将4个8换opendns了。谢谢,你说阿里的DNS被照顾的不轻,我反倒觉得114也被照顾得不轻。现在国内不知道还有哪个DNS靠谱点,前几天发现个DNS派,不知道靠谱吗?感觉还没怎么照顾过。
    ShunYea
    ShunYea
    OP
    May 11, 2014
    59
    @zjgood 我觉得是可以的。
    ShunYea
    ShunYea
    OP
    May 11, 2014
    60
    @librehat 这个unbound我看过下,就是做端口转发用的吧?
    librehat
    librehat
    May 11, 2014
    61
    @ShunYea 可以做DNS服务器的,我就在NAS上用unbound作为本地DNS解析服务器来解决DNS污染
    zjgood
    zjgood
    May 11, 2014 via Android
    62
    @ShunYea 我已经弄好了,国内域名交给114,其余全部走opendns#5353,你可以试试我的dns,地址是t.izj.pw的ip,第二个你设成8.8.8.8吧~
    Shieffan
    Shieffan
    May 11, 2014 via iPhone
    63
    我这里用114dns访问京东经常会出现http会话劫持跳转到返利链接,dig后发现访问的是京东位于江苏机房的cdn服务器,初步怀疑是江苏某路由节点上存在会话监听劫持。
    ShunYea
    ShunYea
    OP
    May 11, 2014
    64
    @zjgood 我跟你反着来,重点指定几个域名走opendns,其余均走国内DNS,否则你那个方式,大部分域名得手动指定来走114,太累了。管少不管多。
    anyfc
    anyfc
    May 24, 2014
    65
    @ShunYea 请问你搭建的dns是在路由器上还是vps上?
    @zjgood 我也想搭建dns在我的vps上,请问是否有详细教程? 我在vps上安装了dnsmasq,按照下面的格式设置了
    no-resolv
    no-poll
    server=114.114.114.114
    server=114.114.115.115
    server=/google.com/8.8.8.8
    server=/youtube.com/8.8.8.8


    在重启了dnsmasq后,电脑上设置了vps的ip作dns,发现上不了网。。。请问是哪里没有设置后?
    zjgood
    zjgood
    May 24, 2014 via Android
    66
    @anyfc 你确定你的vps不是azure?azure的话还需要去开放UDP 53端口。另外你使用114.114.114.114还有什么必要搭建dns呢。。
    zjgood
    zjgood
    May 24, 2014 via Android
    67
    @anyfc 试试 onedns
    anyfc
    anyfc
    May 24, 2014
    68
    @zjgood 呃~我的vps 是debian 7.0 刚刚安装好dnsmasq的时候,服务商发邮件说帮我关了udp 53端口,但是我已经手动开启了呀。。。大部分解析用114,部分指定域名用4个8或者其他干净的dns,我是这么想的。。
    ShunYea
    ShunYea
    OP
    May 25, 2014
    69
    @anyfc 我是搭建在VPS上,自己国内的机房。
    ShunYea
    ShunYea
    OP
    May 25, 2014
    70
    @anyfc 我也是你这个思路来搭建的
    anyfc
    anyfc
    May 26, 2014
    71
    @ShunYea 后来在听说是服务商为防止ddos攻击,吧这个功能给禁了。。。
    算了,另想办法了。。现在也只是搭在openwrt上给自己用。。
    btw,你用的是哪个的vps,价格怎么样?
    ShunYea
    ShunYea
    OP
    May 29, 2014 via Android
    72
    @anyfc 我是自己的vps,机房在国内。
    lovehigh
    lovehigh
    Jun 28, 2014
    73
    @zjgood 你好,我新手第一次折腾这个。我买了个RamNode的西雅图线路,我网上查了下教程,目前我是在dnsmasq.conf里添加server=opendns的两个地址。然后启用dnsmasq.d,将felixonmars维护的dnsmasq list放到该文件夹下,然后将电脑上的dns改成Ramnode分配给我的IP就可以了?另外我server=opendns那里需不需要添加#5353?
    zjgood
    zjgood
    Jun 28, 2014 via Android❤️1
    74
    @lovehigh 需要5353,然后就可以了
    lovehigh
    lovehigh
    Jun 28, 2014
    75
    @zjgood 好的,多谢。另外请问下如何能够做到国内域名都走114,自己慢慢维护这个列表?
    tvvocold
    tvvocold
    Dec 11, 2014
    76
    http://maxexcloo.github.io/DNS-Tunnel/
    user设置为自己的ip,只给自己用(不要建在digitalocean上,会被封)
    zygotee
    zygotee
    Mar 15, 2015
    77
    @ShunYea 请问版主最后用了哪种方式在vps上搭好了dns服务器,能分享下吗?谢谢
    ShunYea
    ShunYea
    OP
    Apr 3, 2015
    78
    @zygotee 就是我附言那个方式,但是有时候不好使,唉。
    xqdoo00o
    xqdoo00o
    Jun 11, 2015
    79
    @LazyZhu 问下 maradns无法 自定义 端口的吗?53端口容易被vps商封。
    jarodvip
    jarodvip
    Oct 9, 2015
    80
    @ShunYea 怎么自建 DNS 呀?我也想建一台用用
    ShunYea
    ShunYea
    OP
    Oct 9, 2015 via Android
    81
    @jarodvip 最少得有台 vps
    jarodvip
    jarodvip
    Oct 10, 2015
    82
    @ShunYea 我有 N 台,问题配置过后用不了,很郁闷,你 QQ 多少
    ShunYea
    ShunYea
    OP
    Oct 10, 2015 via Android
    83
    @jarodvip 我配置的也还不错,只是有时候确实不正常,所以就撤了
    jarodvip
    jarodvip
    Oct 10, 2015
    84
    @ShunYea 不正常,不好用?
    ShunYea
    ShunYea
    OP
    Oct 11, 2015 via Android
    85
    @jarodvip 是的,有时候会无法解析,有时候又正常,实在搞不懂。不过配置了 IP 列表还是不错的,自动走番羽土啬的线路。可能是我技术不到家吧。你就照我上面的方法试试,就这么多教程了。
    jarodvip
    jarodvip
    Oct 12, 2015
    86
    @ShunYea IP 列表是什么?
    ShunYea
    ShunYea
    OP
    Oct 12, 2015 via Android
    87
    @jarodvip 需要番羽土啬的网站的 IP 啊
    jarodvip
    jarodvip
    Oct 12, 2015 via iPhone
    88
    @ShunYea 怎么弄? hosts
    ShunYea
    ShunYea
    OP
    Oct 13, 2015 via Android
    89
    @jarodvip 差不多类似,不过是配置在 DNS 服务器上,让 DNS 解析时候就自动判断了。
    jarodvip
    jarodvip
    Oct 16, 2015
    90
    那还是要建 DNS 缓存服务器
    lxj12328
    lxj12328
    Nov 2, 2015
    91
    关于 dnsmasq.conf 配置问题想咨询你一下,服务已经启动了,设置在笔记本上不能正常的解析,是为什么嘛?
    danili
    danili
    Sep 16, 2016
    92
    我的 Openwrt 就是使用的 DNSmasq 的,国内的几万个域名都是用 223.5.5.5 或者 114.114.114.114.国外的通过 udp 转发到国外的 vps 再解析 8.8.8.8 获得 IP 。然后昨天发现 PS4 下载游戏特别慢,结果发现 223.5.5.5 把 CDN 服务器解析道了汕头,而我在杭州地区, 114.114.114.114 在解析到上海的 CDN 应该更符合我的需要才对。所以楼主需要自建 dns 要考虑到国内解析的准确性~
    ShunYea
    ShunYea
    OP
    Sep 17, 2016 via Android
    93
    @danili 谢谢指点
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1015 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 19:11 · PVG 03:11 · LAX 11:11 · JFK 14:11
    ♥ Do have faith in what you're doing.