2017年7月6日木曜日

Excel関数でIPアドレスを含むNW機器Config作成を補助する

少量であれば問題ありませんが、
Configを作成する際、テキストエディタのみで作成していると、
誤りの原因になったり、時間が多くかかります。

ご存知の方も多いと思いますが、
Excelの関数を工夫することで、効率的にConfigを作成することが可能です。

ユーザからStaticルート、NAT、ACL等の、
設定追加依頼を下記のような電子媒体で入手する場合に便利です。
Cisco機器を例にしていますが、Juniper等でも応用可能と思います。
















上記のパラメータを利用してConfigが出来上がるような
計算式を用意してしまえば、以降は効率化できます。

初歩の学習としては、下記の書籍がお勧めです。


ただ、実際の要件では例外的な考慮が必要になる場合も多く、
全てを効率化することは難しいのが実情ではありますが、
このようなことを意識するかによって効率が大きく変わることがあります。

非常に初歩的な計算式を含みますが、下記ご参考までに。

■基本編

上記の表ですと、NATが簡単です。
""(ダブルクォーテーション)による文字列表現と、
"="(イコール)による参照と、"&"(アンド)による文字列結合を使います。

【計算式】
="ip nat inside source static "&C12&" "&D12

【結果】
ip nat inside source static 10.1.1.1 172.16.100.1

■応用編1

次にStaticルートに取り掛かりますが、
悩ましいのがCIDR表記(192.168.1.0/24等のスラッシュを含む表記)です。

同様の意味をConfigではサブネットマスクで表記する必要があります。

よって、当該セルのPrefix部を取り出し、Prefixから
サブネットマスクに変換します。

①IPアドレス部を取り出します。

【計算式】
=MID(C4,1,FIND("/",C4)-1)

【結果】
10.0.0.0

②Prefix部を取り出します。

【計算式】
=MID(C4,FIND("/",C4)+1,2)

【結果】
8

③変換テーブルを用意します。

このテーブルを使用してPrefixをサブネットマスクに変換します。

1 128.0.0.0 127.255.255.255
2 192.0.0.0 63.255.255.255
3 224.0.0.0 31.255.255.255
4 240.0.0.0 15.255.255.255
5 248.0.0.0 7.255.255.255
6 252.0.0.0 3.255.255.255
7 254.0.0.0 1.255.255.255
8 255.0.0.0 0.255.255.255
9 255.128.0 0.127.255.255
10 255.192.0.0 0.63.255.255
11 255.224.0.0 0.31.255.255
12 255.240.0.0 0.15.255.255
13 255.248.0.0 0.7.255.255
14 255.252.0.0 0.3.255.255
15 255.254.0.0 0.1.255.255
16 255.255.0.0 0.0.255.255
17 255.255.128.0 0.0.127.255
18 255.255.192.0 0.0.63.255
19 255.255.224.0 0.0.31.255
20 255.255.240.0 0.0.15.255
21 255.255.248.0 0.0.7.255
22 255.255.252.0 0.0.3.255
23 255.255.254.0 0.0.1.255
24 255.255.255.0 0.0.0.255
25 255.255.255.128 0.0.0.127
26 255.255.255.192 0.0.0.63
27 255.255.255.224 0.0.0.31
28 255.255.255.240 0.0.0.15
29 255.255.255.248 0.0.0.7
30 255.255.255.252 0.0.0.3
31 255.255.255.254 0.0.0.1
32 255.255.255.255 0.0.0.0

上記がセル:C30~E61に用意されたものとします。

④VLOOKUPで参照させる(Prefixをサブネットマスクに変換)

VLOOKUPの最初の引数は②をVALUE関数で値に変換したものです。

【計算式】
=VLOOKUP(VALUE(MID(C4,FIND("/",C4)+1,2)),$C$30:$E$61,2,0)

【結果】
255.0.0.0 

⑤基本編と同様に、"="と"&"を使ってip route コマンドに組み立てます。

■応用編2

ACLの場合もこれまでの内容で計算式化が可能ですが、
今までに記述しなかった箇所について説明します。

①VLOOKUPで参照させる(Prefixをワイルドカードに変換)

「応用編1」で記述した内容に近いです。
 最後から2番目の数値を2から3に変更することでワイルドカードになります。

【計算式】
=VLOOKUP(VALUE(MID(E21,FIND("/",E21)+1,2)),$C$30:$E$61,3,0)

【結果】
0.255.255.255

②ポート番号が省略される場合や、範囲指定を考慮する。

anyは空白、ハイフンがなければ eq 数値、
ハイフンがあればrange 前半数値 後半数値 という規則で表示させます。
※計算式及び結果1~3は参照するセルがH21~H23で変化しているのみです。

【計算式1】
=IF(H21="any","",IF(ISERROR(FIND("-",H21)),"eq "&H21,"range "&LEFT(H21,FIND("-",H21)-1)&" "&MID(H21,FIND("-",H21)+1,5)))

【結果1】
(空白)

【計算式2】
=IF(H22="any","",IF(ISERROR(FIND("-",H22)),"eq "&H22,"range "&LEFT(H22,FIND("-",H22)-1)&" "&MID(H22,FIND("-",H22)+1,5)))

【結果2】
eq 80

【計算式3】
=IF(H23="any","",IF(ISERROR(FIND("-",H23)),"eq "&H23,"range "&LEFT(H23,FIND("-",H23)-1)&" "&MID(H23,FIND("-",H23)+1,5)))

【結果3】
range 20 21

■番外編

以下はメモです。
セル:G21はCIDR表記「172.31.100.0/24」が記入されています。

(A)と(B)は、NATで1オクテット目が変換される場合に便利です。

(C)と(D)を利用すれば、ネットワークアドレスを記入するだけで、
環境の規則に従い、正系を若番、副系を老番等という計算式も作成可能です。
※(C)に、(D)に1や2を足したものを"&"で結合すればOKです。


(A)1オクテット目を取得する

【計算式】
=MID(G21,1,FIND(".",G21)-1)

【結果】
172

(B)2オクテット目以降を取得する

【計算式】
=MID(MID(G21,1,FIND("/",G21)-1),FIND(".",MID(G21,1,FIND("/",G21)-1))+1,11)

【結果】
31.100.0
※1オクテット目の後のドットも含めたい場合は、後ろの方の"+1"を削除

(C)3オクテット目までを取得する

【計算式】
=MID(G21,1,FIND("$",SUBSTITUTE(G21,".","$",LEN(G21)-LEN(SUBSTITUTE(G21,".",""))))-1)

【結果】
172.31.100

(D)4オクテット目を取得する

【計算式】
=MID(G21,SEARCH(".",G21,SEARCH(".",G21,SEARCH(".",G21,1)+1)+1)+1,SEARCH("/",G21,SEARCH(".",G21,SEARCH(".",G21,1)+1)+1)-SEARCH(".",G21,SEARCH(".",G21,SEARCH(".",G21,1)+1)+1)-1)

【結果】
0