LoginSignup
0
0

VPNを使う宛先IPを限定したい_BIG-IP Edge Client

Last updated at Posted at 2024-06-25

VPNで接続しているサーバーがあるのですが、他の場所はVPNを通したくないということがあるので設定してみました。
VPNはBIG-IP Edge Clientを使用していますが、WindowsのVPNとは違って?設定がよくわからず苦労しました。
Clientとしての対応のみですので、管理者に確認できる場合はよりよい方法もあるかと思います。

VPNを指定宛先にする

接続の確認

パワーシェルでGet-VpnConnectionとするとVPN接続名が確認できるはずなのに、何も表示されない!
⇒BIG-IPはWindowsのVPN?ではなく別で設定されているようです

宛先を指定する接続

BIG-IPのVPN接続を指定ではなくて、BIG-IP以外で通したい宛先IPの方を指定する方向としました
以降で指定しているのは、BIG-IPのVPNではない方の通信です

cmdでの設定

cmdを管理者で実行。route addで追加。
route printで確認すると、ちゃんと追加されている
インターフェイス番号を指定しないと反映されないので、route printで調べて、route addの最後にif 番号 を追加して実行する

BIG-IPでVPN接続

接続してから、route printしてみると先ほどroute addしたIPが無くなっている!
⇒BIG-IPは接続される度に、ルーティグテーブルが上書き?されるようです
参考
https://ja.stackoverflow.com/questions/61867/vpn%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e3%81%a8virtualbox%e3%81%aevm%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8f%e3%81%aa%e3%82%8b

route addに-pオプション

route -p addとすると固定ルートとなるはず
BIG-IPを再接続してroute printしてみると、固定ルートの所には残っているけど、ルーティグテーブルの所からは無くなっている!
⇒-pを付けてもBIG-IPを再接続すると上書きされてしまってだめなようです

できること

ということで、BIG-IPの場合は、接続の度にroute addするスクリプトを作るのがよさそうという事が分かりました。

BIG-IPをコマンドで起動

BIG-IPの起動もスクリプトでやってみようと調べていたら、GUIからではなくて、コマンドがあること分かりました!
起動するにはf5fpcの実行ファイルがある場所へ移動して、-startコマンドでできます。

cd  C:\Program Files (x86)\F5 VPN
f5fpc -start /u user /p pass

つくったbat

  • bigip_start.batでBIG-IPを起動/接続してIPの指定を行ないます
    • addIPがBIG-IPを通したくない宛先IP
    • 複数接続とかしていたら上手く動かないかもしれません
    • targetWifiはインターフェイス番号を調べる時に必要
      • netsh interface ip show interfaceで名前を調べる
bigip_start.bat
@echo off
setlocal EnableDelayedExpansion

@REM 管理者として実行
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
 @powershell start-process %~0 -verb runas
 exit
)

set pathF5="C:\Program Files (x86)\F5 VPN"
set vpnUser=user
set vpnPass=pass

@REM big-ipコマンド実行できるように移動
cd %pathF5%
@REM big-ipへ接続
f5fpc -start /u %vpnUser% /p %vpnPass%

@REM BIG-IPへの接続 戻り値を取得したい場合
@REM for /f "usebackq delims=" %%a in (`f5fpc -start /u %vpnUser% /p %vpnPass%`) do (
@REM     echo %%a
@REM  )

@REM f5fpc -startで接続された後すぐにroute addしても、その後に初期化処理?が入って上書きされるので
@REM BIG-IPの接続されたIPが検出されるまでループする
set cnt=0
:whileLoop
for /f "usebackq delims=" %%a in (`ipconfig ^| findstr "IPv4"`) do (
    @REM BIG-IP接続か判定に必要な文字を取り出し
    set ipv4=%%a
    set ipv4=!ipv4: =!
    set ipv4=!ipv4:IPv4アドレス............:=!
    set ipv4=!ipv4:~0,2!

    @REM IPの先頭が19ならIPv4を再取得する処理へ戻る
    @REM BIG-IPに接続されると10となるのでループしない
    if  !ipv4! == 19 (
        @REM 30回(30秒)くりかえす
        if !cnt! lss 30 (
            set /a cnt=!cnt!+1
            timeout /t 1 /nobreak >nul
            goto whileLoop
        )
    )
    @REM cntに30を足してループしないようにする
    set /a cnt=!cnt!+30
)

@REM インターフェイス番号の取得
@REM 「Wi-Fi」と「イーサネット」で確認
set targetWifi="Wi-Fi"
set interfaceIdx=0

:whileLoopInterfaceIdx
for /f "usebackq delims=" %%a in (`netsh interface ip show interface`) do (
    set iNo=%%a
    echo %%a | find !targetWifi! > nul
    if not ERRORLEVEL 1 (
        for /f "tokens=1" %%i in ('echo %%a') do (
            set interfaceIdx=%%i
        )
    )
)
@REM 取得できなかったら別名称で再度
if %interfaceIdx% == 0 (
    if not %targetWifi% == "イーサネット" (
        set targetWifi="イーサネット"
        goto whileLoopInterfaceIdx
    )
)

@REM route addに必要な情報の取得
for /f "usebackq delims=" %%a in (`ipconfig ^| findstr "サブネット マスク"`) do set ipMask=%%a
set ipMask=%ipMask: =%
set ipMask=%ipMask:サブネットマスク..........:=%
echo %ipMask%
for /f "usebackq delims=" %%a in (`ipconfig ^| findstr "デフォルト"`) do set ipDefault=%%a
set ipDefault=%ipDefault: =%
set ipDefault=%ipDefault:デフォルトゲートウェイ.......:=%
echo %ipDefault%

@REM インターフェイス番号を指定しないと正しく反映されない
set addIP=192.168.31.0
route delete %addIP%
route add %addIP% mask %ipMask% %ipDefault% if %interfaceIdx%

route print

pause

上記以外の参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0