DDNS(Cloudns)に登録してみた:光ルーターPR-400MIにVPN接続するときにIPが変更になると接続先を手動で変更するのがめんどくさいので

  • 投稿日:
  • by
  • カテゴリ:

良い子のみんな、元気に自宅ネットワークにVPNしてますか!?
あとはDDNSに興味ありますか!?
ない人は、ここから先は読む価値ないのでさようなら!!!!!

さて。

出先の無料WiFiとかにつなぐときは、
セキュリティ上VPNを使いたいですよね。

NTTから貸し出される光ルーターPR-400MIに
VPN機能があるのは、皆さんご存知の通り。
設定方法はこちらなどを参考にされたい。
PR-400MIのVPNサーバ設定 L2TP/IPsec

VPNが使えるのはいいことなのだが、
ルーターが再起動すると、グローバルIPが変更になってしまう
ところが欠点。

IPが変わっているときに出先からVPN接続しようと思ったら、

「Oh〜アナタドコニ接続シヨウトシテマスカ?
ツナガリマセーン」

とエラーが出てイラッとしてしまうわけです。

こんなときのため、このPR-400MIには、
「グローバルIPが変更になったときにメールで通知してくれる、
IPアドレス通知機能」
がある。
NTTのひかり電話ルーターPR-400KIでグローバルIPアドレスをメール通知する方法!いつでもVPN接続が使えます! | あまろぐ!

まぁ便利!

ところが。
この機能はメールで通知するのだが、驚いたことに
SSL/TLS/STARTTLSなどの暗号化認証に対応していないようなのだ。
いろいろ調べてみたのですが、最近は、認証なしは言うまでもなく、
暗号化なしの認証を許しているSMTPサーバなどないですよ。

Yahooメールが使えるという記事を読んだが、
2021年に対応しなくなっていた↓

Yahoo!メールではセキュリティ強化の取り組みとして2021年1月19日をもちまして、メールソフトでYahoo!メールを送受信する際の認証方式「POP(非暗号化ポート: ポート番号 110)」「SMTP(非暗号化ポート: ポート番号 25 , 587)」の非暗号化通信による提供を終了いたしました。 Yahoo!メール - Yahoo!メール新着情報

つまり、実質このIPアドレス通知機能は使えない

さてどうしよう。

DynamicDNS

一方世の中には、DynamicDNSというサービスがある。
IPが変わっても、同じドメインでアクセスできるように、
ドメインの向かう先のIPを変更してくれる

(というか変更するように設定する)サービスだ。

Macで自動でIP変更を設定できるサービスを2分ほど調べたところ、
ここが無料で使えて良さそうだった。
ClouDNS: Dynamic DNS

Macでの設定の仕方はここに書いてあるので、その通りに設定する。
ClouDNS: Dynamic DNS for macOS
サイトは英語だが、下の方に説明動画があって、
それを見ながらやればなんとかなるはず。

やることは以下の通り。

  1. アカウント登録(無料)
  2. Free Zoneの取得(無料)
  3. Aレコードの登録
  4. コードの取得
  5. cronの設定

がんばれ!
といいつつ一応説明を付けておく←えらい

<追記>
こんなメールが来て、せっかく作ったドメインが削除されてしまった。

ClouDNS: Deleted inactive DNS zones
reason: there are no DNS requests for the past month

泣きながら以下の作業を繰り返して、ドメインを取り直した。
おそらく原因は setopt nonomatch を .zshrc に追加しなかったことと、
書いてあるとおりDNS requestがなかったこと。
なのでその対策も追加しておいた。

<追記ここまで>

1. アカウント登録(無料)

cloudns-vpn00.png

ここからアカウント登録。

2. Free Zoneの取得(無料)

アカウント作成後ダッシュボードの
"DNS Hosting""create zone"をクリック。

cloudns-vpn05.png

右下の「無料のゾーン」を選択する。

cloudns-vpn04.png

好きなドメインを指定する。

3. Aレコードの登録

下の画像ではもうAレコードを登録した後だが、
最初はAレコードが存在しない。

なので、下の画像右側にある赤枠の「Add new record」を押す。

cloudns-vpn01.png

タイプは「A」のまま、下の赤枠のところにIPアドレスを入力して、
Aレコード(ドメインにアクセスしたときに向かうIPアドレス)を登録する。
ホストのところは空白のまま。

cloudns-vpn06.png

4. コードの取得

cloudns-vpn02.png

↑この辺をクリックして、レコードをactivateする。

以下のような文字列が表示されるので、
コピーしてどっかに保存しておく。

cloudns-vpn03.png

5. cronの設定

みんな大好きcronは、定期的にコマンドを実行してくれるUnixの仕組み。
ただ、そのままだとログが残されなかったので、
ターミナルに以下のように打ち込んで、
ログファイルを作って書き込みできるようにしておく。

touch /var/log/cron.log
sudo chmod 666 /var/log/cron.log

で、以下のコマンドでcronを設定する。

crontab -e

みんな大好きviエディタ(異論は認める)が立ち上がって、
設定ファイルを編集できるようになる。
以下のように書き込んで、保存する。
viの使い方とかは、ググってください。

*/30 * * * * echo "\n date '+\%F \%T' " >> /var/log/cron.log
*/30 * * * * curl https://ipv4.cloudns.net/api/dynamicURL/?長い文字列  >> /var/log/cron.log 2>&1
30 3 * * 0 nslookup 取得したドメインの文字列.cloudns.nz
  • 1行目はログの書き込み
  • 2行目は肝心のClouDNSへのIPの設定
  • 3行目は1ヶ月で削除されないための、週に一度のDNS request

これでコマンド実行日時とログが、
/var/log/cron.logに書き込まれていく。
cronでは%が制御文字なので、\でエスケープしないといけないのが小さい罠。

さらに小さい罠として、zshを使っていると、
curlコマンドをターミナルに打ち込むと
"zsh: no matches found" というエラーが出るかもしれない。
この場合は何も考えずターミナルに

setopt nonomatch

と打ちこむと、エラーが出なくなる。

【zsh】curlでURLクエリ付きでGETしようとすると「no matches found」になるとき - Qiita

Macを再起動したときに同じことが起きないよう、
.zshrc にも上の一文を加えておく。

これを怠ると、1ヶ月リクエストがないという事態に陥り、
上で書いたようにドメインが削除されてしまう!

これで仕込みはOK。

一晩寝かせた後でログを見てみよう。

cat /var/log/cron.log

2022-01-16 00:02:23
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2 0 2 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
OK

みたくなっていればOK。

あとは、おうちのネットワークに接続したい端末のVPN接続先に、
取得したZone(うんたら.cloudns.nzとか)を設定すればOK。


結構解決に時間がかかったが、
やっと快適な状態に落ち着くことができた。

やったね!