DDNSを導入する(ieServer.Net編)

Pythonにて自宅のIPアドレスの取得に成功したので、次はDDNSを導入してドメインネームで自宅サーバを参照できるようにします。

1.DDNSとは

常時接続環境などを利用して自宅のパソコンをWebサーバなどとして公開しようとする際に、IPアドレスプロバイダによって機械的に付加されたホスト名はあまり意味をなさない数字、アルファベット、記号の羅列となるため、一般に公開して周知してもらうためには不向きな情報である。また、ネットワークへの接続を切断、再接続する度に新しいIPアドレスが付与されてしまう場合が多い。これに対し、接続ごとにDNSレコードを更新することで一意のホスト名を常時接続環境を利用する自宅のパソコンに対して付与するサービスがDDNSである。

IT用語辞典 e-Wordsより

「プロバイダが付与するIPアドレスはころころ変わる。そんなアドレスにドメインネームを授けるのがDDNS」という感じです。

BuffaloとかIO Dataのルータを使っているなら、メーカー提供のDDNSサービスとルータが連携するため、DDNSの導入に何の苦労もいりません。でもAirMac Extremeユーザは違います。頑張らないといけません。

2. 無料DDNS ieServer.Net

「無料」「DDNS」で検索するとサービスがいくつか見つかります。その中から有限会社アゴラが無料提供しているDDNSサービス「ieServer.Net」を選んでみました。

選んだポイントは、つぎのとおりです。

  • 無料!!!!!。
  • 登録する情報はメールアドレスだけ。
  • GETメソッドでIPアドレスを更新できる。

GETメソッドとは、
「http://hogera.com/index.html?username=usr&passwd=pass」
のように、ページのURLに続く「?」以降に、サーバに渡したい情報をくっつける方法です。パスワード等の重要な情報を渡すには向かないかもしれません。ただし、「https://」ならば暗号化されるので大丈夫です。ieServer.NetのIP更新ページには「https://」が用意されています。

ieServer.NetのDDNSを利用すると、「dip.jp」、「fam.cx」など、好みのドメインに任意のサブドメイン(ユーザネーム)を付加した、例えば「hogehoge.dip.jp」とか「hogehoge.fam.cx」といったドメインネームを自宅サーバに割り当てることができます。

3. ieServer.Net用クラスieserver

ieServer.Net用のクラスieserverを作りました。ファイル「ieserver.py」として適当なディレクトリ、例えば「hogehoge」に保存します。

ieserver.py

class  ieserver()で定義されている変数は次のとおりです。

  • domain: ieServer.Netへユーザ登録した時に選択したドメイン
  • username:  ieServer.Netへユーザ登録した時に設定したユーザネーム(サブドメイン)
  • passwd:  ieServer.Netへユーザ登録した時に設定したパスワード
  • ip: DDNSへ登録するIPアドレス
  • logfile: ログファイルの名称(デフォルト ./log.txt)
  • max_log: ログファイルに保存するログの最大数(デフォルト 10)
  • max_days: 強制的にDDNSを更新するまでの日数(デフォルト 1)

メソッドは次のとおりです。

  • update():  ieServer.NetのDDNSレコードを更新

updateメソッドは、次の場合にDDNSを更新します。

  • 前回のDDNS更新時のIPアドレスと、現在のIPアドレスが異なる場合
  • 前回のDDNS更新から現在までの日数が、設定(max_days)を超過している場合

4. クラスieserverとmyipを使ってIPアドレスをDDNSレコードに登録する

適当なディレクトリ、例えば「hogehoge」に次のファイルを配置します。

  1. ieserver.py: 今回作成したieServer.Net用スクリプト
  2. myip.py: 先日作成したグローバルIPアドレスを取得するためのスクリプト
  3. ieserver-ddns-update.py: 上記2つをインポートして、DDNSレコードを更新するスクリプト(下記)

ieserver-ddns-update.py

2015.06.01 スクリプトファイルのパスを取得する部分を修正しました。

ログファイルが作成されるディレクトリに関してちょっと細工しました。次の箇所です。

「os.path.abspath…..」でスクリプト「ieserver-ddns-update.ph」自体のパスが得られます。更に、「os.path.dirname」でディレクトリ名が取得できます。そして、そのディレクトリ名に「log.txt」をくっつけてログファイル名にしています。

クラスieserverのデフォルトのログファイル名は「./log.txt」で、ワーキングディレクトリにlog.txtが作成されます。でもログファイル名をこんな風に上書きすれば、ワーキングディレクトリに関係なく、常にieserver-ddns-update.pyと同一ディレクトリに作成されます。

次の箇所は,「ieserver-ddns-update.ph」が存在するディレクトリにパスを通すための命令で,同ディレクトリに存在する「myip.py」と「ieserver.py」にパスが通ります。こうすれば,ワーキングディレクトリがどこであっても,「$ python /full/path/ieserver-ddns-update.ph」のようにスクリプトをフルパスで実行すれば動作させることができます。

さて,DDNSを更新してみます。

今回は,スクリプトが存在するディレクトリをワーキングディレクトリにし,スクリプトに実行権を与えて,直接スクリプトを実行してみました。

さてさて、立て続けにDDNSを更新を試みます。しかし、IPアドレスが変更されていないためにDDNSレコードが更新されません。このような仕様にしたのは、DDNSプロバイダに無駄に負荷をかけないためです。

なお、「max_days(デフォルト1)」に設定した日数が経過すれば、たとえIPアドレスが変更されていなくても、強制的にDDNSレコードを同一IPで上書きします。ieServer.NetのようなDDNSプロバイダは、長期間音信不通のユーザに対して、DDNSレコードの削除や会員登録の抹消などを実施するためです。

5. Webブラウザでアクセス

IPアドレスでアクセスしていた自宅サーバに、「http://hogehoge.dip.jp/」のような名前でアクセスできるようになれば、DDNSの導入成功です。

以上、長文お付き合いいただきありがとうございました。

(完)

アオスジアゲハ@汐留

アオスジアゲハ@汐留

1 Comment

  1. Pingback: DDNSを導入する(MyDNS.JP編) | Blue-black.ink

Leave a Comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください