外部から自宅サーバにアクセスするためMyDNS(DDNS)を利用する

※この記事はqiitaに投降した記事と同じ内容となります。

経緯

諸々の事情があってこれまでLAN内で運用していた自宅サーバに外部からアクセスできるようにしたい。 ネットワークの構成とか、セキュリティを考えるとWebサーバーや仮想化をしたほうがいいのかとか、まだまだ計画途中ではあるが、とりあえずまずは自宅のipを外部から特定するようにする必要がある。

固定IPの契約は追加費用がかかるので避けたい、ということででドメインに紐づけるIPを動的に通知、更新するDDNS(Dynamix Domain Name System)を設定する方向で行きたい。

ざっと調べたところMyDNSが定番らしいのでそれを使ってみる。

手順

基本的には公式のHowToに従って設定。

会員登録とレジストラのネームサーバーの設定は省略。

NSレコードの設定

LightsailのDNSも似たような感じだったので特に困らなかった

DNS設定

モザイクばかりで何が何だかわからないので、まず隠しているところについて補足する。DomainとMXの入力欄には割り当てたいドメインを設定する(MXは空欄の場合自動でDomainが転記される)。 とんで後半、表。まず一番右の列にはmydnsのユーザーIDが選択できる。このIDに紐づいたIPデフォルトの値として割り振られることになる。その左のテキストボックスに入力がある場合はそちらが優先される。

具体的に設定した内容としては、今回はやり方の確認であり本番運用はまだ先ということもあって、ドメインには過去にブログで使っていたものを流用、自宅用に設定した特定のサブドメインの場合はアカウントに紐づけたipへ、それ以外のサブドメインであれば現ブログのドメインに転送という設定にした。

(実際には自宅用のサブドメインのほかに、サブドメインではないそのままのドメインへのアクセスも自宅につながっていた。ワイルドカードは@は含まないらしい。)

ipアドレスの通知

本題のipアドレスの更新について

最初はIPは0.0.0.0に設定されている

before

以下を参考に自動更新用のbashを作成。 自宅サーバーやVPSに使える無料のダイナミックDNS (Dynamic DNS) | MyDNS.JP MyDNS(無料)のDDNS更新方法 – nosense

公式の例では5分ずつcronをしているようだが、今回はすぐに運用するわけではなくお試しなのでデフォルトで存在している1時間ごとのcronに追加する

#!/bin/bash

# 公式の例。このアドレスだと自分の環境ではIPv6のアドレスのみ設定され、IPv4のアドレスは変わらなかった
#/usr/bin/wget -O - 'https://userid:password4@www.mydns.jp/login.html'

# IPv4とIPv6を両方設定するにはそれぞれのサブドメインに個別に通知する必要があるらしい。
# IPv4
/usr/bin/wget -O - 'https://userid:password@ipv4.mydns.jp/login.html'
# IPv6
/usr/bin/wget -O - 'https://userid:password@ipv6.mydns.jp/login.html'

ドメインの前のuserid:password@はBasic認証のための情報らしい。今回調べて知った。

このファイルに実行属性を付与

$ sudo chmod +x /etc/cron.hourly/mydns

試しに実行してみる

$ sudo /etc/cron.hourly/mydns

更新された模様。

アフター

実際にサーバーと同じLANから別のPCでIPを確認したところ、IPV4については登録されたものと一致した。IPV6については後述 Pingも帰ってくるのでDNSはちゃんと動いている模様

結果

ログに表示されるのは変更時か、変わらない場合は24時間ごとなので、一日待つ

そして翌日

結果

自動での通知もちゃんと動作していることを確認

※IPv6とIPv4で時間が開いているのは最初にwww.mydns.jp/login.htmlで通知した際にIPv6だけ通知され、その後IPv4も通知できるよう上記のように修正したため。

余談・気になったこと

ルータがPingを返す

てっきりルータはデフォルトでは外部からの通信は全部シャットダウンしてると思ってたので、PINGが帰ってきたのは地味に驚いた。※ちなみにAWS Lightsailは返してくれなかった。

よく知らずに使ってるけど、一般家庭ではルータがデフォルトでファイアーウォールとして仕事しているから安全なわけで、それをこのレベルの知識でルータ様のセキュリティにあえて穴をあけようというのは改めて考えて無謀な話だとおもう。万全を期すためにはもっとネットワークの勉強しないと…サーバ公開までの道のりはまだまだ長そう。 やり遂げる前に飽きそうな気がしてならない。

IPv6アドレスが同一LAN内でも端末によって違う

以下のサイトで確認したところ、家でPCからアクセスしたIPV6アドレスとサーバーのIPV6アドレスが前半は同じだが後半が全く違う

あなたの IPv6 をテストしましょう。

ノートPCとデスクトップPCでもちがう。

IPアドレスって端末までは特定できないものだと思っていたのだが、IPv6 - WikipediaによるとやはりIPV6だと達末ごとに割り振られるらしい。 そうなるとルーターの役割も違ってくるし、設定ややこしそう…。