2019
10-08

使用TCP方式解决DNS污染问题,如何解决DNS污染问题?TCP 方式查询DNS并解决DNS污染

免费支持本站

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

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

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

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

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

使用TCP方式解决DNS污染问题,如何解决DNS污染问题?

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

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

首先安装unbound

opkg update

opkg install unbound

然后修改 /etc/unbound/unbound.conf 文件,把以下内容相关的条目的注释取消,并按如下形式修改:

# unbound本地端口 由于dnsmasq占用53端口所以改用其他 如5454

port: 5454

# 启用TCP模式

tcp-upstream: yes

# 设置转发的DNS服务器

forward-zone:

        name: "."

        forward-addr: 8.8.8.8

        forward-addr: 8.8.4.4

        forward-first: no

启动unbound

/etc/init.d/unbound start

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

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

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

安装pdnsd及配置pdnsd.conf

SSH安装pdnsd

也可以使用SSH安装:

opkg update

opkg install pdnsd

配置pdnsd

配置/etc/pdnsd.conf,文件配置分为数个区域,主要修改global区域和server区域,其他区域保留默认值即可。具体的配置文件详情请查阅官方文档:pdnsd Documents

# 这里是全局设置区域,酌情修改

global {

        perm_cache=2048;   # 缓存文件大小,单位KB

        cache_dir="/var/pdnsd";  # 缓存文件位置,保留默认

#        pid_file = /var/run/pdnsd.pid;  # pid文件,不用管

        run_as="nobody";          # runas,保留默认

        server_ip = 0.0.0.0;  # 监听所有

        server_port = 25252;  # pdnsd 监听端口

        status_ctl = on;   # 保留on

#        paranoid=on;       # This option reduces the chance of cache poisoning

                           # but may make pdnsd less efficient, unfortunately.

        query_method=tcp_only;  # 只使用TCP

        min_ttl=6h;       # 最小TTL时间,自己酌情往上加,默认是15分钟

        max_ttl=1w;        # 最长TTL时间,默认一周

        timeout=10;        # 全局超时时间,默认10秒,酌情修改

        neg_domain_pol=on; # 用到neg domain的话可以试试,不用就不用管

        udpbufsize=1024;   # 默认

}

# 这个是server区域,可以定义多组,定义pdnsd的上游dns

server {

        label= "mydns";  # 为这组server起一个名字

        ip = 3.4.5.6;    # 填写DNS的IP地址,多个地址逗号分隔,可以换行,分号结尾

        port = 5353;     # 填写DNS的端口,我这里上一级是3.4.5.6,监听的5353

                         # 如果使用GoogleDNS等公共 DNS 这里端口号应该是53,或者删除该行也行

#        proxy_only=on;     # Do not query any name servers beside your ISP's.

                           # This may be necessary if you are behind some

                           # kind of firewall and cannot receive replies

                           # from outside name servers.

        timeout=4;         # 超时值,酌情修改

        uptest=none;       # 是否进行可用性检查,none=不检查,具体方法看官方文档

        interface=eth0;    # 可用性检查所用的interface名

        interval=10m;      # 检查频率

        purge_cache=off;   # 如果off,pdnsd不会主动清除缓存中过期的项目 除非缓存满了

        edns_query=on;    # 是否使用edns

}

pdnsd设置启动项

给pdnsd设置开机启动:

/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

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

官方QQ群号码:922069959
点击链接加入群聊【路由器交流】:https://jq.qq.com/?_wv=1027&k=5AKdmZP

您可能感兴趣的文章

    路由器交流群

    支付宝打赏支付宝打赏微信打赏微信打赏

    本文》有 0 条评论

    留下一个回复 (您的评论需要经过审核才能显示)