無料のサブドメイン(MyDNS)を使おう
How to get a free domain with MyDNS
はじめに
わたしのサーバーはMyDNSを使って無料で取得したサブドメインなども使っています。
以下にMyDNSを使ったサブドメイン取得方法をまとめました。
自宅サーバーやRaspberry Piなどを外から使いたいとき、多くの一般家庭のインターネット回線は固定IPではないので、時間が経つとグローバルIPアドレスが変わってしまいます。そういった時にDDNSの出番です。
今回は、私が実際に使っているMyDNSと、海外でよく使われているDuckDNSという2つの無料DDNSサービスでのサブドメイン取得方法をまとめました。SSHで自宅PCにログインしたい、自宅で動かしているサービスに外出先からアクセスしたい、といった個人利用であればどちらも十分実用的です。
MyDNSとDuckDNSの違い
どちらも無料でサブドメインを取得できるDDNSサービスですが、細かい違いがあります。
- MyDNS:日本のサービスで、Aレコードだけでなくメール用のMXレコードなども設定できるなど機能が豊富。応答速度も日本国内からは安定していることが多い。
- DuckDNS:GitHub/Google/Redditアカウントですぐ始められ、設定項目がシンプル。Home AssistantやPi-holeなど海外製の自宅サーバー系ソフトのドキュメントでもよく前提にされている。
どちらも無料枠で個人利用には十分なので、好みや用途に応じて選べば問題ありません。両方併用しても構いません。
MyDNSでサブドメインを取得する
まずはMyDNSのアカウントを作成します。
- MyDNSにアクセスし、トップページから無料会員登録を選択
- メールアドレスなど必要事項を入力してアカウントを作成
- 登録したメールアドレス宛に届く確認メールのリンクを開いて認証を完了
アカウントができたら、コントロールパネルからサブドメインを設定します。
- MyDNSのコントロールパネルにログイン
- 「ドメイン情報」メニューから無料で使える「サブドメイン取得」を選択
- 希望のドメイン名を入力(例:myapp.mydns.jpのような形になります)
- 設定を保存すれば、サブドメインの取得は完了です
固定IPを持っていない場合(一般的な家庭用回線のほとんどがこれに該当します)は、現在のグローバルIPアドレスを定期的にMyDNSへ通知してあげる必要があります。これを行わないと、IPアドレスが変わった際にドメインが古いIPを指したままになってしまいます。
認証情報をスクリプトに直接書き込むと、誤ってGitHubなどに公開してしまうリスクがあるので、別ファイルに分離しておくのがおすすめです。
MYDNS_USER="ユーザーID"
MYDNS_PASS="パスワード"上記を mydns_env という名前で保存し、更新用のスクリプト本体からこれを読み込む形にします。
#!/bin/sh
# 認証情報は同じディレクトリのmydns_envファイルに分離
. "$(dirname "$0")/mydns_env"
curl -s -u "$MYDNS_USER:$MYDNS_PASS" https://www.mydns.jp/login.html認証情報が書かれたファイルは、自分以外読めないように権限を絞っておきましょう。
# mydns_envには認証情報が入っているので、自分だけが読めるように権限を絞る
chmod 600 mydns_env
chmod 700 mydns_update.sh最後に、このスクリプトを定期的に実行するようcronに登録します。MyDNSの規約上、あまり短い間隔での実行は推奨されていないため、5〜10分間隔程度に設定するとよいです。
# crontab -e で以下を追記(5分おきに実行する例)
*/5 * * * * /home/ユーザー名/scripts/mydns_update.sh >> /home/ユーザー名/scripts/mydns_update.log 2>&1これで、IPアドレスが変わっても自動的にMyDNSのサブドメインが最新のIPを指すようになります。設定直後は反映まで多少時間がかかることがありますが、大体1時間程度あれば実際にそのドメインでアクセスできるようになります。
DuckDNSでサブドメインを取得する
DuckDNSはGitHub・Google・Redditいずれかのアカウントでログインするだけで使い始められる、もっとシンプルなDDNSサービスです。
- DuckDNSにアクセスし、GitHub・Google・Redditいずれかのアカウントでログイン
- ログイン後のページで希望のサブドメイン名を入力し「add domain」で追加(例:myapp.duckdns.org)
- ページ上部に表示される「token」という文字列を控えておく(更新スクリプトで使用します)
MyDNSと同様、固定IPでない環境では現在のIPアドレスを定期的に通知する必要があります。DuckDNSは公式に配布しているシェルスクリプトをそのまま使うのが簡単です。
#!/bin/sh
echo url="https://www.duckdns.org/update?domains=あなたのサブドメイン&token=あなたのトークン&ip=" | curl -k -o ~/duckdns/duck.log -K -上記を duck.sh として ~/duckdns/ ディレクトリなどに保存し、実行権限を付与したうえでcronに登録します。
chmod 700 duck.sh
# crontab -e で以下を追記(5分おきに実行する例)
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1個人利用での活用例と注意点
一般的な利用例としては以下の通りです。
- 外出先から自宅PCにSSHでログインして、ちょっとした作業やファイル取得を行う
- 自宅で動かしているNextcloudや写真管理サーバーなどに、外からアクセスする
- 自宅の監視カメラやHome Assistantなどのダッシュボードを外出先から確認する
ただし、SSHやWebサービスをそのままインターネットに公開するのはリスクも伴います。最低限、セキュリティ対策はするようにしましょう。特に監視カメラなどの、いじれないIoT機器は細心の注意が必要です。
総務省・NICTが実施している「NOTICE」という取り組みでは、初期パスワードのままなど脆弱なIoT機器がネット上を調査され、該当する場合はISP経由で利用者に注意喚起の連絡が来る仕組みになっています。もし心当たりのある通知が来た場合は、放置せずすぐに対応するようにしましょう。
また、一般的なセキュリティ対策例です。これだけでもしとけば気持ち楽だと思います。
- SSHはパスワード認証を無効化し、公開鍵認証のみにする
- SSHのポート番号をデフォルトの22番から変更する、またはfail2banなどで不正アクセスを検知・遮断する
- 本当に必要なポートだけを外部公開し、それ以外はルーターのファイアウォールで塞いでおく
自分だけアクセスできればいいということであれば、ポートを直接公開する代わりにOpenVPNやWireGuardのようなVPNを使い、そもそも外部からポートが見えない状態にしてしまう方法も安全性の面ではおすすめです。用途や求める手軽さに応じて選んでみてください。
出先で家にあるPCにログインしたいとか、そういう方の参考になれば幸いです。
おわり