DDNSっぽいIPアドレスを特定するPHPスクリプトを作った

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

今年もよろしくお願いします。

年末年始のお休みは家族と帰省がてら、スキーをしてきました。昔からモーグルが好きで、スキーに行くと一日中ずっとコブしか滑らないスタイルでしたが、ここ数年は子供と行っていることもあり、しばらく遠ざかっていました。しかし、今年は上の娘も腕を上げたので、中級コースは難なく滑ることができるようになったため、今年からコブに復帰しました。コブのコースをノンストップで一直線に駆け降りるのは快感ですね~♪

さて、そんな前フリとは一切関係なく、、、

自宅のNASが古くて遅いんです!!!

IO DATA HDL2-Sシリーズ

2010年 4月の発売なので、かれこれもう8年前のモデルなんですね。LANポートは当然ギガ対応ではなく100Mだし、そもそも転送速度も60Mbps程度しか出ません。
購入当時はとりあえずデジカメのデータ保管用に冗長性が必要と思い、RAID1のものであれば何でもいいと購入したのですが、2TB×2=4TBをRAID1のミラーリングで2TBの容量が使用できたので、十分な容量がありました。
しかし、それからカメラもいろいろ変わって、現在では35㎜フルサイズの一眼レフと、動画撮影に強いコンパクト機を主に使っているため、データ量もうなぎ上りで、写真のインデックスを表示するのだけでも遅いし、容量もそろそろ天井が見えてきたところです。

そのため、次期NASの購入を検討していたのですが、、、

NASって意外と高い!

BuffaloSynologyQNAP等、もちろんAliexpressの様々なNAS製品も比較しましたが、どうにも高い!
そして意外に安いと気が付いたのが、小型のFANレスPCに外付けHDDというパターン。
しかも、OSはWindowsのため、スループットはかなりいいはずだし、色々出来てしまいそう?

小型PCは13,000円程度からOS込みのものがありますが、その価格帯のものはCPUがAtomになり、USB3.0ポートも無かったり1つだけというものが多いので除外。
次にパフォーマンスが良いモノは2万円程度のCerelonN3450のもの。USB3.0ポートも2~3つついているものが多いです。CPUはN3450はノート用で、小型デスクトップ用のJ3455も同様で少しパフォーマンスが上です。

今回は2万円程度でJ3455、メモリ4GB、SSD32 GB、Windows10Home付きのものを選択、メインストレージは4TBのHDDとUSB3.0対応ケースを購入し、RAID構成ではありませんが、バックアップとして現在使用しているNASをUSB接続でスパニングモードの4TBで使用することにして費用を抑えました。

小型PCを使ったNASの価格構成

小型PC  : 約20,000円
4TBHDD : 約9,000円
HDD ケース: 約2,200円
既存4TB HDD: 0円
合 計 : 約31,200円

うん、納得の価格です。

これに、File共有するのはもちろん、IISとLet’sEncryptでWebDAVを構築すればパーソナルクラウドとしても使用できるし、こちらの記事を参考にRDPWrapを用いてWindows10Homeでリモートデスクトップを使用できるようにしておけば、世界中どこにいても自宅の快適環境が手に入るというものです。
ちなみに、Fall Creator Update済のPCにRDPWrapを入れたところ、rfxvmt.dllは存在しており、普通にRDPできました。

AWSでRDPを構築しようとも思いましたが、たとえ普段は電源を落としておいてEC2の利用料金を削減しても、EBSの料金はかかるので、個人として払うにはあまり満足できそうにありませんしね。

で!!!
本題はここからです!

自宅のIPアドレス変わり過ぎ!

私の家はNUROを使っているのですが、このPCをリモート設定して、翌朝会社から同僚に「みてみてー。昨日設定したPCにリモートできるぜー」ってやろうと思ったら・・・応答がありません(T-T)

ちくしょー!
固定IPではない回線でも、昔ってこんなに頻繁にIPアドレス変わりましたっけ?
同僚に聞いても「いやー、ルーター再起動しなきゃ変わらないでしょー」なんて言っていましたが、みなさんいかがですか?

そこで、

自宅のIPアドレスを知りたい

真っ先に思いつくのはDDNSですよね。Dynamic DNS。変動IPを使っている場合に、Aレコードを動的に書き換えるやつですね。DiCEとか有名なソフトをインストールして、2分毎にIPアドレスを更新する仕組みです。これがあれば、自宅鯖でホームページが公開できちゃう~的なやつです。

ですが、今回はIPアドレスを知りたいだけで、Webサーバーを作りたいわけでもなんでもない。ただ単にリモートするIPを知りたいだけですからね。

ついカッとなって作ってみた!

DiCEのインストールも不要で、HTTPリクエストだけ送ればOKなPHPのスクリプトを30分程度で作成してみました。
適当なレンタルサーバーの空いているスペースにコッソリ入れておけば動きます。

<?php
$Link_URL=(empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
$pass = filter_input(INPUT_GET, "pass");
$ipfile='ip.txt';
$r_pass='readPassword';
$w_pass='writePassword';

//HTMLヘッダ出力
print<<<EOF
<html>
<meta http-equiv="refresh" content="600">
<body>
EOF;
//ここまで

if($pass == $r_pass){ //読取モード
  if (file_exists($ipfile)) {
    $fp = fopen($ipfile, "r");
    $nowip = fgets($fp);
    fclose($fp);
  }
  print('Ip address is : 
');
  print($nowip);

}elseif($pass == $w_pass){ //書込みモード
  $fp=fopen($ipfile, "w");
  if (fwrite($fp, $_SERVER["REMOTE_ADDR"]) === FALSE){
    print('ファイル書き込みに失敗しました
');
  }
  fclose($fp);
  print('Written ip address!
');

}else{ //エラー
  print('Write password error!
');
}

//HTMLフッタ出力
print<<<EOF
</body>
</html>
EOF;
//ここまで
?>

利用方法

設置と設定

初めに、$r_pass と $w_passを設定する必要があります。
次に、スクリプトの権限は755に、設置するフォルダは777に設定します。

自宅のPCでの操作

RDP操作したいPCで常に以下のURLを開いておきます。閉じてはいけません。
このページは通常のブラウザでは10分おきにリロードされますが、マイコンなどでそのような機能がないCurl文などでのアクセスの場合には、適当な時間をおいて定期的にリロードさせてあげてください。
http://www.hogehoge.com/ddns.php?pass=writePassword
これで、アクセス元のグローバルIPアドレスをファイルに書き込みます。

RDPしたいときの操作

RDPで接続したくなったら、以下のURLを開きます。
http://www.hogehoge.com/ddns.php?pass=readPassword
すると、グローバルIPアドレスが表示されるので、そのIPアドレスにRDPしましょう。

以上です。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す