💻

DNSの名前解決をしたら、仮想サーバーのIPv4アドレスが表示された

に公開

1. IPv4アドレスが表示されない問題が発生

以前の記事で、仮想サーバーにHTMLファイルをアップロードに関する事を書いた。
その後再度起動すると、IPv4アドレスが表示されずアップロードした内容が閲覧出来ない自体が発生した。しかも、たまにアドレスが表示されることもあり、どういう場合に表示/非表示になるのか分からない。
ネットワークモードは「ブリッジ」にしており、アドレスはDHCPで動的に割り振られている。
また、 sudo apt update を行うと、 ports.ubuntu.com でfailed to fetchが発生していた。
ping google.comでインターネット接続を試みると、 ping: google.com: Temporary failure in name resolution というメッセージが出力された。

という事は、名前解決に関して問題が発生しているという事までは判明した。
どうすれば解決出来るだろうと色々調べていると、どうやらDNSに関する問題があるらしい事がわかった。

2. 解決の過程

  • 原因の特定:
    sudo nano /etc/resolv.conf というファイルにDNSサーバーの設定が以下のように記載されていた。
nameserver 127.0.0.53
options edns0 trust-ad
search .

この記述内容だとローカルDNSキャッシュサーバーを指定しているので、外部との接続における名前解決が出来なかったようである。
なので、まずは name server を以下のように直した。

nameserver 8.8.8.8
nameserver 8.8.4.4
options edns0 trust-ad
search .

上記のように修正した後、再度 ping google.com で確認すると、まだ名前解決が出来ていなかった。
再度調べたら、名前解決を行う設定ファイル /etc/systemd/resolved.conf を修正する必要があることが分かった。

3. DNS設定の変更

sudo nano /etc/systemd/resolved.conf を入力してみると、30行ほどコメントアウトされたテキストが表示された。
その中で、Resolveの下にDNSとバックアップ用のDNSを設定する項目があったので、ここを編集した。

[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=8.8.8.8 8.8.4.4

編集後は、 sudo systemctl restart systemd-resolved を実行して、再起動を行って設定を反映させた。

4. シンボリックリンクの確認と更新

/etc/resolv.conf が正しいリンク先を指しているか確認し、systemd-resolved が管理しているDNS設定が有効になっていることを確認する。
以下のコマンドを使用して、/etc/resolv.conf を適切に設定した。

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

5. 遂にインターネット接続を確認

再度 ping google.com を実行した所、今度は名前解決が成功しインターネット接続が確認出来た。lp a でIPv4アドレスも表示されている事を確認出来た。そして、以前アップロードしたファイルも閲覧出来た。

最後に: DNS設定の重要性

このように、DNSの設定が正しく行われていなかったため、仮想サーバーは外部のサイトに接続することが出来なかった。しかし、正しいDNSサーバー(8.8.8.8)を設定することで、名前解決の問題が解消され、インターネット接続が復旧した。
DNSの設定だけでもかなり手間取ったので、ネットワーク分野は途方もなく広大である事を痛感した時間であった。

今回の解決方法まとめ

  • /etc/systemd/resolved.conf を編集し、適切なDNSサーバーを設定。
  • インターネット接続を確認。

Discussion