huruyosi’s blog

プログラミングとかインフラとかのメモです。

さくらのクラウドを使ってLS220DにアクセスするダイナミックDNSを実現する

目的

自宅に導入したLS220Dにスマホアプリの WebAccessiでアクセスを行える環境を作ります。

アクセスする時にはhttpsでアクセスしたいので独自ドメインを導入し、サーバ証明書も設置します。BuffaloNas.comからbuffalonas.comネームでアクセスすると、自宅に割り当てられたプロバイダのIPアドレスにリダイレクトされます。自宅に割り当てられるプロバイダーのIPアドレスは不定期に変更されているので、httpsでアクセスするには非常に都合が悪い状態です。そのため、独自ドメインを取得しダイナミックDNSを実現する必要があります。

ここでは書かないこと

独自ドメインの取得やサーバ証明書の設置方法、buffalo.comネームの設定方法は書きません。

実現イメージ

LS220Dは定期的にBuffaloNas.comに登録されている自身のIPアドレスを更新しています。別に契約しているVPSがあるのでVPSさくらのクラウドDNSを更新するために仕組みを作ります。

BuffaloNas.comに自分のLS220Dのbuffalonas.comネームを入れると、自宅のIPアドレスにリダイレクトされるので、これを利用します。リダイレクトされるということは buffalonas.comからのHTTPステータスが302で帰ってくるはずで、HTTPヘッダーを見れば、リダイレクト先のURLが記載されています。これのホストは自宅のIPアドレスになっています。

自宅のIPアドレスが分かれば、さくらのクラウドAPIDNSを更新することができます。

できあがったもの

GitHubに置いてあります。既にAPIさくらのクラウドDNSを更新している方がいたのでありがたくforkさせていただきました。

blog.cles.jp

forkして変更した内容は下の通りです。

  • DNSに登録するIPアドレスはBuffaloNas.comに登録してあるホストにしました。
  • jsonを処理している json コマンドの入手方法がわからないのでjqに変更しました。
  • docker コンテナにしました。
  • config.jsonを廃止し、実行環境に依存する値はscddns.envファイルで指定します。このファイルはdocker composeのenv_fileに使われています。
  • lastip.txt は予め作成する必要はありません。またこのファイルはデータコンテナに入れてあります。
  • ログをデータコンテナに書き出し、後から参照できるようにしました。

github.com

これをcronで実行すれば目的達成です。