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

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
```
- https://my.f5.com/manage/s/article/K16418

## つくった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
```

# 上記以外の参考
- https://qiita.com/kokosan60/items/a135f0e59e2790db36a3
- https://qiita.com/k-akie/items/d3106cbb03b10f21b6a1
- https://my.f5.com/manage/s/article/K14045