どうも。先日はNTTがDNSブロッキングを開始したことが大きなニュースになりました。
そこで、今回はエンジニア向けの、DNSブロックに対応するための技術やツール、その仕組みを解説します。
あくまで海賊版サイトの利用を推奨するものではありません。
今回のDNSブロッキングでは、単純に国内のDNSサーバーから当該ホストのAレコード返答が帰ってこない種類のものでした。しかし、今後は国外DNSへの通信パケットをフィルタリングされたり、そもそも接続不可にされる可能性があります。
そのため、DNSリクエスト内容を暗号化したり、秘匿化する方法が有効になると考えられます。
DNS-over-HTTPS, DNS-over-TLS, DNS-crypt
これらは、名前解決を、暗号化されたレイヤーの上で実行したり、DNSの通信自体に暗号化を施したものです。CloudflareやFacebook、有志のDNSが対応しています。
Android、iOS、Windows、Linuxなど、OSを選ばずにクライアントが公開されているので、難しいことをせずにすぐ利用wすることができます。
参考:Cloudflareが1.1.1.1で超高性能DNS始めたし、いっちょ俺のパソコンもDNS over HTTPSしてみる
DNS-over-Proxy
従来のSOCKSプロキシを使用するDNS名前解決です。これは自力でサーバーを構築する必要がありますが、サーバー自体は普通のProxyサーバーで済むことができます。
SOCKS Proxyよりも強固な暗号化・秘匿化を求める場合には、ShadowSocksと呼ばれる技術があります。ShadowSocksは中国のグレートファイアウォールを回避するために作られたプロトコルで、JSONを使った軽量・高速な通信ができるとのことです。
VPN
VPNは最も有名なブロッキング回避技術です。OpenVPNやIPsecなどがありますが、一番高性能なものはSoftEtherVPNです。通称VPN-over-HTTPSと呼ばれる、L2接続をHTTPS接続の上で使用できる(偽装できる)通信方式に対応しています。
その他にも、VPN-over-ICMPと呼ばれるPing通信の上にVPNを構築するもの、VPN-over-DNSと呼ばれるDNS通信の上にVPNを構築できるものなど、強固な通信方式をサポートしています。
フルリゾルバの構築
これは、8.8.8.8や1.1.1.1などの、自身がキャッシュとなり、世界中のルートサーバー、権威サーバーへDNS問い合わせをするDNSサーバーです。上位サーバーなどが存在せず、本来の名前解決を提供しているサーバーへ問い合わせに行くため、ブロック対象になりません。
OpenNIC
OpenNICは、世界に13種類あるルートサーバーを勝手に増やして、自分たちで新しいトップレベルドメインを運営するプロジェクトです。ルートサーバーや、キャッシュサーバーが存在するため、設定するだけで使用できます。
Namecoin
Namecoinは、DNS情報をブロックチェーンで管理するプロジェクトです。すでにあるドメインを登録することはできず、新しく「*.bit」ドメインを登録することになります。
P2Pで接続できるため、ブロッキングされた時用にサービス側が取得しておくのがいいかもしれません。
似たようなものに、Torのhidden service(.onionドメインが分散ハッシュテーブルで管理される)やI2Pのドメイン(hostsファイルを手動で共有する)、freenetが存在します。