monolog

monora log #=> ものろーぐ

Cisco IOS で tftp を使ったアップロードが Permission denied で怒られる件

Infrastructure

家の回線をv6プラスにしたところ、外側から特定のポートへアクセスさせたいような用途、つまりこのブログを自宅サーバーから提供することができないことに変更してから気が付いた。
しばらくは FreeBSD で PPPoE を終端して遊んでいたが、うっかりご家庭用のルータであるところの Cisco C891FJを買ってしまった。

とりあえずIOSのバックアップをすべく copy コマンドで自宅のサーバへ IOS をアップロードしようとした。しかし、Permission denied と怒られてアップロードに成功しなかった。

tftp (具体的には tftpd-hpa) サーバでの tftp 127.0.0.1 によるアップロード/ダウンロードはできる。何かがおかしい……

状況を整理

tftpd は 0.0.0.0:69/udp で listen している。 (systemctl start で動かない問題もあったが、それはまた別の問題)

# sudo lsof -i:69
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
in.tftpd 29780 root    4u  IPv4 xxxxxxx      0t0  UDP *:tftp
in.tftpd 29780 root    5u  IPv6 xxxxxxx      0t0  UDP *:tftp

tftpd root は /srv/tftpboot。こういう挙動をする。

# tftp 127.0.0.1
tftp> get something
Error code 2: Only absolute filenames allowed
tftp> get /something
Error code 2: Forbidden directory
tftp> get /srv/tftpboot/something
Received 7 bytes in 0.0 seconds

IOSでのエラーメッセージはこんな感じ。tftpd は verbose フラグを付けてもだんまり。

#copy flash:c800-universalk9-mz.SPA.153-3.M3.bin tftp://10.0.0.1/srv/tftpboot/ios/
Address or name of remote host [10.0.0.1]?
Destination filename [srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin]?
%Error opening tftp://10.0.0.1/srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin (Permission denied)

なるほど……?

解決方法

ホスト名とパスの間にもう1つ / を足せばよい。つまり tftp://[ホスト名]//パス とすればよい。

#copy flash:c800-universalk9-mz.SPA.153-3.M3.bin tftp://10.0.0.1//srv/tftpboot/ios/
Address or name of remote host [10.0.0.1]?
Destination filename [/srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin]?
!!!!!!!!!!!!!!(snip)!!
68176296 bytes copied in 129.832 secs (525112 bytes/sec)

気付いたきっかけは Destination filename の確認プロンプトだが、まさかこんなところでハマるとは思わなかった。
自宅インフラはトラブルシューティングが99%


最近はご家庭用の Wi-Fi AP であるところの Meraki Go も導入したが、こちらはコンソールに入る必要がないどころかそもそもコンソールポートが存在しない。
なんならインターネットに接続しないと初期セットアップすらできないし、Web設定画面はおまけでメインの設定は iOS / Android アプリから行うハイテク仕様。これがクラウドネイティブアクセスポイントってやつか〜

必要十分に高速で、かつ最高に安定している。おすすめです。

 

Comments are closed.