VPS初期設定からサイト公開まで ③独自ドメインを取ってHTTPS化する

#DNS #SSL

NginxでIPアドレスでのアクセスができるようになったので、次は独自ドメインを取得して、https:// で安全にアクセスできるところまで進める。
この回はDNSの仕組みを、手を動かしながら理解でき、いちばん「なるほど」が多かった。

そもそもドメインとは

作業に入る前に、ドメインとは何かを自分の言葉で整理しておく。

ドメインとは、インターネット上の「住所」にあたる名前だ。
example.com のような文字列がそれで、これを打てば自分のサーバーにたどり着ける。

本来、インターネット上のサーバーはIPアドレス(192.0.2.1 のような数字の羅列)で識別されている。でも、数字の羅列は人間には覚えにくいし、打ち間違えやすい。そこで、人間が覚えやすい名前をIPアドレスの代わりに使えるようにしたのがドメインだ。「数字の住所」に「覚えやすい名前」を対応させている、というイメージ。

ドメインは、右から左へ意味のまとまりが分かれている。example.com なら、

  • .com … トップレベルドメイン(TLD)。ドメインの一番大きな分類。.com .jp .net などがある。
  • example … 自分で決めた部分。取得したドメインの本体。

さらに左に何かを足すと、サブドメインになる。
このブログの blog.example.comblog がそれで、同じドメインの中を用途ごとに枝分かれさせられる。

ドメインは「借りている」もの

もうひとつ理解しておきたいのが、ドメインは買い切りではなく、契約期間ごとの更新制だということ。
年単位で登録し、期限が来たら更新する。
更新を忘れると失効して、他人に取得されてしまうこともある。
「所有」というより「使用権を借りている」感覚が近い。

この「誰がいつまで借りているか」といった登録情報は、後で出てくるWhoisという仕組みで確認できる。

レジストリ・レジストラという登場人物

ドメインを取得するとき、いくつかの立場の組織が関わっている。名前だけ知っておくと、後の話が分かりやすい。

  • レジストリ … .com なら .com 全体を管理している大元の組織。ドメインの「戸籍」を管理していると考えるとよい。
  • レジストラ … 利用者にドメインを販売・登録してくれる窓口の業者。今回で言えばさくらインターネットがこれにあたる。

自分はレジストラ(さくら)を通じてドメインを申し込み、その情報が最終的にレジストリに登録される。
この「登録が世界に伝わる」過程が、後で出てくる浸透待ちにつながっていく。

ドメインを取得する

まずドメインを取得する。
ドメインはさくらのドメインで取得した。
管理をVPSと一箇所にまとめられること、業務でも使われる場面が多いことが決め手。

DNSとは何をするものか

ここからがDNSの話。
DNSは「ドメイン名 → IPアドレス」を変換する仕組みで、いわばインターネットの電話帳だ。example.com と打つと、DNSが「その名前のサーバーはこのIPアドレスですよ」と教えてくれて、ブラウザがそこにたどり着ける。

自分でドメインを取ると、この「名前とIPの対応づけ」を自分で設定することになる。
それがDNSレコードの設定。

ゾーン編集でAレコードを追加する

さくらの管理画面で「ゾーン編集」を開き、Aレコードを2つ追加した。

エントリ名タイプデータ
(空欄)AVPSのIPアドレス
wwwAVPSのIPアドレス

Aレコードは「ドメイン名をIPv4アドレスに対応させる」もっとも基本的なレコード。
空欄が example.com そのもの、wwwwww.example.com に対応する。
両方をVPSのIPに向けることで、wwwのあり・なしどちらでもアクセスできるようにした。

ちなみに「ゾーン」というのは、そのドメインに関する設定(レコード)のまとまりのこと。
ゾーン編集の画面は、そのまとまりを編集する場所になる。

Aレコード以外にも、メールの宛先を決めるMXレコード、認証などに使うTXTレコードなど、いろいろな種類があることも知った。
TXTレコードは後々Search Consoleの認証で使うらしいので、頭の片隅に置いておく。

SERVFAIL:設定したのにアクセスできない

Aレコードを保存して、すぐに反映を確認しようとしたら、エラーが出た。

dig hrn-i.com
# → status: SERVFAIL

一瞬、設定を間違えたのかと焦ったが、
調べると、これは設定ミスではなく「浸透待ち」の状態だった。

ドメインを取得した直後は、「このドメインはさくらのDNSが管理しています」という情報が、世界中のDNSサーバーに伝わりきっていない。
この情報が行き渡るまで、数十分から、長いと数時間かかる。その間はどこに問い合わせればいいかわからず、SERVFAILになる。

ネームサーバーが正しく設定されていることを確認して(さくらの場合 NS1.DNS.NE.JP / NS2.DNS.NE.JP)、あとはひたすら待つ。

Whoisとゾーン情報の違い

待っている間に、関連する用語も整理した。混同しやすい2つがある。

Whois は、ドメインの登録情報を照会する仕組み。
「誰が登録したか」「いつ取得していつ切れるか」「どのネームサーバーが担当か」がわかる、ドメインの戸籍のようなもの。

ゾーン情報 は、そのドメインに来たアクセスをどこへ案内するか(Aレコードなどの中身)。実際の道案内。

順番としては、世界のDNSがまずWhois的な情報で「このドメインの担当はさくらのネームサーバーだな」と知り、次にそのネームサーバーに問い合わせてゾーン情報(IPアドレス)を受け取る、という二段構え。
SERVFAILが出ていたのは、この一段目がまだ伝わっていない状態だった。

だから浸透したかどうかを確認するときは、Whois(戸籍)ではなく dignslookup(実際の道案内)を見るのが正しい。
ここは最初、どちらを見ればいいのか混乱したポイントだった。

浸透完了、そしてSSL化へ

しばらく待つと、dig がちゃんとVPSのIPアドレスを返すようになった。

ここからHTTPS化に進む。HTTPS化はもはや必須で、ブラウザに「安全でない」と出るのを防ぐだけでなく、SEOの評価やアクセス解析にも関わる。
無料で証明書を発行できるLet’s Encryptを、Certbotというツールで使う。

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d hrn-i.com -d www.hrn-i.com

対話形式でメールアドレスや規約への同意を入力し、「HTTPをHTTPSにリダイレクトするか」で「する」を選ぶ。すると、Certbotが証明書を取得して、Nginxの設定まで自動で書き換えてくれた。
これでブラウザで鍵マークがつくようになる。

証明書には有効期限(90日)があるが、Certbotが自動更新まで設定してくれる。
テストで確認しておいた。

sudo certbot renew --dry-run

これが成功すれば、あとは放っておいても自動で更新される。

やってみて分かったこと

この回でDNSの仕組みが一番腑に落ちた。
特に、SERVFAILで焦ったときに「これは設定ミスなのか、ただの浸透待ちなのか」を切り分けられたのが大きかった。
WhoisとゾーンDNSの役割の違いを理解していたから、「一段目の情報が伝わっていないだけ」と判断できた。

エラーが出たときに、闇雲に設定をいじり直すのではなく、仕組みから「今どの段階で止まっているか」を考えられる。手を動かしながら仕組みを理解しておくことの価値は、こういうときに出るんだと実感した。