GCP Cloud DNSで外部・内部の名前解決をする

2019.12.25 (水)

Cloud DNSはデフォルトでは外部のDNSの機能しかもっていなくて、内部、つまりGCPでいうところのVPC内の閉じたネットワークの名前解決はできないことになっています。自分でDNSサーバーを作成する際にはExternalとInternalでロケーションを分けて記述できるので、当然Cloude DNSでもできるだろうというのがあるのでいろいろ調べると「限定公開ゾーン」というやり方があるようです。
foo.example.comに対して、内部では192.168.0.5(ローカルIP)を引けるようにして、外部では123.456.789.xxx(グローバルIP)を引けるようにするということになります。基本的な外部の名前解決はすでにできるようになっていることが前提で解説します。

foo.example.com

を例にします。
Cloud DNS -> ドキュメント -> ガイド

スプリットホライズンDNS

外部・内部の名前解決をすることをスプリットホライズンDNSというらしいです。
スプリット ホライズン DNS
用語が非常に面倒ですが、外部向けのDNSゾーンを「一般公開ゾーン」、内部向けのDNSゾーンを「限定公開ゾーン」ということにしているらしい。(たぶん厳密には違う)

限定公開ゾーンの作成

  1. DNSゾーンの作成を新規で立ち上げます。
  2. ゾーンのタイプに「非公開」を選択します。
  3. DNS名を入力します。(すでに外部用に公開しているDNS名(ドメイン)である必要があります。)
  4. 説明を適当に入れます。
  5. オプションで「デフォルト 限定公開」を選びます。
  6. ネットワークで、限定公開するVPCを選択します。(複数選択することができます。)
  7. 作成ボタンを押して終了。


一般公開ゾーンには、NSレコードとSOAレコードがありますが、限定公開ゾーンではそのレコードがなしでゾーンが作成されます。またDNSSECも限定公開の場合はなしになります。


Cloud VPNでVPCにアクセスした際に、この限定公開ゾーンのDNSがひけるようするにはどうしたらよいか。通常ネットワークの設定では、インターネットに出るデフォルトゲートウェイを設定しておけば外部の(普通の)名前解決はできます。(あるいはプロバイダーが指定したDNSを指定する場合もあります。)ですが、内部公開用のDNSはDNSサーバーを直接指定して追加しておくと内部での名前解決はできますが、これは接続しているLAN内での話です。Cloud DNSの限定公開ゾーンはどのリゾルバを見ればいいのか?というのが、わかりずらい。今調べている途中です。