使用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 污染问题
一种简易的方式,可以利用一款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
最后,重启一下路由,应该就好了。
点击链接加入群聊三群:751529538
点击链接加入群聊二群:376877156
点击链接加入群聊【路由器交流群:622891808已满】
本站附件分享,如果附件失效,可以去找找看
饿了么红包