Cisco 841M J と Google Domains を使った DDNS 設定

ズバリな記事がなかったので備忘録を兼ねて。

IOS 15.8(3)M1a のこのルータで DDNS がしたい。CCP から DDNS の設定ができるが、設定できる内容は限定的なのでコマンドを使って設定する必要がある。今回使いたいサービスは Google Domains の DDNS なのだが ip ddns update method を使うだけではうまくいかなかった。 この記事では DDNShttps を使う場合にどのようなことが起こるのか、調査方法と併わせて紹介する。

まずはログ出力を有効にしてみる。

841MJ#debug ip ddns update
Dynamic DNS debugging is on
841MJ#debug ssl openssl errors
TLS errors debugging is on

この状態で DDNS を作動させてみると以下のようなログが得られる。

Mar 22 15:05:24.371: DYNDNSUPD: Adding DNS mapping for test.example.com <=> 198.51.100.23
Mar 22 15:05:24.371: HTTPDNS: Update add called for test.example.com <=> 198.51.100.23
Mar 22 15:05:24.371: HTTPDNSUPD: Session ID = 0x8
Mar 22 15:05:24.371: HTTPDNSUPD: URL = 'https://myid:mypassword@domains.google.com/nic/update?hostname=test.example.com&myip=198.51.100.23'
Mar 22 15:05:24.371: HTTPDNSUPD: Sending request
Mar 22 15:05:24.391: opssl_SetPKIInfo entry
Mar 22 15:05:24.395: opssl_SetPKIInfo done.
Mar 22 15:05:24.459: 256316420:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:../VIEW_ROOT/cisco.comp/openssl/src/dist/ssl/s3_clnt.c:1249:

Mar 22 15:05:24.459: HTTPDNSUPD: Call returned Request Aborted, update of test.example.com <=> 198.51.100.23 failed
Mar 22 15:05:24.459: DYNDNSUPD: Another update completed (outstanding=0, total=0)
Mar 22 15:05:24.463: HTTPDNSUPD: Clearing all session 8 info

DDNS が失敗しているくさい。このメッセージはどうも証明書の問題らしい。解決するにはルータ本体に証明書を追加すれば良い。証明書を得る手段はなんでも良いが、とりあえずブラウザで https://domains.google.com/nic/update を開いてみてルート CA 証明書をダウンロードする。2021年まで有効な GlobalSignRootCA-R2 の証明書が入手できたと思う。

あとはそれをルータに流し込む。以下は自分が設定した内容。

841MJ#configure t
Enter configuration commands, one per line.  End with CNTL/Z.
841MJ(config)#crypto ca trustpoint GlobalSignRootCA-R2
841MJ(ca-trustpoint)#enrollment terminal pem
841MJ(ca-trustpoint)#exit
841MJ(config)#crypto ca authenticate GlobalSignRootCA-R2

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
-----END CERTIFICATE-----
quit
Certificate has the following attributes:
       Fingerprint MD5: 9414777E 3E5EFD8F 30BD41B0 CFE7D030
      Fingerprint SHA1: 75E0ABB6 13851227 1C04F85F DDDE38E4 B7242EFE

% Do you accept this certificate? [yes/no]: yes
Trustpoint CA certificate accepted.
% Certificate successfully imported

841MJ(config)#

DDNS を作動させて、うまくいけば以下のようなログが出て DDNS が成功する。

Mar 22 15:34:27.860: DYNUPD: SWIF comingup 'Virtual-Access3'
Mar 22 15:34:31.212: DYNDNSUPD: Adding DNS mapping for test.example.com <=> 198.51.100.37
Mar 22 15:34:31.212: HTTPDNS: Update add called for test.example.com <=> 198.51.100.37
Mar 22 15:34:31.212: HTTPDNSUPD: Session ID = 0xA
Mar 22 15:34:31.212: HTTPDNSUPD: URL = 'https://myid:mypassword@domains.google.com/nic/update?hostname=test.example.com&myip=198.51.100.37'
Mar 22 15:34:31.212: HTTPDNSUPD: Sending request
Mar 22 15:34:31.232: opssl_SetPKIInfo entry
Mar 22 15:34:31.232: opssl_SetPKIInfo done.
Mar 22 15:34:33.120:                         CRYPTO_OPSSL: Returning TCPFINErr as EOF rcvd
Mar 22 15:34:33.144: opssl_SetPKIInfo entry
Mar 22 15:34:33.144: opssl_SetPKIInfo done.
Mar 22 15:34:35.699:                         CRYPTO_OPSSL: Returning TCPFINErr as EOF rcvd
Mar 22 15:34:35.699: HTTPDNSUPD: Response for update test.example.com <=> 198.51.100.37

Mar 22 15:34:35.699: HTTPDNSUPD: DATA START
good 198.51.100.37
Mar 22 15:34:35.699: HTTPDNSUPD: DATA END, Status is Response data recieved, successfully
Mar 22 15:34:35.699: HTTPDNSUPD: Call returned SUCCESS, update of test.example.com <=> 198.51.100.37 succeeded
Mar 22 15:34:35.699: DYNDNSUPD: Another update completed (outstanding=0, total=0)
Mar 22 15:34:35.699: HTTPDNSUPD: Clearing all session 10 info

めでたし。