9
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WindowsでVPN接続時に自動ルーティングする

Last updated at Posted at 2017-09-28

はじめに

Windowsの標準VPNクライアントでPPTPを使っているとルーティングの問題が悩ましいです。
デフォルトゲートにすると全通信がVPNを通ってしまい遅くなりますし、客先VPNだったりすると「何やってんの」と怒られます。。

デフォルトゲートのチェックは外しつつ、必要なルーティングを接続時に得る方法はいくつかあります。

Connection Manager で接続情報を作成

MS謹製のツール Connection Manager で接続情報を事前に作成します。
http://www.experts-exchange.com/articles/11931/Automatic-VPN-routes-configuration-for-PPTP-in-Windows-7-8.html

このツールでプロファイル作成すると接続時に自動実行するプログラムを指定できます。
バッチファイルを指定することでルーティングコマンドが叩けます。

...叩けますが、作成したプロファイルの配布が手間だったり、x64バージョンがWindows7向けに見つからなかったりと意外に制約が多いです。

PowerShellで接続管理

PowerShellスクリプトを登録することで接続時にフックできます。
https://technet.microsoft.com/ja-jp/library/JJ613766.aspx

できますがサンプルを見てわかるように相応の手間がかかります。
VPN (PPTP) ごときに、と言うのも何ですがここまで労力をかけてプログラム組むのは見合いません。

・・・と、どちらの方法も帯に短し襷に長し。
そこでオススメしたいのがタスクスケジューラを使った下記の方法です。

タスクスケジューラにイベントトリガーを設定

  1. タスクスケジューラで新規タスクを作成

    全般タブで「最上位の特権で実行」にチェックを入れておきます。
     

  2. トリガー

    トリガーから、イベント時 > カスタム > イベントフィルター > XML と進んで 手動で編集する にチェックを入れ、以下の内容を書き込みます。

    <QueryList>
    
      <Query Id="0" Path="Application">
    
        <Select Path="Application">*[System[Provider[@Name='RasClient'] and (Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='ここにVPN接続名を入力']]</Select>
    
      </Query>
    
    </QueryList>
    

    次に

    ここにVPN接続名を入力

    の文字列を、検知したいVPN接続名と置き換えます。
    これで指定のVPN接続が確立した際にフックをかけることが出来ます。

    EventID=20226 と指定すれば切断も検知可能です。
     

  3. 操作タブ

    操作タブから 新規 > プログラムの開始 で実行したいプログラムを指定します。
    route add コマンドを列挙したバッチファイルでもいいのですが、おすすめは netsh コマンドです。

    netsh.exe -f "実行したいnetshスクリプトファイルのパス"
    

    で柔軟に指定できます。
    netsh スクリプトファイルの中身はこのようになります。

    interface ipv4
    
    add route prefix=1.2.3.0/24 interface="ここにVPN接続名を入力" store=active
    
    (以下、必要なだけ繰り返し)
    
    exit
    

    ※ interfaceはID番号でも指定可能ですが、VPNが複数ある場合に一意とならないのでお勧めしません。
     

  4. 実行

    対象のVPN接続を実行し、接続後に route print して指定のルーティングが追加されていることを確認します。VPN接続時に一瞬コマンドプロンプトが表示されますが気にしないでください。

9
14
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
9
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?