NAP6官方旗舰店
搜索
发新帖
午饭无线 推广广告R7800 完胜 华硕路由器NETGEAR Vs ASUS T-Mobile定制版NETGEAR团购
开启左侧

使用TCP 方式查询并解决 DNS 污染问题

[复制链接]
1471 0

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本文适用于通常的UDP方式DNS查询不可用、不稳定或者无法正常解决DNS污染的情况,适用于但不限于以下情况:

1、你的ISP可能会封杀国外的大部分UDP通讯(如教育网)

2、UDP通讯不稳定,DNS解析经常卡住

3、代理服务器不支持代理UDP协议,又遇到长城宽带这种坑爹ISP时;

TCP方式查询,请搭配shadowsocks等代理效果更佳,使用shadowsocks代理路由器的TCP流量,使得TCP的DNS查询也能走shadowsocks代理,更加稳定安全。上面的第三条的情况可能必须这么做才能解决问题(没有长宽的网络环境无法测试)。

一种简易的方式,可以利用一款unbound的软件来支持tcp查询。

首先安装unbound:
  1. opkg update
  2. opkg install unbound
复制代码

然后修改 /etc/unbound/unbound.conf 文件,把以下内容相关的条目的注释取消,并按如下形式修改:
  1. # unbound本地端口 由于dnsmasq占用53端口所以改用其他 如5454
  2. port: 5454
  3. # 启用TCP模式
  4. tcp-upstream: yes
  5. # 设置转发的DNS服务器
  6. forward-zone:
  7.         name: "."
  8.         forward-addr: 8.8.8.8
  9.         forward-addr: 8.8.4.4
  10.         forward-first: no
复制代码

启动unbound:
  1. /etc/init.d/unbound start
复制代码

接着我们就可以配合ChinaDNS来使用了,将默认使用的8.8.8.8改成127.0.0.1:5454即可

本人在自己的路由上实测,延迟很大,不知道其他硬件啥情况。延迟高到已经没有实用性的程度了 此时无奈换用pdnsd。如果有人自己发现解析延迟大,可以考虑换用pdnsd。同时本人推荐使用pdnsd,性能功能都更为强大一些。

可以直接在Luci界面中,切至软件包配置页面,刷新列表后,键入pdnsd点击安装即可。

也可以使用SSH安装:
  1. opkg update
  2. opkg install pdnsd
复制代码

配置/etc/pdnsd.conf,文件配置分为数个区域,主要修改global区域和server区域,其他区域保留默认值即可。具体的配置文件详情请查阅官方文档:pdnsd Documents
  1. # 这里是全局设置区域,酌情修改
  2. global {
  3.         perm_cache=2048;   # 缓存文件大小,单位KB
  4.         cache_dir="/var/pdnsd";  # 缓存文件位置,保留默认
  5. #        pid_file = /var/run/pdnsd.pid;  # pid文件,不用管
  6.         run_as="nobody";          # runas,保留默认
  7.         server_ip = 0.0.0.0;  # 监听所有
  8.         server_port = 25252;  # pdnsd 监听端口
  9.         status_ctl = on;   # 保留on
  10. #        paranoid=on;       # This option reduces the chance of cache poisoning
  11.                            # but may make pdnsd less efficient, unfortunately.
  12.         query_method=tcp_only;  # 只使用TCP
  13.         min_ttl=6h;       # 最小TTL时间,自己酌情往上加,默认是15分钟
  14.         max_ttl=1w;        # 最长TTL时间,默认一周
  15.         timeout=10;        # 全局超时时间,默认10秒,酌情修改
  16.         neg_domain_pol=on; # 用到neg domain的话可以试试,不用就不用管
  17.         udpbufsize=1024;   # 默认
  18. }

  19. # 这个是server区域,可以定义多组,定义pdnsd的上游dns
  20. server {
  21.         label= "mydns";  # 为这组server起一个名字
  22.         ip = 3.4.5.6;    # 填写DNS的IP地址,多个地址逗号分隔,可以换行,分号结尾
  23.         port = 5353;     # 填写DNS的端口,我这里上一级是3.4.5.6,监听的5353
  24.                          # 如果使用GoogleDNS等公共 DNS 这里端口号应该是53,或者删除该行也行
  25. #        proxy_only=on;     # Do not query any name servers beside your ISP's.
  26.                            # This may be necessary if you are behind some
  27.                            # kind of firewall and cannot receive replies
  28.                            # from outside name servers.
  29.         timeout=4;         # 超时值,酌情修改
  30.         uptest=none;       # 是否进行可用性检查,none=不检查,具体方法看官方文档
  31.         interface=eth0;    # 可用性检查所用的interface名
  32.         interval=10m;      # 检查频率
  33.         purge_cache=off;   # 如果off,pdnsd不会主动清除缓存中过期的项目 除非缓存满了
  34.         edns_query=on;    # 是否使用edns
  35. }
复制代码

给pdnsd设置开机启动:
  1. /etc/init.d/pdnsd enable
复制代码

也可以在Luci的启动项配置页面找到pdnsd,将开机自动从禁用改成启用。接着,你需要将路由器的DNS请求转发至pdnsd上来,在上游DNS中填入:127.0.0.1:PORT,其中port是pdnsd监听端口,上面的配置文件中写的是25252。举个具体案例,使用ChinaDNS作为DNS服务器时候,需要同时配置国内和国外DNS,国内DNS可以填入ISP的DNS或者其他国内公众DNS,国外DNS指向pdnsd,如:114.114.114.114,127.0.0.1:25252

最后,重启一下路由,应该就好了。

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

本版积分规则

快速回复 返回顶部 返回列表