EdgeRouter X – 10. 海外から見られないサイトを見る2 ( Domain Based Routing / Dnsmasq )

さて今回は、対象のサイトを VPN トンネル経由でルーティングする際に、 IP アドレスでなくドメイン名を使う手法で設定してみます。 EdgeRouter 内蔵の軽量 DNS サーバー Dnsmasq を使います。 対象ファームウェアは 1.9.1 です。

この機能を使うと、対象のサイトのドメイン名を指定するだけで、自動的にそのサイト向けのトラフィックが拠点間 VPN を通るようになり、 L2TP VPN をオンにしたりオフにしたりとか面倒な作業をすることなく、あたかもその地域にいるかのように LAN 内のすべての端末から地域制限のかかったサイトが見られるようになります。消費者が買えるルーターでこの機能を備えてるのは世界でも EdgeRouter だけのようです。 $49 でそんなルーターが買えてしまうなんて、ほんと末恐ろしい世の中になったものです。

Dnsmasq とは

Dnsmasq とは主に小規模ネットワーク向けの DNS サーバー兼 DHCP サーバーソフトウェアです。 BIND 等に比べてものすごく軽量で、ものすごく設定が簡単です。

今回はこのような作業になります。

  1. Firewall で 空のアドレスグループを作る
  2. Dnsmasq に対象ドメイン名の IP アドレスをアドレスグループに記録させる
  3. Firewall で前回と同じく modify ルールを設定
  4. さらに Dnsmasq で、対象ドメイン名にアクセスする際は日本の DNS を使うよう設定する

これで、ドメイン名によるルーティング制御が可能になります。これは Domain Based Routing と呼んでしまって差し支えないでしょう。対象のサイトの IP アドレスが変わっても Dnsmasq がどんどんアドレスグループに記録していくので安心です。

それでは今回は TVer.jp を例に設定してみます。 TVer.jp はテレビ局各局のオンデマンド配信サービスを合わせたサイトなので、 VPN トンネル経由でルーティングしなければならないサイトが各局別にたくさんあり、かつ一定時間で IP アドレスが変わるものが結構あります。前回の IP アドレスベースのルーティングではそれら全てを押さえるのはとても大変ですが、ドメイン名ベースのルーティングならなんとかなりそうです。なんども言うようですが、これらは ER-X の潜在能力の高さを示す設定例です。地域制限のかかったサイトはその地域でみるようにしましょう。

Firewall で 空のアドレスグループを作る

Dnsmasq が IP アドレスを記録するための空のアドレスグループをつくります。名前は tver-ipset にしました。

set firewall group address-group tver-ipset
set firewall group address-group tver-ipset description tver.jp

Dnsmasq に IP アドレスをアドレスグループに記録させる

続いて Dnsmasq が対象のサイトの IP アドレスを tver-ipset アドレスグループに記録するようオプションを設定します。オプションの書式は ipset=/ドメイン名/アドレスグループ です。ちなみにドメイン名を “xxxx.com” と記述した場合は、”*.xxxx.com” が全て含まれることになります。今回は TVer.jp 内のビデオをストリーミングしてそうなドメイン名を列挙しました。ついでに Dnsmasq のキャッシュサイズを増やします。

## キャッシュサイズを増やす
set service dns forwarding cache-size 5000

## Dnsamasq が自分自身を DNS サーバーとして参照できるようにする (もう設定してあれば不要)
set service dns forwarding listen-on lo

## IP アドレスを記録するドメイン名を設定
set service dns forwarding options ipset=/tver.jp/ntv.co.jp/tv-asahi.co.jp/tbs.co.jp/fujitv.co.jp/presentcast.co.jp/brightcove.com/brightcove.net/streamhub.tv/stream.ne.jp/tver-api-data.s3.amazonaws.com/tver-ipset

Firewall で前回と同じく modify ルールを設定

それでは前回作った Modify の route_tun0 にルールをを追加します。

set firewall modify route_tun0 rule 20
set firewall modify route_tun0 rule 20 action modiofy
set firewall modify route_tun0 rule 20 description TVer.jp
set firewall modify route_tun0 rule 20 destination group address-group tver-ipset
set firewall modify route_tun0 rule 20 modify
set firewall modify route_tun0 rule 20 modify table 1

Dnsmasq に特定の DNS を使うよう設定する

対象サイトにアクセスする際に、念のため Dnsmasq に日本の DNS を使うように指示します。オプションの書式は server=/ドメイン名/DNSサーバーの IP アドレス です。ここでは実家のインターネットプロバイダーの DNS が 208.67.222.123 だったとしますが、お使いのプロバイダーに合わせて変更してください。

## 同じドメイン名のサイトで日本の DNS を使うよう設定
set service dns forwarding options server=/tver.jp/ntv.co.jp/tv-asahi.co.jp/tbs.co.jp/fujitv.co.jp/presentcast.co.jp/brightcove.com/brightcove.net/streamhub.tv/stream.ne.jp/tver-api-data.s3.amazonaws.com/208.67.222.123

これで終了です。サイトにアクセスしてみる前に、 Dnsmasq がきちんと IP アドレスを記録するため、ネットワークユーティリティ等の Lookup を使って、予めアクセスしそうなドメインを lookup しておくとスムーズにアクセスできます。でなければサイトが正常に表示されるまで数回リロードが必要だったりします。きちんと設定できているのにうまく表示されない場合は、一度 cookie を全部消去して見るといいでしょう。

今回参考にしたのは下記のスレッドです。

Dnsmasq Ipset

以上、お疲れ様でした。


Home > Gadgets > EdgeRouter X – 10. 海外から見られないサイトを見る2 ( Domain Based Routing / Dnsmasq )