要約
Wimax端末NEC Speed Wi-Fi 5g X11 のパケットフィルタ設定UIがあまりに酷いので、少しだけ手間が省けるようにした
事の起こり(チラシの裏)
wimaxの契約更新とともに、端末を変更しました。
新機種はNEC Speed Wi-Fi 5g X11 です。
https://www.uqwimax.jp/wimax/products/nar01/
ルータなのでパケットフィルタ設定をするわけですが、このUIが酷い。
過去に触ったルータ類のなかで、ダントツ最悪です。
後継機なのに、設定画面のUI全般が先代機より猛烈に悪化してます。
エントリ一覧では、削除しかできません。
登録画面で、登録済みのエントリを上書きすることもできません。
エントリを修正するには、削除してから同じ優先度での新規登録をやり直さなければいけません。
エントリ追加画面では優先度を自分で設定しなければなりません。未登録の優先度を指定しなければなりませんが、優先度はエントリ一覧画面にしか表示されません。
個人使用のルータなら「危ないポートだけ塞ぐ」が基本かと思いますが、種別(通過・破棄)のデフォルト値は「通過」です。
うっかり「破棄」にし忘れると、削除して再登録をしなければなりません。
ひとつのポートに対して、tcp in, tcp out, udp in, udp out を設定するのがお約束ですが、
破棄、in、TCP、any、ポート番号。
破棄、out、TCP、any、ポート番号。
破棄、in、UDP、any、ポート番号。
破棄、out、UDP、any、ポート番号。
と4回登録をしなければなりません。
CSVなどによる一括登録機能もありません。
同じ機種をお持ちで設定をしようとした方は共感いただけるのではないでしょうか。
このUIでは、閉じるのが必須のポート数件ですら、間違えずに登録しきれる気がしません。
少しでも楽にしようその1 javascriptでpost送信
javascriptからpost送信することで自動化しようと思いました。
しかし何らかのチェックが入るのか、403が帰ってきてしまいます。一旦諦めました。
少しでも楽にしようその2 javascriptでフォームを編集して送信ボタンを押す
これでやりました。
Excelの設定表から、「DOMを弄って送信を押すスクリプト」を出力するVBAを書きました。
今回自分で使わない項目は未実装です。(例:TCP FLAG, ICMP, IPアドレス指定など)
出力するスクリプト(エントリ1件分)
/* 種別 */
document.querySelector('input[name="Type_2_radio"][value="1"]').click();
/* 方向 */
document.querySelector('input[name="Direction_2_radio"][value="1"]').click();
/* プロトコル選択 */
document.querySelector('select[name="Protocol_select"] option[value="3"]').selected = true;
/* 送信元ipRadio */
document.querySelector('input[name="Source_IP_Address_radio_radio"][value="0"]').click();
/* 送信元portAny */
document.querySelector('input[name="Source_Port_Number_check_check"]').disabled = false;
document.querySelector('input[name="Source_Port_Number_check_check"]').checked = true;
/* 宛先IpRadio */
document.querySelector('input[name="Destination_IP_Address_radio_radio"][value="0"]').click();
/* 宛先portFrom */
document.querySelector('input[name="Destination_Port_Number_text_1"]').disabled = false;
document.querySelector('input[name="Destination_Port_Number_text_1"]').value = "2049";
/* 優先度 */
document.querySelector('input[name="Priority_2"]').value = '20';
/* 送信 */
document.getElementById('Apply_1').click();
実行
全件をまとめて実行できればよかったのですが、実際は1件送信するたびにダイアログが表示されることと、内部処理が完了しないと次の登録ができないので約10秒待つ必要がありました。(内部処理中に次を送ると、エラーが帰ってくる)
なので、1件登録するスクリプトを1行テキストで作成し、送信、10秒待ち、送信・・・の繰り返しでやりました。
実行は、chromeのコンソールからやりました。
何台もの端末に登録するのであれば、前述の「その1」の403エラーをすり抜けて一括登録できるようにしたいところですが、私物端末1台であれば許容範囲かなと思います。