Google Apps 用 tinydns の設定

2008-05-23 追記: example.jp に CNAME を設定していたため MX 参照が失敗していました。ごめんなさい。

個人で持っているドメインGoogle Apps で使えるように tinydns を設定しました。ほんとは djb products あんまり好きじゃないんですが,知り合いのネームサーバを間借りしたのでやむなく。Google さまネームサーバのホスティングもやってくれないかなぁ。

自分用メモなので内容については一切無保証です。設定をのちのち変えるのが面倒&alias domain mail を使いたかったのでワイルドカード DNS を使用しています。ドメインのすべてを Google におまかせしてもいい&最悪メールのやりとりができなくなってもいいという方以外おすすめできません。

#### for example.jp

#### Name Server

#.example.jp:192.168.0.1:ns.example.com
.example.jp::ns.example.com

#### for activation
CgoogleXXXXXXXXXXXXXXXX.rot.jp:google.com

#### MX

@example.jp::aspmx.l.google.com:1
@example.jp::alt1.aspmx.l.google.com:5
@example.jp::alt2.aspmx.l.google.com:5
@example.jp::aspmx2.googlemail.com:10
@example.jp::aspmx3.googlemail.com:10
@example.jp::aspmx4.googlemail.com:10
@example.jp::aspmx5.googlemail.com:10

@*.example.jp::aspmx.l.google.com:1
@*.example.jp::alt1.aspmx.l.google.com:5
@*.example.jp::alt2.aspmx.l.google.com:5
@*.example.jp::aspmx2.googlemail.com:10
@*.example.jp::aspmx3.googlemail.com:10
@*.example.jp::aspmx4.googlemail.com:10
@*.example.jp::aspmx5.googlemail.com:10

#### Aliases
#Cexample.jp:ghs.google.com ←間違っていた
C*.example.jp:ghs.google.com

EZ-NET 特集: DNS サーバ djbdns のインストールと設定: tinydns-data 形式 が bind での記述との対比もあり大変参考になりました。

activation で指定している CNAME レコードは適宜書き換えてください。一度 activate された後は削除しても問題ないと思います。MX の precedences は(Google から配布されている資料ですら)まちまちなので,適当に設定してあります。

おまけ: ワイルドカード DNS について

ほんとうは,ワイルドカード DNS を使うのは,特有のくせもあり,おすすめできません。せいぜい MX に使うにとどめたほうがよいそうです(上記の例では ワイルドカード CNAME も使用しています)。

参考文書をあげます。

後者のほうがプレゼン資料なので箇条書きになっておりわかりやすいです。より詳細に知りたい場合前者を参照するとよいでしょう。後者からおもにワイルドカード A レコードについての懸念事項を抜粋してコメントをつけていきます。

Wildcard A を設定した場合に考慮すべき技術的事項
  • Web 以外のインターネットサービスへの影響(例: メール)
  • 「そのドメイン名が存在しない」ことを利用したサービスへの影響(例: スパムフィルタ)
    • 現代ではあんまり意味がないような気がする
  • ネットワーク資源の消費(例: Not found, Connection timeout で済んでたのに…)
    • 現代ではあんまり意味がないような気がする
  • 国際化ドメイン名(IDN)への影響
    • おもに TLD レベルでの影響だと思う。のでパス。
  • キャッシュ残存による影響
    • 今回の Google Apps では関係ない。のでパス。
  • Web ブラウザに表示されるエラーメッセージ(の localization)
    • これ原典にあたってもいまいち理解できなかった
  • Single Point of Failure の可能性
    • それいったらキリがないのでパス。

あと,プレゼン資料にはなかったけど原典にあったものとして,

typo されたメールアドレス宛メールをスーパードメインの管理者が読んでしまう

たとえば,

  • example.com
  • research.example.com

で管理がわかれている(research. に管理を移譲している)場合,typo した []foo@resarch.example.com[] 宛のメールは本来バウンスされるべきなのに,ワイルドカード MX が設定されていると example.com の管理メールサーバ宛にメールが届く可能性があります。プライバシーの侵害とか漏洩とかいろいろ。TLD の場合やサブドメインを切り売りしている場合特に問題となりそうですが,一般的にはまぁ問題ないでしょう。今回の Google Apps の場合も問題なし,とみなします。

大昔,レゾルバによっては脆弱性が発生していた

RFC1535 セキュリティ問題と広く実装するDNSソフトウェアの提案された訂正 によると,レゾルバの実装がまずいと問題がおきていたらしいです。

たとえば,

  • hoge.foo.example.jp(マシン名が hoge

から

  • bar.example.com

telnet しようとして,telnet bar.example.com と打った場合。実は absolute FQDN 的には bar.example.com. のように末尾に .(ドット)を付けるのが正しいのですがそれが省略されている,とみなされます。

このとき,レゾルバは

  1. bar.example.com.foo.example.jp.
  2. bar.example.com.example.jp.
  3. bar.example.com.example.jp.
  4. bar.example.com.jp.
  5. bar.example.com.

の順に名前を解決していました。

通常であれば最後の名前以外は name not found になるので結果的に bar.example.com にアクセスしていました。しかし,example.jp.com.jp.ドメインワイルドカード DNS が登録されている場合,事前にマッチします。なので,偽 telnet サーバをたちあげておけばアカウントを盗むことが可能だったわけです。

いまどきはこんな名前解決はしないので大丈夫ですが,こういうこともあった,というお話として。

ワイルドカード DNS の直感と異なる挙動

http://testwiki.xn--xnq.jp/index.php?%A5%EF%A5%A4%A5%EB%A5%C9%A5%AB%A1%BC%A5%C9 が非常にわかりやすいです。

  • 不特定の様々なホスト名を制御するために補助的に用いる。
  • 同じホスト名を持つ他のレコードが存在すると、(MX などの種別が違っても)無視される
  • NS レコードによって委譲されたサブドメインには関与しない
http://testwiki.xn--xnq.jp/index.php?%A5%EF%A5%A4%A5%EB%A5%C9%A5%AB%A1%BC%A5%C9

2番めの条件が重要です。RFC 1912 からちょっと改変して引用します。

よくある間違いは、あるゾーンのワイルドカード MX がそのゾーンのすべてのホストに適用されると考えてしまうことです。ワイルドカード MX は DNS でそのゾーンのまったく定義されていない名前に対してのみ適用されます。

2.7 ワイルドカード(wildcard) レコード
foo.example.com. IN A 192.168.0.100
*.example.com. IN MX 10 mail.example.com

この設定で []baz@foo.example.com[] 宛にメールを送ろうとした場合,一見 mail.example.com に届きそうです。ですが,foo.example.com の MX レコードを検索しようとした時,foo.example.com のレコード自身は(A レコードながら)存在します。なので foo.example.com の MX レコードは(ワイルドカードにはマッチせず)未定義という結果になります。そして MX は未定義ですが A レコードがあるので,(おおくの MTA では)A レコードを implicit MX とみなし*1192.168.0.100 宛に送ります。