社外からプライベートなDNSレコードを引く方法

こんにちは、ひろかずです

表に出せないDNSレコードを、社外からこっそり引きたい。でもDNSサーバーは管理したくない。という声が聞こえてきたので、一筆書きます

tl;dr的な何か

  • Route 53 Private Hosted Zone + Route 53 Resolver + AWS Client VPN で実現できます
  • Netskopeが動いていても、AWS Client VPNをSplit tunnelで構成して、Netskope側でAWS上のEC2に紐付けたFQDNをExceptiopnすれば動作します

ざっくり構成

前提条件

  • 管理者として操作可能なAWSアカウントを所有していること
  • 当該AWSアカウントには、VPCと2つ以上のAvailability Zoneが異なるサブネット、および当該サブネット上に動作確認に使えるEC2が構成されていること
  • (オプション)管理者として操作可能なNetskopeテナントを所有していること

参考ドキュメント

工程

  1. Security Groupの作成
  2. プライベートホストゾーンを構成する
  3. Route 53 Resolver Endpointを構成する
  4. AWS Client VPNを構成する
  5. NetskopeでExceptionする(オプション)
  6. 動作確認

1. Security Groupの作成

  • プライベートホストゾーンとRoute 53 Resolver Endpoints、AWS Client VPN Endpointを配置するVPCに以下のSecurity Groupを作成する

1-1. Route 53 Resolver エンドポイント用のSecurity Groupの作成

  • インバウンドルールは、以下のように設定する

  • アウトバウンドルールは、以下のように設定する

1-2. AWS Client VPN エンドポイント用のSecurity Groupの作成

  • インバウンドルールは作成しない
  • アウトバウンドルールは、以下のように設定する

2. プライベートホストゾーンを構成する

  • AWS管理コンソールからRoute 53管理画面を開いて、ナビゲーションペインの[ホストゾーン]を選択
  • [ホストゾーンの作成]を選択

  • ドメイン名を入力して、[プライベートホストゾーン]を選択
    • 今回は、fnifni.netというドメイン名を設定します
    • 既にパブリックホストゾーンとしてfnifni.netを構成していますが、プライベートホストゾーンとして同名のドメイン名を登録可能です
  • プライベートホストゾーンを紐付けるVPCとリージョンを指定
  • [ホストゾーンの作成]を選択

  • 作成したホストゾーン(プライベート)を選択して、DNSレコードを登録
    • 今回は、internal.fnifni.netというレコード名でAレコードとTXTレコードを登録しました
    • internal.fnifni.netのAレコードには、動作確認用EC2のプライベートIPアドレスを設定しています

3. Route 53 Resolver Endpointを構成する

  • AWS管理コンソールからRoute 53 Resplverの管理画面を開いて、[エンドポイントの設定]を選択
  • プライベートホストゾーンを設定したリージョンが選択されていることを確認
  • 今回のユースケースでは、DNSクエリの方向を[インバウンドのみ]を選択して、[次へ]を選択

  • エンドポイント名を入力して、プライベートホストゾーンを紐付けたVPCを選択
  • 事前に作成した、Route 53 Resolver Endpoint用のSecurity Groupを設定

  • IPアドレス#1のアベイラビリティゾーンを選択し、Endpointを配置するサブネットを選択

  • IPアドレス#2のアベイラビリティゾーンを選択し、Endpointを配置するサブネットを選択
  • 画像は省略
  • [次へ]を選択し、[送信]を選択

Route 53 Resolver EndpointのIPアドレスを確認

  • AWS管理コンソールからEC2管理画面を開いて、ナビゲーションペインの[ネットワークインタフェース]を選択
  • 検索窓でrouteと入力し、表示されたネットワークインタフェースのIPアドレスを控えておく

4. AWS Client VPNを構成する

  • 手順は、 [クライアント VPN の開始方法] を参照
  • 設定のポイント
    • その他のオプションパラメータの項で、DNSサーバー[1,2]IPアドレスとして、控えておいたRoute 53 Resolver EndpointのネットワークインタフェースのIPアドレスを設定
    • その他のオプションパラメータの項で、[スプリットトンネルを有効にする]のチェックボックスを有効に設定

5. NetskopeでExceptionする(オプション)

  • Netskopeが動作している場合は、AWS環境のEC2のFQDNをExceptionします
  • Netskope管理画面から、[Settings] > [Security Cloud Platform] > [Steering Configration] > 対象のSteering Configrationを選択 > [Exceptions] > [NEW EXCEPTION]を選択して、AWS環境のEC2のドメイン
    internal.fnifni.netを登録

6. 動作確認

  • まずは、AWS Client VPNを接続せずに、internal.fnifni.netを引いてみます
    • 引けませんね
    • ローカルのDNSを参照してますね

  • 次に、AWS Client VPNを接続して、internal.fnifni.netを引いてみます
    • 引けましたね
    • Route 53 Resolverのエンドポイントを参照してますね

  • そのまま、TXTレコードも引いてみます
    • 引けましたね
    • Route 53 Resolverのエンドポイントを参照してますね

  • internal.fnifni.netにcurlで接続もできます

Netskopeが動作している環境でも、問題なくPrivate Hosted ZoneのDNSレコードが引け、EC2にWebアクセスすることができました。

今日はここまでです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です