Windows (この場合は Win7) で特定のルート (インターフェースではない) のゲートウェイを出力する方法はありますか? OpenVPN _up スクリプトでルートを動的に追加する必要がありますが、ゲートウェイは接続が形成されるときに動的に割り当てられるため、静的にスクリプト化することはできません。
_up スクリプトで使用できる環境変数 (route_vpn_gateway?) もいくつかあるようですが、まだ動作させることができていません。
GnuWin ツールの awk/grep を使用して 'routes' 出力を解析するつもりですが、もっとクリーンで簡単な方法があるでしょうか?
答え1
簡単に使用できますパワーシェル:
PS C:\Users\mmoor> $RouteTable = Get-WmiObject Win32_IP4RouteTable
PS C:\Users\mmoor> $RouteTable[0].Mask
0.0.0.0
PS C:\Users\mmoor> $RouteTable[0].Destination
0.0.0.0
PS C:\Users\mmoor> $RouteTable[0].NextHop
<Gateway Address>
これを、Windows のコマンド ラインから ROUTE PRINT を実行する場合と比較してください。Powershell は冗長なスクリプト言語なので、openvpn クライアント構成スクリプトを簡単に更新できます。これがあなたがしようとしていることだと思います。また、オブジェクト指向ベースでもあります。
私は次のようにします:
1)wmiからルーティングテーブルを取得します(上記参照)
2)各ルーティングテーブルエントリは配列内の1つのエントリです(したがって、上記の変数の後に[0]があります)
3)探しているIPアドレスが見つかるまで配列に対してforeachを実行します。
4)ルートテーブルエントリからNextHopメンバーを取得して保存する
5)OpenVPN クライアント構成ファイルを読み込みます (PowerShell で get-content を使用すると、ファイルの文字列配列が作成されます)
6) 置換する文字列が見つかるまで文字列配列を反復処理し、文字列を置換してファイルを保存します。
これが正しい方向を指し示すことを願っています。