見出し画像

【全文無料】bashでVyOSのConfig作成を自動化してみたお話 - ①

えー、また暫く皆様のナレッジになる様な記事を再開させて頂きます。
転職エントリーに一つも「スキ」がついていない事からも弊noteに
そもそもああ言う需要がない事もなんとなくわかりましたし。
あれはあれで書いててストレス解消になったので自分のためにはなった、
ので個人の感想としては非常に良かったのですが。

で、冒頭から愚痴と言い訳でスタートさせてしまい申し訳ないのですが、
分かっているんですよ、普通に Ansible 使えばええやん、と。
でもね、なんかあった時にさくっとメンテできる程の知見、
筆者にはない
んです。
そもそも構築方法やら使い方やらも実はよーわかっとらんです。

ですので筆者が辛うじてなんとなく書ける bash を使用して、
似た様な Config を自動で流し込む様なツールを作りたいと思います。


何故bashなのか?

だって、誰でもメンテナンス出来そうじゃないですか。
python でも良かった、なんなら python の方が需要はあるでしょうが、
筆者がよく解っていないというだけの理由で却下です。
bash でさえ若干原始的ですがもっと原始的な身近なやり方で言えば、
Excel マクロでコンフィグ生成して TeraTerm マクロで実機に流し込ませる
という手も考えましたが近年、セキュリティ的に
Excel マクロを使えない現場も少なくないので
折角作ったは良いものの使えない、もしくは
使うために許可取る必要があるなんて切ない事この上ないので却下です。
また、筆者が同様の記事を探した際、 bash でこういう事やっている記事が余り出てこなかったんですよね。
あってもターミナルログインとか show run 取得までとか。
他の人がネタにしていないなら、というわけでこの形にしました

構成

いつも通り、素っ気ない画で恐縮極まりないのですがこんな感じです。

設定変更サーバーに入ってサーバーにツールを仕込んでVyOSに設定入れる流れです。

またそこまで処理が重くないのと可搬性を考慮してラズパイで構築します。
中の OS は汎用性を考慮して Ubuntu ですけど。
RHEL系 ? アレは今後が不透明だから・・・

実は一番面倒、初期Config

他の NW 系 OS も大抵そうな気がしますが
VyOS はデフォルトでは SSH は有効化されていません。
まず SSH を有効化するまでも自動化させようとすると
それはそれは面倒過ぎて目も当てられないです。
とは言え、" install image "して再起動後、
その辺の設定を入れない、と言うのは中々考え難い話なので、
最低限下記の設定を入れた状態でいるという想定です

set interfaces ethernet eth0 address 'dhcp'
set service ssh
set system time-zone 'Asia/Tokyo'

 (※)よくよく見たらTime-Zone指定もいらないと言えばいらない

この辺の自動化は諦めました。
最悪この辺を設定済なイメージをコピーして使えば良いかと、知らんけど。

なお余談ですが NEC IX シリーズもデフォルトでは遠隔アクセス不可です。
ただし流石に実機なだけあって、
コンソールポートにコンソールケーブルを接続すれば
ID、PW が未設定状態でも CLI 操作可能です。
仮に以下のパラメーターで半自動的に設定を投入したい、と言うのであれば
コンソールケーブルを接続した状態で TeraTerm マクロ辺りを動かしても良いでしょう。

GE0.0 IP address = DHCP
username = hogehoge
password = fugafuga
ターミナルアクセス = telnet

TeraTermマクロだと以下の感じです。
 ※「コントロール ( O ) →マクロ ( M ) 」で起動させる事を想定

defaultconf.ttl

sendln 'enable-config'
wait ')#'
sendln 'int GigaEthernet0.0'
wait ')#'
sendln 'ip address dhcp'
wait ')#'
sendln 'no shutdown'
wait ')#'
sendln 'exit'
wait ')#'
sendln 'username hogehoge password plain fugafuga'
wait ')#'
sendln 'telnet-server ip enable'
wait ')#'
sendln 'wr mem'
wait ')#'
sendln 'exit'
wait '#'
sendln 'exit'

SSH ではなく telnet にしたのはサーバーからアクセスする際、
2台目以降のルーターを接続した際、サーバー側の ~./.ssh/known_hosts の書き換えが発生して面倒な事、
IX シリーズは「RSA」と「DSA」という暗号化方式しか対応しておらず(※1)
openssh 8.x系から上記2つの方式はデフォルトで無効化されている(※2)ので
ssh_config の設定を書き換えなければならず、それもそれで面倒だった事、
だったらキッティング時には telnet にして一通り設定出来たら
SSH 有効化、telnet 無効化すれば良いのでは?
と言う思惑があったりなかったり。
 (※1)2025年1月時点の情報です。
 (※2)RSAだけだったかも、違ったら訂正願います。
でもこの問題、「StrictHostKeyChecking=no」オプション付ければ良い話ですが、結局は好みとかそういう話です。

また、ser2net と言うパッケージを導入し簡易コンソールサーバー化
させても良いのですが、IX は起動した状態、
且つ未ログイン状態でコンソールケーブルを刺すと
既に「login:」が待ち受けています。
空 Enter で逃げるとすぐに「Password:」が来ます。
つまり「コンソールケーブルを接続してから起動」した時と
起動してからコンソールケーブルを接続させた」時の挙動に
差分があります。
そこまで対応するの、面倒でやってらんねえのでイケてない考えである事は
重々承知しておりますが運用ルールとかで逃げましょう。

正直ルーター10台程度であれば手でやっても手間は変わらない気がします。
ですが、100台とかその量でやるとなったら、
確実に手でなんてやってられないでしょうから
将来的な拡張性を踏まえてツール化した方が良さそうです。

ここまでのまとめ。

この時点もしくはタイトルの時点でお気付きかと思いますが、
このネタ、シリーズ化させます。
そもそも「bashで~」なんてタイトル付けときながら
一行たりとも bash スクリプトを紹介できていない、
何ならTeraTermマクロしか記載がない
ですし。
更に言うなら VyOS についての記載より IX についての記載が遥かに長くなってしまったので、これではタイトル詐欺と言われてもしょうがないですしね。次回からはコード、紹介します。

最後まで読んでくれてありがとうございます。
よかったら「スキ❤️」を押してくれたり、
ご課金と言う名のお気持ち頂ければ嬉しいです。
この内容でお気持ち頂くのは随分な気もしますが。

ここから先は

0字

¥ 100

期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる

この記事が気に入ったらチップで応援してみませんか?