YAMAHA RTX/NVRルータの設定をgit管理する

Pocket

概要

 これまでYamahaルータをサーバ提供のため長年使用してきましたが、使用が長期に渡るにつれて、設定がより難解になりつつありました。といっても設定項目が複雑化しているわけではなく、設定箇所が単純に増加して管理の手間が増えるという状態です。

 ciscoやjuniperの機器などではRANCIDoxidizedなどの管理用ツールでサポートされていることが多く、oxidizedではyamahaルータについても一部サポートしているようです。ただ、そこまで機器数の多くないネットワークの管理に仰々しい体制はオーバーキルなので、今回は「変更管理」および「作業時のコメントの保持」を目的としてgit上で管理していきます。

 幸いにもオンプレミスで既にGitLabを運用していますので、今回はプライベートレポジトリをGitLab上に設定、その上で管理するように設定していきます。

注意点

 ネットワーク機器のconfigファイルは往々にしてAdministratorユーザの認証情報を含むので、公開されたレポジトリでの管理は行わないでください。(GitHubでもプライベートレポジトリを無制限に作成できますので、必ずprivateな環境で管理するようにしてください。)

環境情報

 今回使用する環境では管理対象のルータに192.168.1.1、管理に使用する端末には192.168.10.3のipv4アドレスが割り当てられています。

管理対象のルーター

 今回はNVR510を管理対象として作業していきます。基本的にtftpが使用できるYamahaルータでは同じ手順で再現が可能です。またRTX1200において同手順で管理追加できるところまでは確認済みです。

yamahart01> show environment detail
NVR510 BootROM Ver. 1.00
NVR510 FlashROM Table Ver. 1.00
NVR510 Rev.15.01.18 (Fri Jul 10 10:15:27 2020)
  main:  NVR510 ver=00 serial=M4X001078 MAC-Address=00:a0:de:e6:2e:14 MAC-Addre
ss=00:a0:de:e6:2e:15

管理に使用する端末

 基本的にgitがインストールされていて、tftpクライアントが導入できる環境であれば何でも良いと思います。今回は既に設定に使用している端末(Ubuntu Server 20.04.5が導入済みの環境)を利用しています。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

作業手順

ルータ上でのtftpの有効化

 ルータからの設定のdumpについて、Yamahaルータでは設定をtftp経由でバックアップ/リストア可能になっています。今回はこのバックアップ機能を使用していきましょう。

 既にtftpが有効化されている場合に新たに設定行を追加してしまうと既存の設定を上書きしてしまうので、念の為既存のtftp設定が無いか確認しておきます。下記を実行後に特に何も出力されなければ、既存設定は存在していません。

yamahart01> show config | grep tftp
Searching ...

 問題なければ実際にルータ上でtftpでのアクセスを有効化していきましょう。tftp host ${ipv4_address}で許可するアクセス元を指定して有効化することができます。(wan側など公開されたレンジに指定すると大変危険なので、基本的にはlan上で作業するようにしてください。)

yamahart01> administrator
Password:
yamahart01# tftp host 192.168.10.3
yamahart01# save
Saving ... CONFIG0 Done .

tftpクライアントの導入

 次に作業用の端末でtftpでconfigをdumpする準備をしていきます。デフォルトの状態ではtftpクライアントは導入されていないので、各自で導入してください。下記はubuntuのtftp-hpaパッケージを導入する一例です。

$ sudo apt install tftp-hpa
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  tftp-hpa
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.0 kB of archives.
After this operation, 63.5 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 tftp-hpa amd64 5.2+20150808-1ubuntu4 [19.0 kB]
Fetched 19.0 kB in 2s (12.7 kB/s)
Selecting previously unselected package tftp-hpa.
(Reading database ... 153021 files and directories currently installed.)
Preparing to unpack .../tftp-hpa_5.2+20150808-1ubuntu4_amd64.deb ...
Unpacking tftp-hpa (5.2+20150808-1ubuntu4) ...
Setting up tftp-hpa (5.2+20150808-1ubuntu4) ...
Processing triggers for man-db (2.9.1-1) ...

ルータからのconfigのdump

 それでは実際にルータからconfigをdumpしていきましょう。tftpコマンドは基本的にtftp ${ip_address} -c ${command} で実行できます。dumpする際にはリモートからファイルをgetする構文で作業します。nvr510.confは適当なローカルのファイル名で置き換えてください。

$ tftp 192.168.1.1 -c get config/${admin_password} nvr510.conf

 管理者パスワードを指定しない場合、下記のエラーが表示されアクセスが拒否されます。

$ tftp 192.168.1.1 -c get config nvr510.conf
Error code 2: Access violation

git repositoryへの追加

 ここまででローカルにdumpした設定を、実際にgitレポジトリにaddしましょう。gitは今回既に導入済みの為特に導入について追記しませんが、Windowsの環境など標準で備わっていない場合は適宜導入してください。

$ git init
Initialized empty Git repository in /home/*********/rtx-configuration/.git/
$ git remote add origin https://***********/network-configurations/rtx-configuration.git
$ git add .
$ git commit -m "Initial commit with current running configuration."
[master (root-commit) d1d43e2] Initial commit with current running configuration.
 1 file changed, 561 insertions(+)
 create mode 100644 nvr510.conf

 問題なくレポジトリに追加、git管理できるようになったので、リモートレポジトリにpushして共同編集が可能な状態にしておきます。

$ git push -u origin master
Username for 'https://**********': *********
Password for 'https://*********@**********':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 24 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 5.44 KiB | 5.44 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://**********/network-configurations/rtx-configuration.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

ルータへのconfigのアップロード

 では実際にルータに設定をどのように反映していくか。今回はtftpクライアントでアップロードして反映します。(GitLab CIとかGitHub Actions等で認証情報を持たせてデプロイとかも出来ますが、今回は単純に。)

 dumpした状態のconfigはそのままアップロードしても、変更が加えられていた場合中途半端に反映されてしまいます。設定ファイルのclear configuration部分とsave部分をuncommentしておきましょう。

#	NVR510 Rev.15.01.18 (Fri Jul 10 10:15:27 2020)
#		MAC Address : 00:a0:de:e6:2e:14, 00:a0:de:e6:2e:15
#		Memory 256Mbytes, 2LAN, 1ONU
#		main:  NVR510 ver=00 serial=M4X001078 MAC-Address=00:a0:de:e6:2e:14 MAC-Address=00:a0:de:e6:2e:15
#
#	Reporting Date: Nov 22 15:41:34 2022

# If you want to clear ALL configuration to default,
#  remove `#' of next line.

clear configuration
# If you want to save configuration to Nonvolatile memory,
#  remove `#' of next line.

save

 変更が完了したconfigをルータに実際にアップロードします。tftpコマンドでputすることでconfig0にアップロードしました。running-configとして他のconfigを読み込んでいる場合は、適宜置き換えてください。

$ tftp 192.168.1.1 -c put ./nvr510.conf config/${admin_password}

設定の反映

 最後にアップロードしたconfigを読み込む為にルータを再起動して、作業完了です。show config listするとルータ上で設定が反映されているかどうか、タイムスタンプから判断することができます。

NVR510 Rev.15.01.18 (Fri Jul 10 10:15:27 2020)
Copyright (c) 1994-2020 Yamaha Corporation. All Rights Reserved.
To display the software copyright statement, use 'show copyright' command.
00:a0:de:e6:2e:14, 00:a0:de:e6:2e:15
Memory 256Mbytes, 2LAN, 1ONU
yamahart01> administrator
Password:
yamahart01# show config list
No.   Date       Time     Size    Sects   Comment
----- ---------- -------- ------- ------- ------------------------------------
* 0   2022/11/23 00:35:50    4637 364/364
  0.1 2022/11/22 15:37:05    4637 365/365
  0.2 2022/11/22 14:56:28    4626 366/366
----- ---------- -------- ------- ------- ------------------------------------
yamahart01# restart

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください