轉載:MikroTik RouterOS利用DNS配合防火牆攔截廣告
一些關於PPPoE撥號配置等基礎操作網上教程較多,後期如有時間我會考慮一起記錄下來,今天介紹的主要是如何利用DNS靜態列表配合防火牆攔截特定廣告或者跟踪器URL。
配置前的準備工作,比如winbox的下載和連接我這裡不詳述,建議將RouterOS更新到最新,當然升級也比較方便可以直接在線升級。
1、配置靜態DNS (WinBox > IP > DNS > Static)
首先打開 DNS Settings
,根據個人喜好配置Servers為上游遞歸DNS服務器,為取得最佳CDN查詢效果,建議使用運營商提供的DNS服務器,取ping值最小的為佳,當然如果運營商的DNS存在劫持的話也可以選擇公共DNS服務器,填寫完畢後點擊 Apply
使配置生效,如下圖所示:
然後點擊 Static
,打開 DNS Static
,點擊+加號打開 New DNS Static Entry
如下圖所示:
參考上圖,假設我們要屏蔽的廣告或者跟踪器域名是 ads.domain.com
,那麼Name字段填寫這個域名(注意這裡只能是域名, 不能 填寫帶 http://
或者 https://
的URL),Address字段填寫一個特殊的IP地址,我們這裡選用240.0.0.1,這個IP地址最好不能是公共互聯網絡上的公網IP,當然也不能是內網私有IP,否則可能會導致不兼容問題,240.0.0.1是個保留地址符合要求。完成配置後點擊OK!
測試配置結果,假設路由器IP是 192.168.88.1
,那麼使用命令 nslookup ads.domain.com 192.168.88.1
,如果返回 240.0.0.1
則表明配置生效!
到這裡我們假設的廣告域名ads.domain.com已經無法解析,如果我們上網客戶端使用的路由器作為DNS服務器,那麼所有和此域名相關的URL已經無法訪問,到這裡就結束了嗎?不!必須配置防火牆,因為我們將廣告或者攔截器域名解析到一個黑洞IP,所有發往這個IP的數據包不會得到任何應答,因而會響應超時,不過TCP有個特性,會不斷嘗試重新發包如果我們不reset的話,對於瀏覽器來說,頁面顯示會卡住,也消耗了客戶端的計算資源,所以還需要配置防火牆,reset或者drop所有發往240.0.0.1的數據包。
2、配置防火牆(WinBox > IP > Firewall > Filter Rules)
首先打開 Firewall
界面,切換到 Filter Rules
選項卡,點擊+加號添加 Firewall Rule
,如下圖所示:
如上圖添加一條forward的Reject記錄,攔截240.0.0.1的TCP數據包,處理方式是TCP Reset,這個在Action選項卡設置,如下圖所示,編輯完成後點擊OK添加。
除了攔截TCP數據包外,我們還需要對UDP協議以及其他流量類型進行處理,具體的配置大同小異,以下僅列出必要的配置內容:
攔截UDP:
1
2
3
4
5
6
7
8
9
10
WinBox > IP > Firewall > Filter Rules > Add [+]
General
Chain: forward
Dst. Address: 240.0.0.1
Protocol: 17 (udp)
Connection State: new
Action
Action: reject
Reject With: icmp network unreachable
Comment: Adblock udp unreachable
攔截其他類型流量:
1
2
3
4
5
6
7
WinBox > IP > Firewall > Filter Rules > Add [+]
General
Chain: forward
Dst. Address: 240.0.0.1
Action
Action: drop
Comment: Adblock drop
3、配置DHCP Server(WinBox > IP > DHCP Server > Networks > Edit Primary Network)
參考下圖打開DHCP Server的網絡配置界面,配置默認分配給客戶端的DNS服務器為Mikrotik路由IP,我們這裡是 192.168.88.1
,大家視情況修改,完成編輯後即可點擊OK。
4、進階內容
4.1 利用正則表達式匹配域名
大家可能注意到在第1步的設置靜態解析 New DNS Static Entry
界面有個 Regexp
文本框域,通過這個我們可以使用正則表達式匹配查詢域名,這樣會更加靈活,比如規則 ^ads[A-Za-z0-9-]*\.example\.com$
:
如果填寫了 Regexp
就不再需要填寫 Name
,此規則將匹配所有以 ads
開頭和 .domain.com
結尾的域名,包括但不限於以下幾種:
1
2
ads.domain.com
adsabc.domain.com
正則表達式比較強大,具體要看各位發揮了。
4.2 重新定向內網所有DNS查詢
有時候可能會出現客戶端採用自定義DNS服務器的方式繞過我們DHCP分配的DNS服務器,這樣攔截規則也無法生效,這時候我們就可以使用防火牆劫持DNS端口的數據重定向到網關的DNS。
注意一般DNS查詢分為UDP協議(常用)和TCP協議,這兩種都使用了53端口,所以我們需要分別設置,以下僅給出配置信息供參考:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WinBox > IP > Firewall > NAT > Add [+]
General
Chain: dstnat
Dst. Address: [!] <your Mikrotik IP>
Protocol: 6 (tcp)
Dst. Port: 53
In. Interface: <your LAN bridge/interface>
Action
Action: redirect
To Ports: 53
Comment: DNS Redirect (TCP)
WinBox > IP > Firewall > NAT > Add [+]
General
Chain: dstnat
Dst. Address: [!] <your Mikrotik IP>
Protocol: 17 (udp)
Dst. Port: 53
In. Interface: <your LAN bridge/interface>
Action
Action: redirect
To Ports: 53
Comment: DNS Redirect (UDP)
以上和<your LAN bridge/interface>請自行替換為你的路由器IP和局域網網橋名稱。