自宅サーバー「ピノキオ2世号」構築マニュアル
MyDNS.JP + Ubuntu 24.04 + Apache + Let's Encrypt (HTTPS)

この文書は、Dell Latitude E5420(Ubuntu 24.04 LTS)を自宅サーバー「ピノキオ2世号」として運用し、
動的IP回線でも pinocchio.mydns.jp というホスト名で、HTTP/HTTPS でインターネット公開するまでの作業記録です。

対象読者
・Linux とターミナルにある程度慣れている人
・家庭用ルーター(NTT RX-600KI など)の設定に触ったことがある人
・「将来、生徒向けの小テスト成績管理などを自宅サーバーで運用したい」人

目次


1. システム構成と前提条件

MyDNS.JP(ダイナミックDNS)は、接続プロバイダから割り当てられる動的グローバルIPアドレスを
変わらないホスト名 (pinocchio.mydns.jp) に結びつけるための無料サービスです。

2. MyDNS.JP の準備

2.1 アカウント作成と MasterID

  1. MyDNS.JP のサイトにアクセスし、メールアドレスなどを登録してアカウントを作成します。
  2. 登録完了メールに、次のような情報が記載されています。
    MasterID : mydns798820
    Domain   : pinocchio.mydns.jp
    今回の例では mydns798820 が MasterID です。

2.2 サブドメイン pinocchio.mydns.jp の登録

MyDNS.JP の「Domain Info」画面で、サブドメイン名を直接入力します。

サブドメイン名は早い者勝ちです。
すでに他の人が使っている場合は登録できないので、その場合は別名を検討します。

2.3 Domain Info の基本設定

最低限の設定は以下の通りです(実際の画面をテキスト化したイメージ):

Domain*
    pinocchio.mydns.jp

MX (FQDN)    Priority
    .        0        ← メールは使わない(Null MX)

Hostname*    Type*    Content    Target ID
    *        A        (空欄)     mydns798820
    (必要なら他に www や mail も設定)

3. Ubuntu サーバー側の準備

3.1 ネットワークインターフェースの確認

インターフェース一覧確認
ip link
IPアドレス確認
ifconfig          # または
ip a

例:

(base) murata@LatitudeE5420:~$ ifconfig
enp10s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.194  netmask 255.255.255.0  broadcast 192.168.1.255
        ether b8:ac:6f:cb:db:62  txqueuelen 1000  (イーサネット)
        ...

wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.71   netmask 255.255.255.0  broadcast 192.168.1.255
        ...

3.2 サーバー用固定IP (192.168.1.202)

家庭内 LAN は 192.168.1.x のネットワークとし、サーバーには次のIPを割り当てる運用としました。

この固定化は、ルーターのDHCP静的割り当て機能(MACアドレスに対してIPを常に固定)を使うのが簡単・安全です。
Ubuntu 側は通常通り DHCP でIPを取得しつつ、ルーター側で「特定MACには常に 192.168.1.202 を配る」とします。

確認例:

(base) murata@LatitudeE5420:~$ ip a show enp10s0
2: enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP ...
    inet 192.168.1.202/24 brd 192.168.1.255 scope global dynamic noprefixroute enp10s0
       valid_lft 12393sec preferred_lft 12393sec

3.3 SSH ログイン

Windows 側のコマンドプロンプトからのSSHログイン例:

C:\Users\mitsuo> ssh murata@192.168.1.202
murata@192.168.1.202's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)
...
(base) murata@LatitudeE5420:~$
IPアドレスを変更したときは、SSH クライアント側で「ホスト鍵が変わった」という警告が出ることがあります。
その場合は ssh-keygen -R IPアドレス で known_hosts から古い鍵を消してから接続し直します。

4. Apache ウェブサーバーの準備

4.1 Apache のインストールと起動確認

Apache インストール
sudo apt update
sudo apt install apache2
サービス状態の確認
systemctl status apache2

ブラウザから、LAN内PCで次のURLを開きます:

Apache のデフォルトページが表示されれば OK です。

4.2 UFW(ファイアウォール)のメモ

状態確認:

sudo ufw status

例:

状態: 非アクティブ
UFW が「非アクティブ」であれば、サーバー側でポートブロックはされていません。
代わりにルーター側のポート開放設定が重要になります。

UFW を使う場合は、例えば次のように許可します:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

5. グローバルIPと DNS の確認

自分のグローバルIPアドレスを知る(curl)
curl -4 ifconfig.me

出力例:

(base) murata@LatitudeE5420:~$ curl -4 ifconfig.me
218.42.96.86
MyDNS.JP のホスト名がどこを指しているか(nslookup)
nslookup pinocchio.mydns.jp

出力例:

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   pinocchio.mydns.jp
Address: 218.42.96.86

curl -4 ifconfig.me で表示されたグローバルIPと、
nslookup pinocchio.mydns.jp の Address が一致していれば、
MyDNS 側の設定とIPアドレス通知が正しく機能しています。


6. MyDNS.JP への IP アドレス通知の自動化

6.1 手動での IP 通知 (curl)

MyDNS.JP では、次のような URL にアクセスすると、現在のグローバルIPアドレスを通知できます。

https://www.mydns.jp/directip.html?MID=MasterID&PWD=パスワード

実際の例:

curl "https://www.mydns.jp/directip.html?MID=mydns798820&PWD=あなたのログインパスワード"

成功時には、次のようなHTMLが返ってきます。

Login and IP address notify OK.
login_status = 1.

MASTERID :
mydns798820
IPv4 ADDRESS:
218.42.96.86
ACCESS DAYTIME:
2025/12/26 01:12:38 UTC
REMOTE ADDRESS:
218.42.96.86
重要: MyDNS.JP では、IP更新専用の別パスワードは存在せず
ログイン時と同じパスワードを PWD= に指定します。

6.2 シェルスクリプト mydns_update.sh の作成

/home/murata/mydns_update.sh を作成し、次のような内容を書き込みます。

#!/bin/bash
# MyDNS.JP に現在のグローバルIPアドレスを通知するスクリプト
# MasterID と PWD は自分のアカウント情報に合わせて書き換える

MYDNS_MID="mydns798820"
MYDNS_PWD="ここにMyDNSのログインパスワード"

# IPv4 アドレスを通知
curl -4 "https://www.mydns.jp/directip.html?MID=${MYDNS_MID}&PWD=${MYDNS_PWD}"
実行権限を付与
chmod +x /home/murata/mydns_update.sh

6.3 crontab による自動実行

murata ユーザーの crontab を編集します。

crontab -e

初回はエディタ選択画面が出るので、数字の 1 を押して nano を選びます。

ファイル末尾に次の行を追記します(例:毎日 朝3時に通知):

# m h  dom mon dow   command
0 3 * * * /home/murata/mydns_update.sh >> /home/murata/mydns_update.log 2>&1

編集後、保存して終了します(nanoなら Ctrl+O → Enter → Ctrl+X)。

現在の crontab を確認
crontab -l

例:

(base) murata@LatitudeE5420:~$ crontab -l
# m h  dom mon dow   command
0 3 * * * /home/murata/mydns_update.sh >> /home/murata/mydns_update.log 2>&1

6.4 動作確認のポイント

手動でスクリプトを実行してみます。

/home/murata/mydns_update.sh

ログファイルを確認します:

cat /home/murata/mydns_update.log

また、curl -4 ifconfig.menslookup pinocchio.mydns.jp で、
IPアドレスが一致していることも合わせて確認します。


7. ルーター (NTT RX-600KI) のポート開放

7.1 事前の注意事項

インターネットから 80/443 番ポートを公開するということは、
自宅サーバーが「世界中から見える」ことを意味します。

・OS と Apache、その他ソフトのアップデートを怠らないこと
・不要なサービスは停止すること
・管理用ログイン(SSHなど)には強いパスワードや鍵認証を使うこと
など、基本的なセキュリティ対策が必須です。

7.2 ポートマッピング設定の概要

RX-600KI の設定画面にブラウザからアクセスし、ポートマッピング(NAPT)設定を行います。

  1. ルーターの管理画面にログイン
  2. ポート設定 / ポートマッピング設定 などのメニューを開く
  3. 次のようなルールを追加
  4. 設定ボタンを押してルーターに反映

ルーターによっては、反映のために再起動が必要な場合があります。
IP電話などへの影響がある場合は、LANケーブルを一時的に外すなど、慎重に作業します。


8. Let's Encrypt + Certbot による HTTPS 対応

8.1 Certbot のインストール

まずパッケージ情報を更新し、Certbot と Apache 用プラグインをインストールします。

sudo apt update
sudo apt install certbot python3-certbot-apache

8.2 Apache SSL モジュールの有効化

Ubuntu の Apache で SSL を扱うために、モジュールとデフォルトSSLサイトを有効化します。

sudo a2enmod ssl
sudo a2ensite default-ssl
sudo systemctl reload apache2

8.3 443番ポートの待ち受け確認

Apache が 443 番で待ち受けているか確認
sudo ss -tlnp | grep 443

例:

LISTEN 0      511                *:443              *:*    users:(("apache2",pid=12557,fd=6),...)

これが表示されれば、Apache は HTTPS 用の入口(玄関)を開いています。

8.4 certbot --apache の実行

いよいよ、Let's Encrypt から正式な証明書を取得します。

sudo certbot --apache -d pinocchio.mydns.jp

途中で次のような質問が出ます:

  1. メールアドレス(緊急連絡用) → 自分のメールを入力
  2. 利用規約に同意しますか? → Y
  3. EFF にメールを共有しますか? → 好みで Y or N

証明書取得に成功すると、次のようなログが表示されます:

Requesting a certificate for pinocchio.mydns.jp

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/pinocchio.mydns.jp/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/pinocchio.mydns.jp/privkey.pem
This certificate expires on 2026-03-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate

We were unable to find a vhost with a ServerName or Address of pinocchio.mydns.jp.
Which virtual host would you like to choose?
...
1: 000-default.conf               |                       |       | Enabled
2: default-ssl.conf               |                       | HTTPS | Enabled

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Successfully deployed certificate for pinocchio.mydns.jp to /etc/apache2/sites-enabled/default-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://pinocchio.mydns.jp

8.5 証明書の保存場所と自動更新

Certbot は systemd のタイマーにより定期的に更新を試みます。
有効期限(おおよそ90日)前に自動更新されるため、基本的には放置で構いません。


9. 動作確認と運用メモ

9.1 ブラウザ/スマホからの確認

  1. PCからブラウザで次のURLを開く:
  2. アドレスバーに鍵マークが付いていることを確認します。
  3. 必要に応じて、https://pinocchio.mydns.jp/~user00/ などサブディレクトリも確認します。
  4. スマホから確認する場合は、QRコードを生成して読み取ると便利です。

LINE などで URL を送信すると、ページ内容のプレビューが表示され、
実際に外部から閲覧できていることを確認できます。

9.2 時刻同期 (NTP) の確認

サーバー時刻が正しく NTP 同期されているか確認します。

timedatectl

例:

Local time: 木 2025-12-25 11:01:55 JST
Universal time: 木 2025-12-25 02:01:55 UTC
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active

ここで System clock synchronized: yes となっていれば、
cron や証明書の更新など、時刻に依存する処理も安心して任せることができます。

9.3 再起動と自動起動

OS 再起動:

sudo reboot

再起動後に確認するポイント:

9.4 雷・電源・冷却の注意


10. 付録:よく使うコマンド集

10.1 ネットワーク関連

ip link                 # インターフェース一覧
ip a                    # IPアドレス確認
ifconfig                # 旧来の表示(必要なら)
curl -4 ifconfig.me     # 自分のグローバルIPv4アドレス
nslookup pinocchio.mydns.jp  # DNSで引いたIPアドレス確認

10.2 サーバー状態確認

systemctl status apache2    # Apacheの状態
sudo ss -tlnp | grep 80     # 80番ポートの待ち受け確認
sudo ss -tlnp | grep 443    # 443番ポートの待ち受け確認
timedatectl                 # 時刻とNTP同期の確認

10.3 MyDNS 関連

/home/murata/mydns_update.sh               # 手動でIPを通知
crontab -e                                  # cron編集
crontab -l                                  # cronの一覧

10.4 Certbot / SSL 関連

sudo certbot --apache -d pinocchio.mydns.jp     # 初回の証明書取得
sudo certbot renew --dry-run                    # 更新テスト
ls -l /etc/letsencrypt/live/pinocchio.mydns.jp  # 証明書の確認

以上が、「1週間かけても終わらなかったかもしれない作業」を、
実際にやりきった記録です。

このHTMLをベースに、将来「小テスト成績管理システム」や
別のサーバー(ピノキオ3世号…)を立ち上げるときにも、
経験とノウハウの“設計図”として使い回せるはずです。