自宅のVPNサーバーあるいはIoTなどに外出先(自宅外)から接続する場合、自宅のグローバルIPアドレスが必要となりますが、このグローバルIPアドレスは、一般的には、変動型でルーターの電源再投入やリセットなどで変わることがあります。(有料の固定型IPアドレス契約した場合を除く)
この対策として取られるのが、DDNS(ダイナミックドメインシステム)サーバーを用いる方法で、ドメイン名を変動型グローバルIPアドレスに変換してくれます。
ただ公開型WEBサーバーとは違い、VPNサーバーあるいはIoTなどはプライベートな非公開システムとするため、DDNSサーバーにドメイン名を載せる必要はなく、出来れば安全上使うのを控えたいところです。
ここで紹介するのは、無料レンタルサーバーを介して自宅LANに接続された機器に安全に接続する方法です。(DDNSサービスは使いません)
自宅グローバルIPアドレスで自宅LANにアクセスする
自宅グローバルIPアドレスとは
自宅のグローバルIPアドレスは、次のURLで調べることが出来ます。
上記URLをブラウザに入力すると、下記の画面が表示され、自宅のIPアドレスが分かります。
このアドレスは自宅のルーターのグローバルIPアドレスで、世界中で固有のもので、このアドレスを使えば、どこからでもインターネットで自宅にアクセスすることが出来ます。
ただし、このグローバルIPアドレスは変動型と呼ばれ、ルータのリセットや電源の再投入、あるいは一定時間通信が行われなかった場合に、変わることがあります。
ただし、プロバイダと有料で固定型IPアドレスの契約をすれば別ですが、個人利用としてはコスト面で高くなるので、避けたいところです。
DDNSサーバーは変動型グローバルIPアドレスを解決してくれるが
このため、DDNS(ダイナミックドメインネームシステム)サーバーにて、変動するグローバルIPアドレスをドメイン名に割付け、ドメイン名にて自宅にアクセスする方法があります。
公開型のWEBサーバーでは、DDNSサービスを用いて運用するのがベターですが、ここで扱うプライベート目的では、DDNSサーバーを使うのはセキュリティの観点で望ましくありません。
特に無料のDDNSサービスは、個人運営や海外サイトが多く、不正アクセスの温床と言われており、VPNサーバーや個人での使用には安全性の問題で注意したいところです。
ここで紹介するのは、無料サーバーのドメイン名から自宅へリダイレクトする方法で、自宅のグローバルIPアドレスを直接知られることはありません。
自宅へのインターネットアクセスのニーズとは
さて、この自宅へインターネット経由で接続する必要性とは、どんな状況でしょうか。
通常の使用では自宅にインターネット接続でアクセスする必要性はほとんどありませんが、以下のような場合に必要となります。
- 自宅のWEBサーバーを公開したい場合
- 外出先から自宅のVPNサーバーに接続したい場合
- 外出先から自宅の専用機器(ラズベリーパイや、マイコンWroom-02やArduinoなどで構築された監視システムなど)に接続したい場合
1の場合は、自宅にWEBサーバーを立上げ、公開するケースですが、最近では、無料サーバーや格安レンタルサーバーなどが現れ、コスト面、安全面、運用面などで乗換えるケースが多く(私もそのひとり)、次第に少数派になりつつあります。
2についは、安全性の観点で自宅VPNサーバーの構築が望ましいため、今後増えて行くと思われます。
また3については、既に監視カメラや冷蔵庫、ビデオデッキなどの家電製品に採用されており、無意識に使用していることも多いと思います。
ここでは、ラズベリーパイにインストールしたoctoprintや、ESP-WROOM-2やArduinoなどのマイコンを使った自作のシステムなどを外出先からアクセスしたい場合に必要です。
この中で、2、3は公開するものでなく、むしろ第三者からアクセスされたくないもので、ドメイン名もグローバルIPアドレスも非公開にするのが本音です。(DDNSを使いたくない理由)
無料レンタルサーバーにて自宅グローバルIPアドレスを非公開に
このグローバルIPアドレスを非公開とするために、グローバルIPアドレスをサーバーに保存しておき、アクセス時にリダイレクト(転送先として提供)することを考えます。
まず、この保存に必要なサーバーを無料レンタルサーバーで運用します。
無料レンタルサーバーを無料登録する
まず、無料で利用出来るサーバーとして、XFREEサーバーを使います。XFREEサーバーは、レンタルサーバーでおなじみのXSERVERが運営しているサービスです。
次のサイトにアクセスして、無料サーバーの利用登録をして下さい。
無料サーバーの利用形態には、次の3つのタイプがありますが、いづれを選んでもかまいません。利用申込iをしてログインすると、全ての機能が利用出来ます。
- HTMLサーバー機能・・・ Webサイトの広告表示なし! 多用途に使えるプラン
- PHP・MySQLサーバー機能・・・ 動的サイトの作成が可能に! PHP・MySQL対応プラン
- WordPress機能・・・ 専用の高速システムを搭載! WordPress専用プラン
ここでは「PHP・MySQLサーバー機能」を使います。
PHP・MySQLサーバー機能を使う
利用登録を行うと下記の管理画面が表示されます。この中の「PHP・MySQLサーバー機能」を選び「利用を開始する」をクリックします。
すると、「PHP・MySQL」の「サーバー管理パネル」が表示されるので、「FTP」をクリックします。
すると、「FTPアカウント設定」画面となります。
FTPソフトは使わなくても、「WebFTP」が用意されているので、「ログイン」をクリックして「ファイルマネージャー」を開きます。
「ログイン」をクリックすると、下記「ファイルマネージャー」画面が表示されます。
サーバーにPHPプログラムを設定する
グローバルIPアドレスを保存するphpプログラム
左上の「フォルダ/ファイル」をクリックしてファイルを追加します。
ここではsvIpAdd.phpファイルを追加しています。
「このウィンドウを閉じる」で戻り、追加されたsvIpAdd.phpファイルを編集します。(svIpAdd.phpファイルの右にある鉛筆のアイコンをクリックする)
次のphpコードを入力して、「上書き保存」を押します。
<?php
file_put_contents('AccessIpAddress.php', $_SERVER['REMOTE_ADDR']);
echo "グローバルIPアドレスを保存しました" ?>
そして、右上の「ログアウト」の左にあるドメイン名をコピーして、コマンドプロンプトで下記のURLを入力してみて下さい。(xxxxxはユーザー登録時に設定した固有のIDです)
http://xxxxx.php.xdomain.jp/svIpAdd.php
「グローバルIPアドレスを保存しました」と表示されます。
このコマンドcurlの代わりに通常のブラウザから入力しても同じです。
保存したグローバルIPアドレスを読出すphpプログラム
次にグローバルIPアドレスを表示させるため、dispIpAdd.phpファイルを作成し、下記のphpコードを入力して「上書き保存」を押します。
<?php echo "グローバルIPアドレス:" . file_get_contents('AccessIpAddress.php') ?>;
先ほどと同様にコマンドプロンプトで下記のURLを入力してみて下さい。(xxxxxはユーザー登録時に設定した固有のIDです)
http://xxxxx.php.xdomain.jp/dispIpAdd.php
すると、保存されたグローバルIPアドレスが表示されます。
以上で保存と読出しを行うことが確認出来たので、実際に自宅のネットワーク機器にアクセスをして見ます。
外出先から自宅のネットワーク機器にアクセスする
この方法で、Octopiに接続してみます。
OctoPiとは、ラズベリーパイにインストールしたOctoprintのことで、詳細は、下記記事をご参照下さい。
上の記事で紹介している方法では、自宅グローバルIPアドレスを事前に調べておき、“http://218.185.174.252:8080”のように、直接アドレス指定する必要がありました。
今回は、無料レンタルサーバーを経由してアクセスします。
DDNS(ダイナミックDNS)を使わず無料サーバー経由でアクセス
無料レンタルサーバーには、既にドメイン名が割り当てられているのでこれを使ってアクセスすることが出来ます。
まず、先ほどのFTPにログインして、index.phpファイルを作成し、下記のphpコードを入力して「上書き保存」を押します。
<?php$SvrAdd
= file_get_contents('AccessIpAddress.php') ;$url = "http://" . $SvrAdd . ":8080/"; ?>
<!DOCTYPE html><html lang="jp">
<head><meta http-equiv="refresh" content="0;URL='<?php echo $url; ?> '"></ head></ html>
次に、ブラウザのURLに次のように入力してenterを押してみて下さい。(xxxxxはユーザー登録時に設定した固有のIDです)
http://xxxxx.php.xdomain.jp/index.php
すると、グローバルIPアドレスにリダイレクトされるhtmlコードが送出され、外出先から自宅のOctopi(ラズベリーパイ)に接続することが可能となります。
実際の運用では、”index.php”を”octopi.php”など別の名前にすることでセキュリティ面の向上が計れます。
自宅のグロ-バルIPアドレスをサーバーに定期保存
自宅グロ-バルIPアドレスの変動に備えて、一定周期でサーバーに保存する必要があります。
これについては、下記の方法があります。
- パソコンを立上げて下記サイトに手動でアクセスする。
“http://xxxxx.php.xdomain.jp/svIpAdd.php” - 下記バッチファイルを作成、スタートアップに登録してパソコン立上げ時に自動実行させる。
“curl http://xxxxx.php.xdomain.jp/svIpAdd.php” - 下記バッチファイルを作成、タスクスケジューラに登録して定期実行させる。
“curl http://xxxxx.php.xdomain.jp/svIpAdd.php”
私の場合、ESP-WROOM-2マイコンからサーバーへのデータ収集機能の中でグローバルIPアドレスの保存を行っています。(上記の方法を使っていません)
まとめ
DDNSサーバーは、自宅にて公開WEBサーバーを運用する目的で使われますが、VPNサーバーや監視カメラ、IoT用途では、外部からの不正なアクセスを避けるため利用を避けたいところです。
より安全な状態で運用するには、自宅グローバルIPアドレスを非公開にし、DDNSサーバーで名前参照するドメイン名を使用しないことが重要なポイントになります。
ここで紹介した方法は、無料サーバーにアクセスすることで自宅のグローバルIPアドレスにリダイレクトを行うもので、よりセキュリティ面が向上したものと考えています。
より安全に使うために実際の運用では、クライアント側(アクセスしている側)にパスワードを要求したり、クライアント側のグローバルIPアドレスを複数ルートで保存・照合するなど、可能な限り自宅のグローバルIPアドレスの保護を行っています。
私の自宅へのインターネットアクセス応用事例では、VPNサーバー、OctoPi(ラズベリーパイ)、水道メーター監視システム(ESP-Wroom-02)があり、VPNサーバー以外は、この方法にて運用しております。
VPNサーバーは現在DDNSサービスを使っており、将来的には変更する予定です。自宅VPNサーバーについての詳細記事は下記をご参照ください。
水道メーター監視システム(ESP-Wroom-02)については、現在既にこの方法にて運用しており、今後の記事にて紹介予定です。これまでの内容については、次の記事に説明しています。