2018-05-27

macOS に Google Domains の Dynamic DNS を設定する

Mac は「どこでもMy Mac」という純正サービスで外部から自分のPCに接続できる機能があるのですが、柔軟に使うにはやはりドメイン名でアクセスできると便利!
と言う事で、ダイナミックDNSを設定してみました。

macOS は「システム環境設定」の「共有」に「ダイナミック・グローバル・ホスト名」と言う項目があってダイナミックDNSをお手軽に設定出来そうな雰囲気を醸し出していますが、これが対応しているのは「セキュアダイナミックDNSアップデート(RFC3007)」というプロトコル。
そしてそのプロトコルに対応したDNSサービスは私が調べた中ではDynくらいしかありませんでした。
過去にこれを試したことがあるのですが、イマイチ安定しないし、AirMacからは「ダイナミック・グローバル・ホスト名」の設定が消えるし、あまりオススメできない方法となります。

ということで DNS サービスは広く使われている更新プロトコル「DynDNS2 Client Update Protocol」を使える Google Domains を使う事にしました。
Google Domains は未だに Beta サービスのままですが、有償サービスとして日本でも利用可能になっています。

 

また、ダイナミックDNSクライアントは、ddclient を使う事にしました。
これも広く使われていますし、DynDNS2 だけでなく Google Domains 独自プロトコルにも対応しているようです。

 

Google Domains にサブドメインを追加

複雑なことは何もなく、ダイナミックDNSを選んで名前を入力、追加を押すだけの簡単な作業です。
追加されたサブドメイン毎にユーザー名、パスワードが生成されるのでこれを ddclient の設定に使います。

 

ddclient のインストール

MacPorts からインストール

ddclient はMacPortsでインストール出来ます。

$ sudo port -c install ddclient

インストールの終わりにこんなメッセージが表示されます。

###########################################################
# A startup item has been generated that will aid in
# starting ddclient with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo port load ddclient
###########################################################

自動機能の設定は無効になってるから、自動起動したければ sudo port load ddclient を実行してね、とのこと
やはり結果出力はちゃんと確認するべきですね。

ddclient を Google Domains 向けに設定する

インストール出来たら早速設定を始めます。
ddclient にはデフォルトの設定ファイルが無く、代わりに設定サンプルファイルがあったためこれを元に設定を行う事にしました。
まず、サンプルファイルをコピーします。

$ sudo cp /opt/local/etc/ddclient/ddclient.conf.sample /opt/local/etc/ddclient/ddclient.conf

次にコピーした設定ファイルを編集します。
いつもの通りエディタは vi で、編集内容は後で diff を取ることにします。

$ sudo vi /opt/local/etc/ddclient/ddclient.conf

ddclient.conf の末尾に Google Domains の設定があるのでこれを流用するが、プロトコルに googledomains を指定するとIPアドレスの取得などに問題が発生したため、これを解決するのではなく一般的なプロトコル dyndns2 を使う事にした。

$ sudo diff -u /opt/local/etc/ddclient/ddclient.conf.sample /opt/local/etc/ddclient/ddclient.conf
--- /opt/local/etc/ddclient/ddclient.conf.sample 2018-04-25 12:02:54.000000000 +0900
+++ /opt/local/etc/ddclient/ddclient.conf 2018-05-02 15:34:31.000000000 +0900
@@ -214,3 +216,9 @@
# login=my-auto-generated-username,
# password=my-auto-generated-password
# my.domain.tld, otherhost.domain.tld
+protocol=dyndns2
+use=web
+server=domains.google.com
+login=xxxxxxxxxxxxxxxx
+password='xxxxxxxxxxxxxxxx'
+hugahuga.hogehoge.net

 

動作確認

実行してみると

-bash: /opt/local/sbin/ddclient: /opt/local/bin/perl5.24: bad interpreter: No such file or directory

というエラーが出るため ddclient を修正する。(UNIXの流儀としてこれが正しい対応かは自信が無いですが…)

$ sudo vi /opt/local/sbin/ddclient

先頭の2行

#!/opt/local/bin/perl5.24
#!/opt/local/bin/perl5.24

#!/opt/local/bin/perl5.26
#!/opt/local/bin/perl5.26

 とする。

ダメなことにオリジナルをコピーしておくのを忘れました orz
どのように変更したかわかるように残す事は徹底的に習慣化すべきだと思うのでこれは後で戻しておくことにします。

 

自動起動を設定

動作することが確認出来たので自動起動を設定します。

$ sudo port load ddclient

 

自動起動しない問題に対応

ここまで設定すれば動作するかと思いきや、自動起動がちゃんと機能していないようです。
調べて見るとキャッシュディレクトリが無いことが原因のようです。

$ sudo mkdir /opt/local/var/cache/ddclient

キャッシュディレクトリを作って再起動したところ、ちゃんと動作していることが確認出来ました。

 

高々 Dynamic DNS を設定するくらいのことですが、ちゃんと動作しているか確認するのを含めて結構時間がかかってしまいました。

それでは、また。

2018-05-25

macOS で ssh 接続にパスワードを使用できない設定を行った

macOS に ssh 接続する際にパスワード認証を使用できない設定を行いました。
今回設定するのは macOS High Sierra 10.13.4 ですが、sshd の設定は以前と大差ない模様。

現在の設定をコピーしておく

CUI で設定を編集するときは、いつでもデフォルトの設定に戻せるよう、ファイルをバックアップしてから作業します。
一見面倒な CUI はこういうところが便利ですね!
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org

設定ファイルを変更する

テキストファイルを編集できれば何を使用してもいいのですが、vi を使用して編集しました。(具体的な操作は割愛します。)
$ sudo vi /etc/ssh/sshd_config

変更内容は差分を見れば一目瞭然!間違いようがありません。
$ diff -u /etc/ssh/sshd_config.org /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.org    2018-05-25 11:54:28.000000000 +0900
+++ /etc/ssh/sshd_config        2018-05-25 11:59:38.000000000 +0900
@@ -57,11 +57,9 @@
 # To disable tunneled clear text passwords, change to no here!
 #PasswordAuthentication yes
 #PermitEmptyPasswords no
+PasswordAuthentication no

 # Change to no to disable s/key passwords
 #ChallengeResponseAuthentication yes
+ChallengeResponseAuthentication no

 # Kerberos options
 #KerberosAuthentication no
root での接続を禁止することも考えたのですが、デフォルトがパスワード認証禁止になっていたため、実質つなげない状態なので変更しないことにしました。

新しい設定を適用する

『システム環境設定』 → 『共有』 → 『リモートログイン』の OFF → ON でもいいらしいが、ssh の事なので CUI で行います。
$ sudo launchctl stop com.openssh.sshd

以上で設定完了です。
試しに接続してみたところ、ちゃんと意図したとおりになっていました。

それでは、また。