ローカルDNSを使ってヘアピンNATルータの代わりにする
目次
自宅のルータがヘアピンNATに対応していない問題に対応した際のメモ。
ヘアピンNATとは、内部ネットワークから公開されている自分の外部IPアドレス(例: サーバ)にアクセスする際に、リクエストをルータが受け取り、適切に内部ネットワークの該当デバイスに転送する機能を指します。
この機能がないと、ローカルネットワーク内のPCやスマートフォンは、同じローカルネットワーク内にあるサーバに、サーバの公開ドメイン名を使用してアクセスすることができません。
例えば、 example.com
というドメイン名で公開している自宅のサーバに、家の中からアクセスしたい場合、通常のルータ設定だとこのサーバにアクセスできません。
これを解消するためには、ローカル環境のみで、公開しているドメインのIPアドレスを、ローカルIPアドレスとして解決するDNSサーバを構築する必要があります。 この記事では、その方法をご紹介します。
dnsmasqの設定
今回はDockerコンテナで dnsmasq を動かすことにします。
dnsmasqの設定ファイルである dnsmasq.conf を作成します。
dnsmasq.conf
の例
|
|
Dockerfileの作成
Dockerfile を作成します。
Alpine LinuxベースでDockerイメージを使用して dnsmasq をインストールし、前述の設定ファイルをコピーしています。
|
|
Docker イメージのビルド
上記の Dockerfile を用いてDockerイメージをビルドします。
mydns
という名前でイメージをビルドしています。
|
|
Docker コンテナの起動
イメージがビルドされたら、それを使用してコンテナを起動します。
DNSサービスは53番ポートで動作するため、ホストの53番ポートをコンテナの53番ポートにマッピングします。
|
|
-d:
バックグラウンドでコンテナを実行します。
-p 53:53/udp:
UDPの53番ポートをホストとコンテナでマッピングします。
--name mydns_container:
コンテナに mydns_container
という名前をつけます。
動作確認
DNSサーバが正しく動作しているかを確認するために、dig コマンドを使用します。
|
|
出力結果の中で、以下のような部分が表示されることを確認します。
|
|
以上で、Docker上にDNSサーバの構築は完了です。 DockerサーバのIPアドレスをクライアントのDNSサーバに設定することで、ローカルDNSサーバを使用することができます。
作成者 Eggpan
最終更新時刻 2023-09-08