
広告ブロックを行いたいと思ったときにブラウザであればその手のプラグインを使うというのがあるけどあまり自由度がないし、ブラウザ以外には効果がない。好き勝手やりたいならDNSサーバを使うのが簡単だけどWindowsはどうするの?となるとやはりこちらもUnboundあたりが比較的簡単かなと。そこで、WindowsにUnboundをインストールして広告ブロックを行ってみた。
一応、今回使用したのはWindows 10 Home 64bit Insider Preview Build16237.rs_prerelease.とUnbound 1.6.4
Unboundのインストール
Unboundの公式サイトからWindows用のインストーラーをダウンロードする。基本64ビット版をダウンロードでOK.(特別な理由があって32ビット版Windowsを使ってるなら32ビット版をダウンロード)
ダウンロードしたファイルを実行。
[Next]をクリック。
License Agreementを読んで同意できるなら[I Agree]をクリック。
[Next]をクリック。
[Next]をクリック。
[Install]をクリック。
[Finish]をクリック。
インストール完了。
インストール先を特に変更していなければUnboundはC:\Program Files\Unboundにインストールされた筈だが、このフォルダはユーザーが普通にファイルを変更できないのでフォルダ内の設定ファイルを変更できない。
そこでフォルダのセキュリティを変更する。(Unboundが正常に動くようになったら戻してね)
エクスプローラーでC:\Program Files\Unboundのフォルダを右クリック。[プロパティ]を開く。
「Unboundのプロパティ」画面の上部にある[セキュリティ]タグを選択。
中段右側にある[編集]をクリック。
上段のグループ名/ユーザー名のリストからUsers(hoge\Users)を選択。
下段のアクセス許可の「変更」行の「許可」にチェックを付ける。[OK]をクリック。
Unboundの設定
C:\Program Files\Unbound\service.confがメインの設定ファイルになる。変更には改行コードを正しく認識できるエディタを使う。Windowsに付いてる「メモ帳」はダメ。
C:\Program Files\Unbound\service.conf1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | server:
verbosity: 0 #ログを取らない
interface: ::1 #IPv6
interface: ::0 #IPv6
interface:127.0.0.1 #IPv4
interface: 0.0.0.0 #IPv4
access-control: 0.0.0.0/0 refuse #IPv4 WANから使わせない
access-control: ::0/0 refuse #IPv6 WANから使わせない
access-control: 127.0.0.0/8 allow #IPv4 自身は許可
access-control: ::1 allow #IPv6 自身は許可
access-control: 192.168.0.0/24 allow #IPv4 LANは許可 (自分のLANアドレスに書き換える)
access-control: fdc0:1:1:0::/64 allow #IPv6 LANは許可 (自分のLANアドレスに書き換える)
#INCLUDE FILES
include: "C:\Program Files\Unbound\local_zone_ipv6.conf" #IPv6+IPv4用 IPv4のみの環境ならこの行は削除 (下の行と排他)
include: "C:\Program Files\Unbound\local_zone.conf" #IPv4だけの環境用 IPv6ありの環境ならこの行は削除 (上の行と排他)
include: "C:\Program Files\Unbound\local_data_ipv6.conf" #IPv4のみの環境ならこの行は削除
include: "C:\Program Files\Unbound\local_data.conf" #この行は消さない
include: "C:\Program Files\Unbound\local_data_malware_ipv6.conf" #IPv4のみの環境ならこの行は削除
include: "C:\Program Files\Unbound\local_data_malware.conf" #この行は消さない
forward-zone:
name: "."
forward-addr: 2001:4860:4860::8888 # IPv6 Google public DNS#1 or your ISP's DNS (1st)
forward-addr: 2001:4860:4860::8844 # IPv6 Google public DNS#2 or your ISP's DNS (2nd)
forward-addr: 8.8.8.8 # IPv4 Google public DNS#1 or your ISP's DNS (1st)
forward-addr: 8.8.4.4 # IPv4 Google public DNS#2 or your ISP's DNS (2nd)
server: auto-trust-anchor-file: "C:\Program Files\Unbound\root.key"
|
インクルードファイルの部分の5つのファイルは悪いインターネット 広告除去用HOSTSファイルから取得する。広告ブロック用とマルウエアブロック用。
forward-zoneは上のインクルードしたホストリストにひっかからなかったホストを問い合わせる先になるのでプロバイダのDNSサーバやパブリックDNSサーバを指定する。
なお、IPv4専用のネットワーク環境であるならAAAAレコード(IPv6アドレス)を返答してこないDNSの方が無難なのでプロバイダが提供しているDNSがAAAAフィルタ付きDNSサーバであればそれを利用する方が良いかと。上の例ではGoogleのパブリックDNSを記載しているけどこれはAAAAレコードを返すので使わないべき。
ゾーンファイルは1つのドメインにアホみたいに大量のホストが存在してそれらをブロックするのにホスト単位でリスト化するのが無駄なのでドメイン単位でブロックするためのリスト。
最後の33行目は1行目からのServer:セクションと同じ。別セクションの後に追記するような場合はこんな書き方。あまり褒められないかも。上の例だとforward-zoneセクションの前あたりに行頭の「Server:」を除いて置いてやった方が同じセクションの設定が飛び飛びになるより良いかも。
これでWindowsを再起動したらUnboundがキャッシュサーバとして動く筈。もしくはコマンドプロンプトやPowershellからunbound-control.exeを操作する。起動だけならエクスプローラーからunbound.exeをダブルクリックでも。
Unboundフォルダ内の各exeファイル(の幾つか)を実行すると、ファイアウォールの画面が表示される筈なので全部許可する。(これ忘れると通信できないので動かないように見える)
リゾルバの変更
DNSサーバが準備できてもそれを使う設定をしないと当然使われない。家庭用のLAN環境であればルーターなどのDHCPサーバのDNSサーバの指定項目にunboundを設置したWindows PCのアドレスを書いてやればDHCP配下の端末はUnboundを使うようになってくれる。端末ごとに手動設定するのであれば、UNIX系であれば/etc/resolv.confにUnboundを設置したWindows PCのアドレスを書く。
ここまでは迷う部分は無い筈。
問題はWindowsの場合。Unboundを設置したWindows PCも忘れずに変えないと。
「ネットワーク接続」から使用中のネットワークアダプタを右クリックして[プロパティ]をクリック。
上の例では無線LANの方を選んでいる。
「ネットワーク」タグが選択されていることを確認して「インターネットプロトコルバージョン4 (TCP/IPv4)」を選択して[プロパティ]をクリック。
「次のDNSサーバーのアドレスを使う」にを付ける。
「優先DNSサーバー」に 127.0.0.1 を指定する。[OK]をクリック。
LAN内の他のホストでは127.0.0.1ではなくUnboundをインストールしたホストのIPアドレスを指定。
「ネットワーク」タグが選択されていることを確認して「インターネットプロトコルバージョン6 (TCP/IPv6)」を選択して[プロパティ]をクリック。
「次のDNSサーバーのアドレスを使う」にを付ける。
「優先DNSサーバー」に ::1 を指定する。[OK]をクリック。
LAN内の他のホストでは ::1 ではなくUnboundをインストールしたホストのIPv6アドレスを指定。
なお、IPv4専用環境ではこれは不要。
本来ならこれで終わりの筈。
だけど、これだと不具合が発生する場合があるみたい。設定した無線LAN,有線LANが使用不能になるなど。なんか、DHCP環境でDNSだけ手動指定でなるっぽい。
そこで、PC起動時はDNSはDHCPから振られたものを使用し、起動後にDNSを変更するバッチファイルを作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @echo off
netsh interface ipv6 set dns name="Wi-Fi" source=dhcp register=non validate=no
netsh interface ipv4 set dns name="Wi-Fi" source=dhcp register=non validate=no
rem netsh interface ipv6 set dns name="イーサネット" source=dhcp register=non validate=no
rem netsh interface ipv4 set dns name="イーサネット" source=dhcp register=non validate=no
timeout 30 /nobreak
netsh interface ipv6 set dns name="Wi-Fi" source=static addr="::1" register=non validate=no
netsh interface ipv4 set dns name="Wi-Fi" source=static addr="127.0.0.1" register=non validate=no
rem netsh interface ipv6 set dns name="イーサネット" source=static addr="::1" register=non validate=no
rem netsh interface ipv4 set dns name="イーサネット" source=static addr="127.0.0.1" register=non validate=no
exit
|
行頭に rem が付いているのはコメント。だから上の例では有線LANはコメントになっているので実行されない。
上で作成したバッチファイルがWindows起動時に実行されるようにタスクを登録する。で、最近のWindowsのタスク スケジューラはUI操作でタスクを登録してもなかなか思い通りに実行されない代物なのでタスクをコマンドで作成する。(コマンドでタスクを作成すると何故か正常に動くことが多い)
コマンドプロンプトを管理者権限で起動。
これはスタートボタンを右クリックで表示されるリストにコマンドプロンプト(管理者)があればそれ。Windows10の最新環境だとスタートボタンを左クリックして「Windows システムツール」内にある「コマンドプロンプト」を右クリックして「その他」⇢「管理者として実行」
schtasks /create /tn DNS変更 /tr "C:\Program Files\Unbound\change_dns.bat" /sc onstart /rl highest /F
作成したタスクが登録されていることを確認する。
スタートボタンを右クリックで「コントロールパネル」から「タスク スケジューラ」を起動。またはWindows10の最新環境ならスタートボタンを左クリックで「Windows 管理ツール」から「タスク スケジューラ」を起動。
左列の「タスク スケジューラ ライブラリ」を選択。中央列上段のリストに「DNS変更」タスクが登録されていることを確認。
Windowsを再起動してログインし、30秒以上待ってからPowerShellまたはコマンドプロンプトを開き、 ipconfig /all を実行する。
「DNSサーバー」の項目を探し ::1 と 127.0.0.1 の2つが表示されていることを確認する。
nslookup www.google.com を実行する。
Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. PS C:\Users\foobar> nslookup www.google.com サーバー: localhost Address: ::1 権限のない回答: 名前: www.google.com Addresses: 2404:6800:400a:806::2004 172.217.27.164 PS C:\Users\foobar>
こんな感じにIPv6, IPv4ともにアドレスが正しく入っていればOK.
上の例はUnboundを動かしているWindows PCで実行したので「サーバー」がlocalhostになっている。
広告(迷惑)ホストの確認も行う。nslookup baidu.com を実行。
Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. PS C:\Users\foobar> nslookup baidu.com サーバー: localhost Address: ::1 権限のない回答: 名前: baidu.com Addresses: :: 0.0.0.0 PS C:\Users\foobar>
IPv6では :: に、IPv4では 0.0.0.0 になればOK.
関連記事:- WindowsでもUnbound (Remote controlの準備) この記事の追記
- WindowsでもUnboundで広告ブロック ←いまここ
- NAVER/LINE/NHN他フィルタ
- Unboundでネットワーク内まるごと広告ブロック
- UnboundでWindows Update テレメトリー通信阻止
- AOOSTARのRyzen 7 5825U搭載ミニPCを買ってみた
- Ryzen 5 5500U搭載で3万円台半ばの格安ミニPC TRIGKEY Speed S5
- CapsLockを左Shiftキーにする 備忘録 (Linux / Windows)
- Tiny 11をMicrosoftと通信させない名前解決変更
- マイクロソフト PCマネージャというアプリを触ってみた
- Windows 11のシステム要件を満たさないPCでWindows11の大型アップデートを適用
- Windows 11でWindows Updateの自動更新を停止する
- Windows 11でWindows Updateによる更新を手動で停める (後編)
- Windows 11でWindows Updateによる更新を手動で停める (前編)
- Windows 11のシステム要件を満たさないPCでWindows10からWindows11にアップグレード
- WindowsでもUnbound (Remote controlの準備)
- Windows 11リリース (例のごとくシステム要件を満たさないPCにインストール)
- Androidスマホ画面をWindowsで表示 (ワイヤレスディスプレイ プロジェクション)
- Windows 11上で「このPCは現在、Windows 11システム要件を満たしていません」
- MS公式誰でもDLできるWindows 11 インサイダー版を古いPCにインストールと休止無効化設定
- Windows IMEで半角/全角キーの割り当てをIMEオフだけに変更(Linuxも)
- Windows 11システム要件に満たないPCにISOファイル無改造でインストール
- Windows 11上で「このPCではWindows 11を実行できません」
- Windows 11を9年前の超非力なノートPCにインストールしてみた
- 情報セキュリティ Windows 10でUSBメモリの自動実行を不可にする
- 情報セキュリティ Windows 10でUSBメモリの読み書きを不可にする
- Windows 10を旧型ノートPCにクリーンインストールしてみた
- DVDFab 11がリリースされた
- WinlogbeatでWindowsイベントログを可視化 後編
- WinlogbeatでWindowsイベントログを可視化 中編
- WinlogbeatでWindowsイベントログを可視化 前編
- Windows 10のメールでZ-Push (Exchange)を利用する
- Chrome OS (Chromium OS)を触ってみた
- Windows 10の時刻同期設定
- Windowsで写真現像 darktable 2.4
Windows用Unboundで設定の変更を反映させるにはどうしたら良いんでしょうか?
こちらで紹介されているファイルを利用させていただいているのですが、
一通り設定をしてUnboundを実行させた後、ゾーンファイルから適宜コメントアウトで
特定のホストにアクセスできるよう設定を変更したものの反映方法がわからず困っています。
コントロールパネル>管理ツール>サービスからUnbound DNS validatorを選択し
サービスの再起動を行ってもダメで、
PowerShellからunbound-controlでreloadを実行してもダメでした。
(unbound-controlの方はstopをかけても直後にstatusでrunningとなっているのが
確認できたので何がどうなっているのかわからないという感じもしました
http://i.imgur.com/ydvXzip.png)
OSの再起動をすると変更が反映されるのは確認できましたが、OSの再起動となると
細かい設定変更の反映が手間になってしまうので他の方法があれば教えていただきたいです。
unboundの設定変更後、サービスの再起動でその設定は有効になります。
DNSキャッシュサーバとしては新しい設定で動いているのですが、それを利用するクライアント側はそれとは別にDNSリゾルバキャッシュを持っています。(Windowsの場合)
クライアントというのはunboundに問い合わせる全てのPCやその他端末ですが、そこにはunboundが動いているWindows PC自身も含まれます。
名前解決が必要なとときに毎回DNSサーバに対して問い合わせを行うよりも一度問い合わせた結果を自身で溜めておいてそれを利用した方が効率が良いからということのようです。
弊害もあるのでどうかなとは思いますが。
Windowsの場合はコマンドプロンプトやPowerShellの管理者権限で、ipconfig /flushdns を行うことでそのWindows PCが起動後直近24時間以内に溜めていたDNSリゾルバキャッシュをフラッシュすることができます。
hostsファイルの変更はファイル保存後特に何もしなくてもすぐに更新した内容が有効になりますが、DNSではキャッシュをフラッシュするという1手間が必要です。これはDNSサーバが何であっても同じです。
急ぎでなければ24時間経つと取得済のDNSリゾルバキャッシュは無効になって新たにDNSサーバに問い合わせを行うのでその時点で新しいホスト情報が有効になります。
ちなみにipconfig /displaydnsを行うとその時点で持っているDNSリゾルバキャッシュを表示することができます。
サービスの再起動を行っておけばOKで、すぐに確認したい場合はipconfig /flushdnsを行えば良いということですね。
突然のコメントにもかかわらず懇切丁寧でわかりやすい解説をしていただき大変助かりました。ありがとうございました!
がと様
はじめまして。当HPで手順を見て設定をしたのですが、うまくいかないところがございます。
nslookupの手順でつまづいていて、nslookupに失敗しているのです。
問題切り分けをしたところ、unbound-control.exe reloadをCMDで実行したところ、
以下のエラーメッセージが出ております。
[1633750260] unbound-control[4452:0] error: connect: Connection refused.
for 127.0.0.1 port 8953
内容としては、127.0.0.1がport8953に対して疎通性がとれないということの認識ですが、
どのようにしたら解決できますでしょうか?
お忙しいところ恐縮です。ご確認いただけますでしょうか
Winedows用のUnboundは4年ほど前に記事に書いた頃とだいぶ変わっているようです。記事の内容はだいぶ手直しが必要な感じです。
nslookupが失敗するようでしたら、とりあえずWindowsの管理機能の「サービス」でUnboundサービスが起動していることを確認してみてください。
起動していないようであれば「サービス」でUnboundを起動してnslookupを試してください。それで問題ないようであれば、Unboundがサービスの自動起動失敗する部分を直すことになるかと思います。(その部分を確認中です)
がと様
タカシジャンボイモです。
お早い回答いただき、誠にありがとうございました。
いただいたアドバイスにもとづき確認をしたところ、うまくいきました。
ご参考までに、下名が対応した手順をお伝えいたします。
[1]Windowsの管理機能の「サービス」を開く
[2]プログラム「Unbound DNS validator」を起動する。
#デフォルトだと、この部分が無効になっていました。
[3]起動したことを確認する。
その後はコマプロのnslookup http://www.google.comの確認 ⇒ 想定通り回答あり
nslookup http://www.baidu.com ⇒ 想定通り回答無し
[4]DNSの設定を各PCやスマホに実施
[5]googleの閲覧をし、アクセス可能であることを確認。
[6]baiduの閲覧をし、アクセス不可であることを確認。
無事動いたようで良かったです。Unboundは4年前からのChangelogを見るとかなり多くの変更・修正点がありましたが、「がとらぼ」の超基本的な設定部分では特に大きな影響はなかったようです。ただ、この記事で触れてなかったremote-controlコマンドは、設定で許可しておかないと利用できないのでその部分のとっかかりになる点についてだけ記事を作りました。WindowsでもUnbound (Remote controlの準備)になります。