良い子のみんな、元気に自宅ネットワークに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
サイトは英語だが、下の方に説明動画があって、
それを見ながらやればなんとかなるはず。
やることは以下の通り。
- アカウント登録(無料)
- Free Zoneの取得(無料)
- Aレコードの登録
- コードの取得
- cronの設定
がんばれ!
といいつつ一応説明を付けておく←えらい
<追記>
こんなメールが来て、せっかく作ったドメインが削除されてしまった。
ClouDNS: Deleted inactive DNS zones
reason: there are no DNS requests for the past month
泣きながら以下の作業を繰り返して、ドメインを取り直した。
おそらく原因は setopt nonomatch を .zshrc に追加しなかったことと、
書いてあるとおりDNS requestがなかったこと。
なのでその対策も追加しておいた。
<追記ここまで>
1. アカウント登録(無料)
ここからアカウント登録。
2. Free Zoneの取得(無料)
アカウント作成後ダッシュボードの
"DNS Hosting" → "create zone"をクリック。
右下の「無料のゾーン」を選択する。
好きなドメインを指定する。
3. Aレコードの登録
下の画像ではもうAレコードを登録した後だが、
最初はAレコードが存在しない。
なので、下の画像右側にある赤枠の「Add new record」を押す。
タイプは「A」のまま、下の赤枠のところにIPアドレスを入力して、
Aレコード(ドメインにアクセスしたときに向かうIPアドレス)を登録する。
ホストのところは空白のまま。
4. コードの取得
↑この辺をクリックして、レコードをactivateする。
以下のような文字列が表示されるので、
コピーしてどっかに保存しておく。
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。
結構解決に時間がかかったが、
やっと快適な状態に落ち着くことができた。
やったね!