RouterOS DNS劫持(转)
Mikrotik DNS缓存设置建议
Miktotik Router 设置
- 首先设置打开mikrotik DNS的缓存功能:
1
/ip dns set allow-remote-requests=yes
- 将所有的TCP和UDP的53端口的请求重定向到路由器53端口:(如果你有多个路由可以进行重定向设置-一般可以跳过这一步)
1
2/ip firewall nat add chain=dstnat protocol=tcp dst-port=53 action=redirect to-ports=53 comment="DNS TCP"
/ip firewall nat add chain=dstnat protocol=udp dst-port=53 action=redirect to-ports=53 comment="DNS UDP"
- 设置Fasttrack 使来自路由器的所有DNS流量绕过队列:
1
2/ip firewall filter add chain=forward protocol=tcp dst-port=53 action=fasttrack-connection comment="Fasttrack DNS TCP"
/ip firewall filter add chain=forward protocol=udp dst-port=53 action=fasttrack-connection comment="Fasttrack DNS UDP"
- 如果你是通过PPPOE拨号上网的,想自行设置DNS地址,打开PPPOE网口,取消 Use-Peer-DNS
- 设置 DNS 的服务器地址为 自定义DNS 或 上游运营商的DNS地址-路径:
1
/ip dns
ps:当同时设置了静态和动态服务器时,静态服务器条目更可取,但是这并不表示将始终使用静态服务器(例如,以前从动态服务器接收查询,但后来添加了静态,那么将首选动态条目)
- 设置DHCP服务器的DNS地址为 自定义DNS 或 上游运营商的DNS地址-路径:
1
/ip dhcp
删除本地缓存
-
删除电脑上的DNS缓存:
-
打开CMD控制台,输入:
1
ipconfig /flushdns
-
查看缓存内容:
1
ipconfig /displaydns
-
-
删除浏览器DNS缓存:
- 某厂商浏览器:
打开浏览器的选项-高级设置,里面有一个选项是 “清除上网痕迹” - “清空缓存”, 点击 “清除” - chrome浏览器:
设置-隐私设置-清除浏览数据-缓存的图片和文件-清除数据
- 某厂商浏览器:
- 刷新 Mikrotik RouterOS 的DNS缓存:
1
/ip dns cache flush
什么是DNS劫持
DNS劫持就是通过技术手段,来控制用户解析域名的IP地址。举个例子,正常解析域名www.awolf.net时应该返回IP:64.64.30.60;但现在通过DNS劫持,使域名www.awolf.net解析返回IP:1.1.1.1,以达到控制www.awolf.net该域名,进而控制访问www.awolf.net所打开页面。这就是DNS劫持。
- 为什么要做DNS劫持
有了DNS劫持,我们就可以随意控制路由器下游用户的域名解析,从而达到限制、强制访问某些网站;或者在用户访问不存在的网站时给予友好的提示;或者把IIS上多个站点用主机头区分……
- 如何在Ros上做DNS劫持
在ROS上,可以通过对53端口的UDP访问进行dst-nat,to-address指向我们自己的dns服务器或如果Ros开启DNS服务,也可以指向Ros本身。
WinBox设置:
本例中使用ROS自带的DNS服务,ROS IP为192.168.27.254。
首先开启ROS的DNS服务:Winbox中选IP->DNS,在Static页面中点Settings,按下图设置,其中202.96.64.68和202.96.69.38按你所在地区和ISP的DNS填写。
确定后在Winbox中选IP->Firewall,选NAT页面,点红色加号“+”,按下图设置:
Chian=dstnat,Protocol=UDP,Dst.Port=53,Action=dst-nat,To Address=192.168.27
命令行设置:
/ip firewall nat
add action=dst-nat chain=dstnat disabled=no dst-address-type=!local dst-port=53 protocol=tcp to-addresses=192.168.0.1 to-ports=53
add action=dst-nat chain=dstnat disabled=no dst-address-type=!local dst-port=53 protocol=udp to-addresses=192.168.0.1 to-ports=53
/ip dns
set allow-remote-requests=yes cache-max-ttl=1w cache-size=4096KiB max-udp-packet-size=512 primary-dns=202.96.64.68 secondary-dns=202.96.69.38
设置成功的Firewall->Connections效果图:
可以看到去往202.96.64.68的DNS请求都被192.168.27.254回应了。
注意:如果要使用内网服务器做域名解析服务,必须在以上DNS劫持设置规则之上再添加一条允许该服务器访问外网DNS的规则,否则连内网DNS服务器的解析请求都被劫持了,就无法正常进行域名解析了。
例如内网DNS服务器IP是192.168.27.1,则需要在DNS劫持规则之上添加如下规则:
/ip firewall nat
add action=accept chain=dstnat disabled=no dst-port=53 protocol=udp src-address=192.168.27.1
方法2----------------------------------------------------------------------------------------------------------------------------------------------
DNS重定向
如果客户端没有自动获取或者设置RouterOS网关作为DNS,可以将内网向外的所有DNS请求都通过dst-nat重定向到内网,即强制所有用户向外网的dns请求都到本地网关解析。
进入ip firewall nat,在该菜单下配置dst-nat规则,添加一条chain=dstnat,protocol=udp,port=53
设置action参数为redirect,指定到本地的53端口
------------------------------------自动清理dns Cache 的脚本
由于我们是使用的盗版,ROS在这块有个BUG可是防盗版的原因吧,ROS缓存数过多就会溢出所以我们要做个自动清理的脚本。