自宅に設置しているサーバーに外部のネットワークから接続したいことってありますよね。
ネットで検索すれば色々な方法がでてきますが、ここでは独自ドメイン+DDNSを利用した接続方法を紹介します!
家庭内サーバーに接続するための基礎知識
外部ネットワークから自宅内のサーバーにアクセスする仕組みを理解するために、最低限理解しておくべきことついて説明します。
DNS(Domain Name System)とは
DNSはドメイン名(ホスト名)とIPアドレスの対応関係を管理するシステムです。
サーバーに接続するためには、サーバーのIPアドレスを知る必要がありますが、IPアドレスを覚えるのは大変です。
DNSを利用することでIPアドレスを覚える代わりに、ドメイン名を指定して特定のサーバーに接続することが可能となります。
DDNS(Dynamic DNS)とは
IPアドレスが変わってしまうホストに対して、動的にドメイン名とIPアドレスの対応関係を解決するシステムのことです。
例えば、ある日はhttps://takake-blog.com
に割り当てられているIPアドレスは123.4.56.7
かもしれませんが、違う日にはIPアドレスは100.10.0.3
かもしれません。
こういった状況時に、https://takake-blog.com
に対応するIPアドレスを動的に変更する仕組みがDDNSです。
外部ネットワークから自宅内サーバーに接続するには
インターネットに接続している端末はすべてグローバルIPアドレスを持っているため、自宅のサーバーに割り当てられているIPアドレスを調べて、そのIPアドレスを直接指定すれば外部ネットワークから自宅のサーバーにアクセスは可能です。
一方で、一般的な家庭で使用されるインターネット接続サービス(Nuro光やソフトバンク光など)では、インターネット利用時に割り当てるグローバルIPアドレスは動的に変更されてしまいます。
つまり、自宅のサーバーのIPアドレスが定期的に勝手に変更されてしまい、適切な接続先が分からないということになってしまいます。
そのため自宅のサーバーに安定的に接続するためには、独自ドメインと自宅のサーバーのIPアドレスの対応関係をDDNSの仕組みを使って登録する必要があります。
独自ドメインを取得
それでは、自宅のサーバーに割り当てる独自ドメインを、GoogleDomainsで取得しましょう。
難しいことはないので、素直に公式サイトから取得します。
https://domains.google/intl/ja_jp/
※この記事では、your-domain.com
というドメインを取得したと仮定します。
グローバルIPとドメインをDDNSで紐づける
GoogleDomainsで取得したドメインと、自宅のグローバルIPアドレスをDDNSで紐づけていきます。
下記手順はGoogleDomainsのヘルプに手順が載っています(ダイナミックDNSの詳細)。
GoogleDomainsでのDDNSの設定
まずGoogleDomainsでDDNS機能をオンにしましょう。
Google Domainsにアクセスして、「マイドメイン」にアクセスします。
1.左ペインのメニューから「DNS」→最下部の「詳細設定」→「ダイナミックDNSの管理」に進んでください。
2.「新しいレコードを作成」を押下して、自分の好きなホスト名(<host名>.your-domain.com)を入力し、保存します。
3.登録したDDNSレコードの「認証情報を表示」をクリックし、ユーザー名とパスワードをメモします
自宅サーバーにDDClientをインストール
外部ネットワークから接続したい自宅のサーバーから、GoogleDomainsで登録したホスト名に対して使用しているIPアドレスを通知します。
これにはDDClientというソフトウェアを利用します。下記コマンドからDDClientをインストールしてください。
sudo apt install ddclient
# 色々と聞かれますが、すべてESCキーでスキップして大丈夫です。
DDClientの設定
GoogleDomainの公式ドキュメント(https://support.google.com/domains/answer/6147083?hl=ja#)を参考に/etc/ddclient.conf
の設定値を書き換えます。
# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf
ssl=yes
use=web
protocol=googledomains
login=<your-user-id>
password=<your-domain>
<your-host>.your-domain.com
下記項目は、各環境に合わせた値を入力してください
- <your-user-id> : 先ほどメモしたDDNSのユーザー名
- <your-password> : 先ほどメモしたDDNSのパスワード
- <your-host> : GoogleDomainsで指定したDDNSのホスト名
DDClientを実行
ddclientを実行してみましょう。
sudo ddclient -daemon=0 -verbose
エラーなく実行出来たら実行は成功です。実行に成功すると、GoogleDomainsのダイナミックDNSの「データ」列にグローバルIPアドレスが表示されます。
DDClientをデーモンとして動かす
上記で説明した通り、自宅のサーバーに割り当てられているIPアドレスはいつ変更されるかわかりません。
ddclientは、プログラムを実行したタイミングでのIPアドレスが登録されるため、デーモンとして定期的にddclientを実行することで、常にドメイン名と最新のIPアドレスを紐づけるようにします。
まずは、サービスの設定ファイル(/etc/default/ddclient
)を編集します。
# Configuration for ddclient scripts
# generated from debconf on 2023年 7月 22日 土曜日 10:00:58 JST
#
# /etc/default/ddclient
# Set to "true" if ddclient should be run every time DHCP client ('dhclient'
# from package isc-dhcp-client) updates the systems IP address.
run_dhclient="false"
# Set to "true" if ddclient should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.
run_ipup="false"
# Set the time interval between the updates of the dynamic DNS name in seconds.
# This option only takes effect if the ddclient runs in daemon mode.
daemon_interval="5m"
run_daemon="true"
次に、デーモンを登録します。
sudo service ddclient restart
これでバックグラウンドで定期的にddclientが実行されるようになりました。
疎通確認
外部のネットワークから自宅内のサーバーに接続できるか疎通確認を行いましょう。
※テザリングなどを利用し、必ず外部のネットワークから疎通確認をしてください。
sshで接続する場合下記コマンドで疎通確認可能です。
ssh user@<domain>.your-domain.com
もし接続できない場合、下記のポートフォワーディングの設定が必要かもしれません。
(必要な場合)自宅のルーターにポート転送の設定
外部から特定のサーバーに接続するためには自宅のルーターでポートフォワーディングの設定が必要なことが多いです。
ルーターの設定方法は利用しているルーターによって異なるので、ご自身のルーターのドキュメントを参考の上ポートフォワーディングの設定を進めてください。
自宅サーバーに対してSSH接続を行いたいときは、22番ポートの転送設定を追加します。
まとめ
GoogleDomainsで取得した独自ドメインを利用して、外部ネットワークから自宅のサーバーに接続する方法を紹介しました。
外部ネットワークから自宅サーバーに接続する方法は、ネット上に数多くの方法が紹介されています。
ただ、基礎となる考え方(DDNSなど)は同じなので、ぜひ参考にしてみてください!
おまけ:ネットワークの仕組みが分かる本
下記の本は、非常にわかりやすくネットワークの仕組みを説明しているので、非常におすすめです!
DNSやDDNS、ポートフォワーディングなど、わからないことがあれば一読することをお勧めします。