Windows11で特定のIPアドレスへのルーティングを固定する

とあるネットワーク環境にて機器更新後、この鯖への接続がブロックされるようになってしまった…

いろいろ試したところ、スマホのテザリングを使って他のネットワークからアクセスすれば接続できるというのはわかったが、有線LANを接続したままだとうまくいかない。

この鯖のIPへのアクセスだけスマホ経由にならないかとアレコレ調べたところ、routeコマンドで特定の宛先のゲートウェイを変更できることがわかり、設定してみた。

試したこと

routeコマンドでの方法にたどり着くまでに、

  • 有線LANを切断し、スマホのテザリング経由にするとアクセスできる
  • スマホのテザリング経由でも、LANケーブルが接続されていると有線LANが優先される
  • OpenVPNで接続したらどうか?と思い試したが、結局はうまくアクセスできず

など、まぁまぁ時間かかってわかった。

で、なんとか有線LANを繋いだままでもアクセスできないかと思い調べたところ、テザリングした状態で、

route add <TARGET_IP> mask 255.255.255.255 <GATEWAY> metric 1

を実行すればルーティングが設定され、うまくアクセスできることがわかった。

バッチファイルをつくる

routeコマンドで対処できることはわかったが、毎回、カタカタ打つのも面倒。おまけに、<TARGET_IP>は固定されていないので、GeminiにIPアドレスを調べて自動でrouteコマンドを実行するバッチファイルが作れるか?と聞いたところそれらしい提案をしてくれた。

@echo off
setlocal enabledelayedexpansion

set TARGET_HOST=<ターゲットのURL>
set GATEWAY=<テザリング時のゲートウェイアドレス>

echo Getting IP address of %TARGET_HOST% ...

rem Setting IP address from result of nslookup.
for /f "tokens=2" %%i in ('nslookup %TARGET_HOST% ^| findstr /r /c:"^Address:  [0-9]"') do (
    set TARGET_IP=%%i
)

if "%TARGET_IP%"=="" (
    echo Fails to get IP address
    pause
    exit /b
)

echo IP address: %TARGET_IP%
echo Set the route via %GATEWAY% .

rem Delete if same route information.
route delete %TARGET_IP% >nul 2>&1

rem Add new routing.
route add %TARGET_IP% mask 255.255.255.255 %GATEWAY% metric 1

if %errorlevel% equ 0 (
    echo msgbox "ルーティング追加したよ" ,vbInformation, "set_route_2_svr.bat" > %TEMP%/msgboxtest.vbs & %TEMP%/msgboxtest.vbs

) else (
    echo msgbox "ルーティング追加失敗!" ,vbInformation, "set_route_2_svr.bat" > %TEMP%/msgboxtest.vbs & %TEMP%/msgboxtest.vbs

)

試したところ、うまく行くらしい👍️ ちなみに実行には管理者権限が必要だった。

テザリング開始時に自動で設定する

タスクスケジューラを使えば、テザリング開始時(=無線LAN接続時)にプログラム/スクリプトを自動実行できるらしいので、設定してみる。手順は以下。

  • タスクスケジューラを起動
  • 「全般」でわかりやすい名前をつけてタスクを追加、実行時のアカウントはマシンの管理者アカウントにする
  • 「トリガー」で「イベント時ーログ」、Microsoft-Windows-NetworkProfile/Operationalを選択
  • 「操作」で「プログラムの開始」、作成したバッチファイルを指定する
  • 「条件」で「次のネットワーク接続が使用可能な場合に~」でテザリング使用時のプロファイルを選択
  • 「設定」で「タスクが既に実行中の場合に~」で既存のインスタンスの停止を選択

実際の動作

テザリングをする前にコマンドプロンプトを開いて、

route print

で現状のルーティングを確認する。

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0      192.168.4.1     192.168.4.93     25
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    331
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
      192.168.4.0    255.255.255.0            リンク上      192.168.4.93    281
     192.168.4.93  255.255.255.255            リンク上      192.168.4.93    281
    192.168.4.255  255.255.255.255            リンク上      192.168.4.93    281
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上      192.168.4.93    281
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上      192.168.4.93    281
===========================================================================

テザリング開始、しばらくしてルーティングの確認をすると、

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0      192.168.4.1     192.168.4.93     25
          0.0.0.0          0.0.0.0      172.20.10.1      172.20.10.9     50
     115.**.**.81  255.255.255.255      172.20.10.1      172.20.10.9     51
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    331
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
      172.20.10.0  255.255.255.240            リンク上       172.20.10.9    306
      172.20.10.9  255.255.255.255            リンク上       172.20.10.9    306
     172.20.10.15  255.255.255.255            リンク上       172.20.10.9    306
      192.168.4.0    255.255.255.0            リンク上      192.168.4.93    281
     192.168.4.93  255.255.255.255            リンク上      192.168.4.93    281
    192.168.4.255  255.255.255.255            リンク上      192.168.4.93    281
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上      192.168.4.93    281
        224.0.0.0        240.0.0.0            リンク上       172.20.10.9    306
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上      192.168.4.93    281
  255.255.255.255  255.255.255.255            リンク上       172.20.10.9    306
===========================================================================

お~、素晴らしい! 特定のアドレスだけテザリング先のゲートウェイ経由になった。(“115.**.**.81″の行)

試しにホームページを開いてみると、

やった!表示されるようになった!

これで今までと同じく、思い立ったときに記事の投稿ができるし必要なときにメモ見に来れる👍️