はじめての Cisco C841M ルータ：ファームウェアアップデート

以前の記事（[はじめての Cisco C841M ルータ： 初期設定](https://qiita.com/clerk67/items/2078594af373c25cf89f)）では、Cisco C841M ルータの基本的な設定を行い、家庭内 LAN からインターネットに接続できるようになった。今回は、本製品のファームウェアの 15.5(3)**M4a** から 15.5(3)**M8** への更新作業を行う。

## 前提条件

- Cisco ホームページから最新版のファームウェアを入手済みであること。
- ファームウェアのルータ本体への転送は Mac から TFTP 経由で行う。

## TFTP サーバの準備

Cisco ルータにデータを転送する方法はいくつかあるが、今回は TFTP による転送を試す。TFTP というプロトコルは FTP の軽量版であるが、認証機能がないことなどから実際に使われる場面はかなり限定されているため、あまり一般的に知られていない。

macOS の場合は初期状態で TFTP サーバがインストールされている。以下を実行すると TFTP サーバが起動する。

```bash
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
```
クライアントに提供するファイル（今回はファームウェアのバイナリ）を `/private/tftpboot` に設置する。

```bash
sudo cp c800m-universalk9-mz.SPA.155-3.M8.bin /private/tftpboot
sudo chmod 666 /private/tftpboot/c800m-universalk9-mz.SPA.155-3.M8.bin
```

## ファームウェアの転送

Cisco ルータに `telnet` 等により接続したら `copy tftp: flash:` コマンドを実行し、TFTP サーバからルータ本体内部メモリへの転送を開始する。接続する TFTP サーバのアドレス（ここでは Mac の IP アドレス ＝ 10.10.10.3）やコピー先のファイル名を求められるので、適当な値を指定する。転送速度が遅いため結構時間がかかる。

```
C841M#copy tftp: flash:
Address or name of remote host []? 10.10.10.3
Source filename []? c800m-universalk9-mz.SPA.155-3.M8.bin
Destination filename [c800m-universalk9-mz.SPA.155-3.M8.bin]? 
Accessing tftp://10.10.10.3/c800m-universalk9-mz.SPA.155-3.M8.bin...
Loading c800m-universalk9-mz.SPA.155-3.M8.bin from 10.10.10.3 (via Vlan1): !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[OK - 59142700 bytes]

59142700 bytes copied in 161.524 secs (366154 bytes/sec)
```
以下のようにファームウェア `c800m-universalk9-mz.SPA.155-3.M8.bin` が本体内部メモリにコピーされた。

```
C841M#dir flash:
Directory of sdflash:/

    1  -rw-    58997820  Mar 15 2017 02:46:14 +00:00  c800m-universalk9-mz.SPA.155-3.M4a.bin
    2  -rw-        3068  Mar 15 2017 02:54:24 +00:00  cpconfig-8xx.cfg
    3  -rw-     1372160  Nov 23 2018 12:04:32 +00:00  nbar2_http_default.tar
    4  drw-           0  Mar 15 2017 02:55:00 +00:00  ccpexp
  407  -rw-       22750  Mar 15 2017 02:58:06 +00:00  home.html
  408  drw-           0  Nov 23 2018 12:04:32 +00:00  nbar2
  505  -rw-    59142700  Nov 25 2018 04:31:08 +00:00  c800m-universalk9-mz.SPA.155-3.M8.bin

1950683136 bytes total (1822560256 bytes free)
```
`verify` コマンドによりデータが破損していないことを検証する。

```
C841M#verify flash:c800m-universalk9-mz.SPA.155-3.M8.bin
Starting image verification
Hash Computation:    100% Done!
Computed Hash   SHA2: 9B108C8DDD36F2CF7F7800099AA944E0
                      F35D3EA37BDD72A86EAB06A5F3D5BB6C
                      F731F2517E58A85E8A2770C6C1716D7E
                      048A71D046BCDB71D15572DEB5D41FBF
                      
Embedded Hash   SHA2: 9B108C8DDD36F2CF7F7800099AA944E0
                      F35D3EA37BDD72A86EAB06A5F3D5BB6C
                      F731F2517E58A85E8A2770C6C1716D7E
                      048A71D046BCDB71D15572DEB5D41FBF
                      
CCO Hash        MD5 : 50118244B8E22C3950364F2C4D232FEC
Digital signature successfully verified in file sdflash:c800m-universalk9-mz.SPA.155-3.M8.bin
```

## ファームウェアの更新

ルータの起動時に読み込むプログラムを新しいバージョン 15.5(3)**M8** のファームウェアに変更する。

```
C841M#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.
C841M(config)#boot system flash:c800m-universalk9-mz.SPA.155-3.M8.bin
C841M(config)#exit
```
設定を反映させルータを再起動する。

```
C841M#copy running-config startup-config
Destination filename [startup-config]? 
Building configuration...
[OK]
C841M#reload
Proceed with reload? [confirm]
```
`show version` コマンドによりファームウェアのバージョンが `15.5(3)M8` であることが確認できる。

```
C841M#show version 
Cisco IOS Software, C800M Software (C800M-UNIVERSALK9-M), Version 15.5(3)M8, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2018 by Cisco Systems, Inc.
Compiled Thu 02-Aug-18 12:26 by prod_rel_team

...
```

## TFTP サーバの停止

ファームウェアの転送用に Mac 上で起動した TFTP サーバを停止しておく。

```bash
sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
sudo rm /private/tftpboot/c800m-universalk9-mz.SPA.155-3.M8.bin
```

## Cisco Smart Install の無効化

今回のファームウェア更新により Cisco Smart Install に関する設定が追加されたが、この機能に関しては複数の脆弱性が指摘されているため、Cisco が発表している推奨されるアクションに従い本機能を無効化しておく。

```
C841M(config)#no vstack
```