こんばんわ。今回は、Cloudflareが無償で提供しているDNSサービス"1.1.1.1 for Families“を使って、家族が誤って変なサイトに接続しないようにする方法について取り上げます。

家族(子ども)とネット

家庭に子どもができるとインターネット環境へのアクセスを考えることが度々あります。

まず、デバイスから。初めのうちは、TV内蔵のYoutubeを見始めて、次いで、親のスマホをちょっと触り、どんどん「通常」のインターネットに近寄っていきます。ちょっと学校の宿題を調べたいからスマホ使わせてよ。iPadでAmazonの検索を始めるとか。

ここまでくるとやはり心配になります。変なコンテンツ(アダルト・フィッシングサイト)にアクセスしてないか、とかです。Appleとか使っていると、Parental Controlという機能があって、子どもが変な操作したり・コンテンツにアクセスする制限がある程度できるようになっているのですが、あくまでApple系サービスとかに限った話になります。Safariブラウザ開いてでどんなコンテンツにアクセスしているのかとかまでは見てくれません。

そういった問題への一つの対策としてCloudflareが無償で提供しているDNSサービスの"1.1.1.1 for Families"が使えます。

DNSでブロックするサービス “1.1.1.1 for Families”

簡単にいうと、怪しいサイトへアクセスするときに、名前解決時点で「このサイト怪しいのでブロックするぜ」というサービスです。設定方法は簡単で、PCもしくは家庭内のルーターでDNSサーバ(リゾルバ)の設定を以下に設定するだけです。

1.1.1.3
1.0.0.3

# IPv6なら
2606:4700:4700::1113
2606:4700:4700::1003

このDNSを使用しているときに、ブラウザでアダルトサイトにアクセスすると以下のようになります。

以上が概要です。以下、このサービスの仕組みと家庭内のルーターに設定する方法などを見ていきます。

仕組み

先ほど触れた通り、仕組みは名前解決を使用したアクセス制限になります。名前解決とは、インターネットのサイト名(例: www.google.com)からそのサイトのウェブサーバのIPアドレスを調べる仕組みになります。通常インターネットの世界ではIPアドレスで通信を行います。例えば、192.168.1.1とか8.8.8.8などの表記を見かけることがあると思いますが、これがIPアドレスです(今回の例はIP version4というのもので略してIPv4と書きます)。

私の環境からwww.google.comのIPアドレスを調べると、

% dig www.google.com +short
216.58.197.196

となって、216.58.197.196となります。

この、サイト名とIPアドレスの変換をしてくれるのがDNSです。通常、このDNSはデフォルトで使っているプロバイダ(ISP)指定のDNSになっているのですが、今回はそれを上記のCloudFlareが提供するDNSに変更するということになります。

そうすると、普段ネットでどこかのサイトを開くときに、この名前解決のリクエストがCloudFlareのDNS上に届き、このDNS上で「怪しい」もしくは「アダルトサイト」と判断されたサイトの場合にはそのサイトのIPアドレスに変換しない(応答しない)ことでサイトへの接続を遮断してくれるのです。その結果がさっきのスクショになります。

家庭内のルーターへの設定例

家庭内のネット接続では家の中にルーターがあって、そこにプロバイダ指定のDNSがデフォルトで設定されています。私の家だとNuroを契約していて、プロバイダ(Nuroのプロバイダは実質So-net)が送ってきたルーター(ZTE製F660A: 実質レンタル品)に設定方法を書いていきます。他者の場合でもほとんど同じように設定できると思います。

まず、ブラウザでルーターの管理を開きます。大抵192.168.0.1もしくは192.168.1.1になっていることが多いと思います。

このルータの場合、メニューから

アプリケーション»DNSサービス»DNS

に行くと、DNS設定の項目があるので、上記のDNSを設定します。

もしくは、DNS設定はDHCPという項目に含まれることが多いので、他のルータの場合も探してみてください。

あとは設定ボタンを押せば完了です。設定直後は、PCやタブレット・スマホの場合、一度Wifi・ネットワークをOFFにしてら再度ONにするなどしないとDNS設定が変わらないかもしれません。

テスト

テストは簡単です。ブラウザを開いて、怪しいサイトを開いてみれば分かります。サイトの判定は全部CloudFlareがやっています。

誤判定

正規のサイトに行っているのに遮断されることがたまにあります。今まで発見した誤遮断されたサイトとして楽天カードの申込ページなどがありました。まあ、変なサイトにつなぎに行くより(False negative)、正規のサイトに繋ぎに行かない(False positive)方が安全といえば安全かもしれませんが。

その他

上記で詳しく書きませんでしたが、この"1.1.1.1 for Families"には2つのモードがあります。「マルウェアサイトのみをブロック」するモードと「マルウェアサイトとアダルトサイトをブロック」するモードです。違いは設定するDNSサーバのIPアドレスなので、切り替えも簡単です。詳しくは公式サイトのアドレス設定を見てください。

あと、ブロックされるサイトの名前解決クエリに対してどのようなレスポンスが返ってきているのかを見てみましょう。

% dig jp.pornhub.com  @1.1.1.3 

; <<>> DiG 9.10.6 <<>> jp.pornhub.com @1.1.1.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59703
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;jp.pornhub.com.			IN	A

;; ANSWER SECTION:
jp.pornhub.com.		60	IN	A	0.0.0.0

;; Query time: 6 msec
;; SERVER: 1.1.1.3#53(1.1.1.3)
;; WHEN: Sun May 24 19:57:22 JST 2020
;; MSG SIZE  rcvd: 73

こんな感じで0.0.0.0が返ってきてるんですね。

まとめ

「どうやって子どもたちにネットを開放していくか」問題に対して、CloudFlareが無償で提供する"1.1.1.1 for Families"を使った対策と設定方法について書きました。普段はあまり目立たないと思いますが、いざというときの手段として使えるんじゃないかと思います。

同じような仕組みで、一日のyoutubeアクセス時間をカウントして制限するようなものがあると助かります。コロナの影響で学校がなくてYoutube漬けになっているのをなんとかしたい。。。なければ、書くしかないのかなあ。そういうリゾルバサービスで攻めるのもありか。