VPNで接続しているサーバーがあるのですが、他の場所はVPNを通したくないということがあるので設定してみました。
VPNはBIG-IP Edge Clientを使用していますが、WindowsのVPNとは違って?設定がよくわからず苦労しました。
Clientとしての対応のみですので、管理者に確認できる場合はよりよい方法もあるかと思います。
VPNを指定宛先にする
- https://qiita.com/mindwood/items/5c56769a7fc40cafe7e3
- 上記サイト参考に設定してみましたが上手くいきませんでした
接続の確認
パワーシェルで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
で名前を調べる
-
@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