2014年10月9日木曜日

OpenWrtで家庭内DNSの利用強要

OpenWrtではdnsmasqをDNSキャッシュとDHCPサーバとして利用しています。

このdnsmasqは、設定次第で独自の名前→IP変換をしてくれますので、例えば参照したくない広告を出すホストに対し、ダミーIPアドレスを設定して広告をブロックするといったことができます。しかし、家庭内LAN上のクライアントで、独自に、例えばgoogleのDNSの8.8.8.8を見る!なんて設定してしまうと、そちらを見に行ってしまい、折角ブロックしたはずの広告が表示されてしまいます。

ここでは、そういうクライアントが独自にDNSを設定していても、OpenWrt上のdnsmasqを見に行くようにする設定を実施します。

作業は簡単で、
  1. iptables-mod-nat-extraをインストール
  2. firewallの設定ファイルでOpenWrt上のdnsmasqを見に行くルールを登録
  3. firewallをリスタート
の3ステップです。まず、System→Softwareから、まずソフトウェアリストを更新します。それから、Filterにiptables-mod-nat-extraと入力して、インストールするソフトを検索し、インストールします。インストール後ですが、こんな画面です。


そうしたら、sshでログインし、 /etc/firewall.userに以下の2行を追加します。
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
後は、以下のコマンドでfirewallを立ち上げ直すと完了です。
# /etc/init.d/firewall restart
/etc/firewall.userに記述したルールは、firewallの説明にあるように、自動的に読み込まれて実行されます。

追加した1行目は、このルータに届くtcpのうち、53番ポート(DNSのポート)宛のパケットを、宛先に関わらず、強制的にこのルータの53番ポート(dnsmasqが走ってるポート)にリダイレクトします。2行目は同様にudpをリダイレクトします。つまり、上述の例みたいに家庭内LANのクライアントが8.8.8.8などの外部のDNSを直接引こうとしていても、それを強制的にOpenWrt上のdnsmasqに転送してしまう、というわけです。

これで、dnsmasqで広告をブロックする準備が整いました(*´艸`*)

0 件のコメント:

コメントを投稿