扫描二维码关注官方公众号
返回列表 发布新帖

[玩法/技巧] dns server配合dingo防止dns投毒和内网解析

4982 8
发表于 2018-11-21 11:40:42 | 查看全部 阅读模式

来吧兄弟,一起玩一起讨论!

您需要 登录 才可以下载或查看,没有账号?注册

×
之前看到有人用群晖的dns server做了内网解析,我之前家里的网络么一直都是使用的dnsmasq+chinadns+pdnsd来做解析和防止dns的某些解析错误(大家应该都懂的),然后手痒痒准备折腾下群晖自己的dns server

        先简单说下家里网络吧,因为北京这边电信已经彻底不给公网ip了,所以我家里的网络和阿里云的ecs主机打了一个洞,阿里云的机器可以直接访问内网的任意一台机器,从公网访问内网也就成为了可能。
        然后就是fq的需求了,上上google啊,看看土鳖啊,这一块呢就碰到了dns偶尔的解析错误了,所以之前采用了上面说到的方式来防止,dnsmasq里面导入了国内域名列表,国内域名直接走本地电信的dns,其他的域名走chinadns,然后转发给pdnsd把dns请求从udp转换为tcp丢给hk的机器来做真正的解析,同时还要负责解析我自己的域名,回到家里就解析成内网地址。

        前情提要结束,下面开干,首先是选择更好的防止dns解析错误的方式,原来的chinadns+pdnsd对于cdn其实不是很友好,家里访问一些国内的视频网站经常各种解析错误或者慢,所以这次也要一并解决,最终研究了一天,选择了DNS Over HTTP(S),提供https的解析服务选择的是dns.google.com。
        首先说下dns.google.com本身解析速度飞快,然后呢就是很重要的支持edns_client_subnet设置,这一点很重要,设置edns_client_subnet为本地的出口地址,这样解析出来的结果cdn也是正确的了,可以说是目前最完美的解决dns投毒的方式了。
        然后就是选择本地的应用了,支持使用dns.google.com做解析的开源软件其实挺多,看到国内有人做过prcdns,但是各种不好用,后来看到了dingo,用go开发的,做了一些测试完美,而且可以在docker里面跑。
        关于dingo的镜像我没有直接使用docker hub上的版本,而是直接去了做着的github做了调整,因为默认的镜像修改一些参数群晖自己的docker界面创建的时候会报错,所以我是自己从Dokerfile在群晖本地构建出来的镜像。
        1、首先ssh到群晖,然后命令创建一个dingo目录(mkdir dingo)
             F680ECED-CD4D-401D-B024-B40FAD2B4E96.png
        2、进入dingo目录(cd dingo),下载dockerfile(wget https://raw.githubusercontent.co ... er/dingo/Dockerfile
             929AF01E-9BF1-4382-84B9-B2EAE670878D.png
        3、然后就是需要对Dockerfile做修改,我直接把修改的内容放上来
  1. FROM ubuntu:16.04

  2. RUN set -x \
  3.     && apt-get update \
  4.     && apt-get install -y ca-certificates \
  5.     && apt-get install -y curl \
  6.     && curl -k -L -o /usr/local/bin/dingo https://github.com/pforemski/dingo/releases/download/0.13/dingo-linux-amd64 \
  7.     && chmod a+x /usr/local/bin/dingo \
  8.     && apt-get remove -y --purge curl \
  9.     && apt-get autoremove -y --purge \
  10.     && rm -rf /var/lib/apt/lists/*

  11. CMD dingo -bind=0.0.0.0 -port=53 -gdns:edns=1.203.64.25 -gdns:server=216.58.197.110
复制代码
         这里我主要增加了apt-get install -y ca-certificates,安装证书,否则运行会报错          然后就是最后的启动参数,默认只绑定在127.0.0.1,所以在docker 里面跑会有问题
          -gdns:edns=1.203.64.25,这里是指定edns_client_subnet的参数,后面的地址用你们自己宽带的出口ip地址即可
          -gdns:server=216.58.197.110,这里是指定dns.google.com的地址,我用的hk的,因为解析最终就是hk完成,这里需要自己修改,找到一个能访问的ip地址,我家里是在路由导入了国内的路由表,如果不是国内的ip地址就会转发走隧道出去。
          修改好之后,运行"sudo docker build -t dingo:latest . ",注意最后一个“点”哦~不要忘记。
           
          看到最后的successfully就好了,然后就能在群晖的docker里面,看到你刚刚build出来的镜像了
          438B68EA-411F-4CB4-8924-68C615A3084F.png
        4、后面我们开始在docker里面做写操作,首先我们要新增一个新的网络
               43845444-8248-480A-BE1B-520330BF081C.png
          这里随便起一个名字吧,然后确定,我们开始运行dingo
          A4BD27EF-2D20-470C-A515-E0631322E076.png
          回去docker的映像,选择前面创建出来的dingo:latest,然后启动,名字自己随便起,这里先点击高级设置
          15DC2D7B-B978-49EE-A56B-84B5481DCD92.png
         进入高级设置,选择网络,把你刚才新建的网络添加进去,确定,然后下一步应用,docker就会把dingo起来了
          207E24A6-A730-4502-9B23-E7F73AF9F7C5.png
          在容器里面就能看到已经运行的dingo了,点击详情查看下日志,有同样的内容就代表运行好了,然后来配置群晖的dns server。
          这里有一点,我们需要知道dingo的地址,还是在dingo的详情里面,选择最后的终端机,点新增旁边的箭头,通过命令启动
          输入“/bin/bash”,然后确定
          8120A15D-3905-496E-98F4-4CAB461625A5.png
        可以左边就有了bash,点击进去,就可以在右边输入命令
       执行“cat /etc/hosts”,这里能看到我最后的“172.19.0.2 dingo-dns2https",我的容器名字就是dingo-dns2https,前面的172.19.0.2这个地址就是docker分配给dingo的地址,这里记下来。
         42912556-DEEE-481C-9E92-D79438F566E2.png
        我们打开dns server,进入解析,勾选“启用解析服务”和下面的“启用解析器”,下面输入上面查到的docker里面的ip地址,然后应用
         880155E1-FB53-4CC8-948C-3858141E6153.png

        好了,这样就可以了,用群晖的dns提供了解析服务,我用来访问群晖的域名解析成内网地址,然后解析也使用群晖的dns来完成了,一举兼得,而且比以前架构简单~


9A5CFED3-01A2-41CB-BEB7-4C198BDCA0A7.png
58229B7F-75F8-47CD-9C53-79EB51E30000.png

评论8

米兔兔Lv.5 发表于 2018-11-21 13:22:27 来自手机 | 查看全部
小白看不懂
回复 点赞

使用道具 举报

kingzwj168Lv.10 发表于 2018-11-21 14:03:50 | 查看全部
这个教程好,收藏了
回复 点赞

使用道具 举报

snowman1003VIPLv.7互助团队 发表于 2018-11-21 22:42:57 | 查看全部
感谢分享
回复 点赞

使用道具 举报

jojo100Lv.6 发表于 2018-11-21 23:59:22 | 查看全部
也就是说,不用ngrok之类的,也能够在外网直接访问内网了?
回复 点赞

使用道具 举报

超导体Lv.10互助团队 发表于 2018-11-21 23:59:42 | 查看全部
谢谢分享!!!
回复 点赞

使用道具 举报

136347358Lv.5 发表于 2018-11-25 22:30:11 | 查看全部
感谢分享!!!
回复 点赞

使用道具 举报

xl224楼主Lv.2 发表于 2018-11-26 12:36:47 | 查看全部
jojo100 发表于 2018-11-21 23:59
也就是说,不用ngrok之类的,也能够在外网直接访问内网了?

ngrok只是选择之一
我直接通过家里的路由器和阿里云之间通过pptp建立一个隧道,然后家里的群晖自己就可以配置反响代理,还支持https,包括lets的证书,基本上隧道建立之后就不用管了,阿里云上只要配置好80和443端口转发到内网的群晖上就可以了,剩下的都用群晖自己的功能和配置就实现了
回复 点赞

使用道具 举报

aviviLv.5 发表于 2018-11-27 16:16:49 | 查看全部
专业专业!
回复 点赞

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

淘宝小店

邀请码

VIP会员

微信客服

公众号

微信群

投诉/建议联系

support@gebi1.cn

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 隔壁网 版权所有 All Rights Reserved. 粤ICP备14056481号-1
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表