Yamahaルータのちょこちょこスクリプト
リモートワーク需要で、YamahaのルータのL2TP設定することが多くなってきたんですが……。
基本ユーザ数が多すぎてコピペとトンネル数字入替がめんどくさいのと、手動で”no “をCtrl+Vするのがだるくなってきたのでスクリプト作りました。
JavaScriptでざーっと作ってあるので、HTMLコピペしてあげればデスクトップとかでも動きます。
パスに文字入れたいとかあればー。
自分で使うついでに置いておくので使う人いたらどうぞー。
Windowsのコマンドプロンプトで動くPerlも置いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#!/usr/bin/perl use strict; use warnings; use Encode; use utf8; binmode STDOUT, ":encoding(cp932)"; # L2TPユーザたくさんつくるPerl # 文字 my @moji = qw/a b c d e f g h i j k m n p q r s t u v w x y z A B C D E F G H J K L M N P Q R S T U V W X Y Z 2 3 4 5 6 7 8 9/; # 前情報入力 my $minline = 1; my $maxline = 10; my $ident = ""; my $psk = ""; my $kpav = 0; my $zfill = 0; my $uc = 0; my $pc = 0; my $output = ""; print "開始トンネル番号(default:1):"; $minline = <STDIN>; print "終了トンネル番号(default:10):"; $maxline = <STDIN>; print "ユーザ識別子(default:vpnuser):"; $ident = <STDIN>; print "事前共有鍵 ※8文字以上(default:sharedkey):"; $psk = <STDIN>; print "キープアライブ利用有無 1=有,0=無(default:1):"; $kpav = <STDIN>; print "ユーザ序数0埋桁数(default:2):"; $zfill = <STDIN>; print "ユーザ数(default:10):"; $uc = <STDIN>; print "パスワード桁数(default:8):"; $pc = <STDIN>; print "出力ファイル名(default:l2tp.txt):"; $output = <STDIN>; # 改行削除 chomp($minline); chomp($maxline); chomp($ident); chomp($psk); chomp($kpav); chomp($zfill); chomp($uc); chomp($pc); chomp($output); # 初期値入力 if ($minline eq "") { $minline = 1; } if ($maxline eq "") { $maxline = 10; } if ($ident eq "") { $ident = "vpnuser"; } if ($psk eq "") { $psk = "sharedkey"; } if ($kpav eq "") { $kpav = 1; } if ($zfill eq "") { $zfill = 2; } if ($uc eq "") { $uc = 10; } if ($pc eq "") { $pc = 8; } if ($output eq "") { $output = "l2tp.txt"; } # 出力ファイルの末尾が.txtじゃない場合.txtを付ける if ($output !~ /^.+\.txt$/) { $output .= ".txt"; } # エラー my @errors; if ($minline !~ /^\d+$/) { push(@errors, "開始トンエル番号が数値でないです。"); } if ($maxline !~ /^\d+$/) { push(@errors, "終了トンエル番号が数値でないです。"); } if ($zfill !~ /^\d+$/) { push(@errors, "ユーザ序数桁数が数値でないです。"); } if ($uc !~ /^\d+$/) { push(@errors, "ユーザ数が数値でないです。"); } if ($pc !~ /^\d+$/) { push(@errors, "パスワード桁数が数値でないです。"); } if (length($psk) < 8) { push(@errors, "事前共有鍵は8文字以上です。"); } if ($kpav != 1 && $kpav != 0) { push(@errors, "キープアライブ有無は1か0です。"); } if ($maxline < $minline) { push(@errors, "開始トンネル番号が、終了トンネル番号より大きいです。"); } # エラーがあれば終了 if (scalar(@errors) > 0) { printf("%s", join("\n", @errors)); exit(1); } # 置き換え処理 if ($kpav == 0) { $kpav = "off"; } else { $kpav = "on"; } # 出力 open my $file, ">:encoding(cp932)", $output; flock($file, 2); truncate($file, 0); seek($file, 0, 0); # 認証 printf $file "pp select anonymous\n"; for (my $i = 1; $i <= $uc; $i++) { my $rand = ""; for (my $j = 0; $j < $pc; $j++) { $rand .= $moji[int(rand(@moji))]; } printf $file "pp auth username %s%0".$zfill."d %s\n", $ident, $i, $rand; } print $file "\n"; # トンネル for (my $i = $minline; $i <= $maxline; $i++) { printf $file "tunnel select %d\n", $i; printf $file " tunnel encapsulation l2tp\n"; printf $file " ipsec tunnel %d\n", $i; printf $file " ipsec sa policy %d %d esp aes-cbc sha-hmac\n", $i, $i; printf $file " ipsec ike keepalive log %d off\n", $i; printf $file " ipsec ike keepalive use %d %s\n", $i, $kpav; printf $file " ipsec ike nat-traversal %d on\n", $i; printf $file " ipsec ike pre-shared-key %d text %s\n", $i, $psk; printf $file " ipsec ike remote address %d any\n", $i; printf $file " l2tp tunnel auth off\n"; printf $file " l2tp tunnel disconnect time off\n"; printf $file " l2tp keepalive use on\n"; printf $file " ip tunnel tcp mss limit auto\n"; printf $file " tunnel enable %d\n", $i; } print $file "\n"; # トランスポート for (my $i = $minline; $i <= $maxline; $i++) { printf $file "ipsec transport %d %d udp 1701\n", $i, $i; } close($file); 1; |
てきとーに雑につくったやつなんで中身についてはのーこめんとで……。
KintoneのカーソルAPIをPerlから使う 【Apache2.4/Ubuntu14.04】WebDAVサーバの設定