本ページの位置づけ
このサイト自体(example.com)も、ここで説明する仕組みによって外部からアクセスできています。「なぜこの設定が必要なのか」を理解したうえで作業した方がトラブル時に強くなるため、まず0章で仕組みを説明し、そのあとで実際の設定手順に進みます。
目次
0. なぜこの設定が必要なのか
0-1. 自宅のインターネット回線のIPアドレスは「変わる」のが前提
会社のデータセンターとは違い、一般家庭のインターネット回線(フレッツ光やケーブルテレビ回線など)に割り当てられるIPアドレス(WAN側IPアドレス、外部から見える住所にあたるもの)は、多くの場合「動的IPアドレス」です。契約上は固定されておらず、プロバイダ側の都合や、ルーターの再起動・回線の瞬断などをきっかけに、ある日突然、まったく別のIPアドレスに変わってしまいます。
注意:固定IPサービスを契約していない限り、IPアドレスはいつ変わってもおかしくない
「今まで変わったことがないから大丈夫」ということはありません。プロバイダ側のメンテナンスや設備更新など、こちらの操作と無関係なタイミングで変わることもあります。
0-2. ドメイン名(example.com)はIPアドレスと紐づいている
私たちが普段ブラウザに入力するのはexample.comのような「ドメイン名」ですが、実際にインターネット上で通信するにはIPアドレスが必要です。DNS(Domain Name System)というインターネットの電話帳のような仕組みが、「example.com = 現在このIPアドレス」という対応表を管理しており、ブラウザは裏側でこの対応表を毎回問い合わせています。
もし自宅回線のIPアドレスが変わっているのに、DNSの対応表(MyDNS.JP側の記録)が古いIPアドレスのままだったらどうなるでしょうか。ブラウザは「古い(もう使われていない)IPアドレス」宛てに接続しようとしてしまい、サイトにたどり着けなくなります。
0-3. MyDNS.JPは「無料でドメイン名を貸してくれて、IPアドレスの変化も追いかけてくれる」サービス
MyDNS.JPは、自宅サーバー運用者向けに無料でドメイン名(サブドメイン)を提供してくれるダイナミックDNS(DDNS)サービスです。ただし、IPアドレスが変わったことを自動的に検知してくれるわけではありません。「今のIPアドレスはこれです」と、サーバー側から定期的にMyDNS.JPへ知らせてあげる必要があります。この“知らせる”作業を自動化するのが、このページで行う設定です。
0-4. なぜ「1回だけ」ではなく「2段構え」で通知するのか
このガイドでは、①サーバー起動時に1回、②毎日決まった時刻に1回、の2つのタイミングで通知します。それぞれ役割が異なります。
| タイミング | 主にカバーするケース |
|---|---|
| ① サーバー起動時(systemd) | 停電や再起動で回線機器が再接続し、その瞬間にIPアドレスが変わった場合。起動直後に最新のIPをすぐ通知できる |
| ② 毎日決まった時刻(cron) | サーバーを再起動せずに稼働させ続けている間に、プロバイダ側の都合でIPアドレスが変わった場合。起動時通知だけでは検知できないため、定期的な通知で補う |
プロ技・解説:通知は「毎回送って問題ない」設計になっている
「IPアドレスが変わっていないのに毎日通知して大丈夫?」と思うかもしれませんが問題ありません。MyDNS.JP側は、送られてきたIPアドレスが前回と同じであれば何もせず、変わっていた場合だけ記録を更新する仕組みになっています。変化を検知するロジックをこちら側で作り込む必要はなく、「とにかく現在のIPアドレスを送り続ける」だけでよいのがこの仕組みの利点です。
1. 事前準備(MyDNS.JPのアカウントとドメイン)
この作業は、Rocky Linuxサーバー上ではなく、MyDNS.JPのWebサイト上で先に済ませておく必要があります。
| 準備するもの | 説明 |
|---|---|
| MyDNS.JPのアカウント(Master ID) | 公式サイト(mydns.jp)で無料登録して発行される、ログイン用のIDとパスワード |
| 取得したドメイン名 | 登録時に選んだサブドメイン(本サイトの場合は example.com) |
ポイント:このIDとパスワードは、これから設定するスクリプトの中で使います
MyDNS.JPのマイページにログインする際のMaster IDとパスワードを、このあとSTEP1で作成するスクリプトの中に記入します。事前に手元に控えておいてください。
2. STEP1:IPアドレス通知スクリプトの作成
まずは、通知を行うための「部品(スクリプト)」を作ります。
保存フォルダとスクリプトファイルの作成
# スクリプトを置くフォルダを作成
sudo mkdir -p /opt/scripts
# スクリプトファイルを作成・編集
sudo vi /opt/scripts/mydns_update.sh
以下の内容をコピーして貼り付けてください。「自分のID」と「パスワード」の部分は必ず書き換えてください。
#!/bin/bash
# --- 設定情報 ---
# MyDNS.JPのログインIDとパスワードを記入
MASTER_ID="xxxxx" # ★ ここを自分のIDに書き換え
PASSWORD="xxxxx" # ★ ここを自分のパスワードに書き換え
# 通知先URL
UPDATE_URL="https://ipv4.mydns.jp/login.html"
# ログファイルの設定
LOG_FILE="/var/log/mydns_update.log"
# 実行ログの記録開始
echo "[$(date "+%Y/%m/%d %H:%M:%S")] Starting MyDNS IP update..." >> $LOG_FILE
# curlコマンドでMyDNS.JPへ通知を実行(-sでサイレント、-uで認証)
RESULT=$(curl -s -u "${MASTER_ID}:${PASSWORD}" "${UPDATE_URL}")
# 結果の判定とログ出力
if [ $? -eq 0 ]; then
echo "[$(date "+%Y/%m/%d %H:%M:%S")] MyDNS IP update completed successfully." >> $LOG_FILE
else
echo "[$(date "+%Y/%m/%d %H:%M:%S")] MyDNS IP update FAILED. Error code: $?" >> $LOG_FILE
fi
exit 0
プロ技・解説:curl -u が行っていること
-u "ID:パスワード"は、HTTP Basic認証という方式でMyDNS.JPのサーバーにログインする指定です。MyDNS.JPは、このBasic認証でアクセスしてきたリクエストの送信元IPアドレスを見て、「このアカウントのドメインは今このIPアドレスから来ている」と自動的に記録を更新する仕組みになっています。つまり通知の中身(本文)にIPアドレスを書く必要はなく、アクセスしてきたこと自体が通知になります。
Rocky Linuxでは、システムがスクリプトを実行できるように「実行権限」と「SELinuxのラベル付け」の両方が必要です。
# 実行権限を与える(所有者root・rootのみ読み書き実行可、他ユーザーは一切アクセス不可)
sudo chmod 700 /opt/scripts/mydns_update.sh
sudo chown root:root /opt/scripts/mydns_update.sh
# SELinuxに「これは実行可能なプログラムである」と教える
sudo chcon -t bin_t /opt/scripts/mydns_update.sh
セキュリティ:パーミッションは 700(root専用)にする
このスクリプトの中には、MyDNS.JPのログインパスワードが平文(暗号化されていない状態)で書かれています。もし誰でも読める権限(755など)のままにしておくと、このサーバーにログインできる他のユーザー全員にパスワードが見えてしまいます。chmod 700とchown root:rootで、root以外は中身を読めないようにしてください。
3. STEP2:サーバー起動時に自動実行させる(systemd)
PCが起動した直後に一度、IPアドレスを通知する設定です。
systemdサービスファイルの作成
sudo vi /etc/systemd/system/mydns_update.service
[Unit]
Description=MyDNS.JP IP Address Update Service
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/scripts/mydns_update.sh
User=root
[Install]
WantedBy=multi-user.target
ポイント:After / Wants=network-online.target の意味
この2行は「ネットワークに実際に接続できる状態になってから、このサービスを実行してください」という指定です。ネットワークが準備できていない段階でスクリプトを実行してしまうと通知が失敗するため、起動順序を制御しています。
# 設定を読み込む
sudo systemctl daemon-reload
# 自動起動を有効にする
sudo systemctl enable mydns_update.service
# 今すぐ実行テスト
sudo systemctl start mydns_update.service
# ログを確認して成功しているか見る
cat /var/log/mydns_update.log
ログにcompleted successfullyとあれば成功です。
4. STEP3:毎日決まった時間に実行させる(Cron)
サーバーがずっと動いている間、途中でIPアドレスが変わった場合に備えて、定期的にも通知します(0-4で説明した「2段構え」の2つ目)。
root権限のcrontabに登録する
# root権限のcrontabを開く
sudo crontab -e
ファイルの最後に以下の1行を書き込み、保存して閉じます。
30 21 * * * /opt/scripts/mydns_update.sh > /dev/null 2>&1
ポイント:cronの時刻書式
左から「分 時 日 月 曜日」の順です。30 21 * * *は「毎日21時30分に実行」を意味します。実行時刻は好きな時間に変更して構いません(深夜の負荷の少ない時間帯にする方も多いです)。
5. 動作確認とメンテナンス
5-1. ちゃんと動いたか確認する
MyDNS.JPの公式サイト(mydns.jp)にログインし、「LOG INFO」を見てください。あなたのRocky LinuxのIPアドレスからアクセスがあれば設定完了です。
# サーバー側のログでも確認できる
cat /var/log/mydns_update.log
sudo systemctl status mydns_update.service --no-pager
5-2. STEP完了チェックリスト
- スクリプトが root専用の権限になっているls -l /opt/scripts/mydns_update.sh → -rwx------ root root
- SELinuxのラベルが正しく付与されているls -Z /opt/scripts/mydns_update.sh → bin_t が含まれる
- 起動時サービスが有効化されているsudo systemctl is-enabled mydns_update.service → enabled
- 手動実行でログに成功と記録されるcat /var/log/mydns_update.log → completed successfully
- crontabに定期実行が登録されているsudo crontab -l → 該当の1行が表示される
- MyDNS.JP側のLOG INFOでアクセスが記録されているmydns.jp マイページ → LOG INFO を確認
6. よくあるトラブルと対処
6-1. パスワード間違い
スクリプト内のMASTER_IDとPASSWORDを再確認してください。特に前後に余計な空白が入っていないか、コピー時に文字化けしていないかを確認します。
6-2. ネットワーク未接続
systemdの設定でnetwork-online.targetを待つようにしていますが、ネットが不安定だと起動時の通知に失敗することがあります。その場合はcrontab(定期実行)での通知を待つことで、次のタイミングで自動的にリカバリーされます。
6-3. SELinuxに実行を拒否される
sudo getenforceがEnforcingの場合、STEP1のchconコマンドを忘れるとスクリプトの実行が拒否されます。以下で確認・再設定してください。
# SELinuxが拒否した記録を確認する
sudo ausearch -m avc -ts recent
# ラベルを再度付与する
sudo chcon -t bin_t /opt/scripts/mydns_update.sh
6-4. 外部から example.com にアクセスできない(設定は成功しているのに)
DDNSの通知が成功していても、ルーター側のポート転送(80/443番ポートをRocky Linuxサーバーへ転送する設定)ができていないと外部からアクセスできません。このガイドはあくまで「ドメインと現在のIPアドレスを正しく対応付ける」ところまでの設定であり、ルーター側の設定は別途必要です。
7. まとめ
DDNS(動的IPアドレスの自動通知)設定が完了しました
これで、あなたのRocky Linux 9 は「起動した時」と「毎日21:30」に、自動でMyDNS.JPへ現在の居場所(IPアドレス)を教えるようになりました。Ubuntuよりも SELinux(ラベル付け)に気を配る必要がありますが、一度設定してしまえばRocky Linuxの方がシステムとしての堅牢性は高くなります。自宅回線のIPアドレスが変わっても、example.comは自動的に最新のIPアドレスを指し続けます。