hack のためのネタ帳, etc,,,

状況

VPN 接続時、特定の IP のみ VPN を経由させるが、他の通信は全部、インターネット経由にしたい。

PowerShell の以下のモジュール
  • Microsoft / Docs / Windows / PowerShell / Reference / VpnClient
Add-VpnConnectionRoute というのがあって、VPN 接続の設定に個別の routing 情報を設定出来るようなのだが、それ以外の UI が見当たらない。また、Remove- はあるけど Get- や List- みたいなコマンドが見当たらないので、設定した routing の一覧を確認する方法がよくわからない。

解法

Add-VPNConnectionRoute list」でググったら、以下のページを見つけた。

Get-VPNConnection で得られた VPN に .routes を適用すると Add-VpnConnectionRoute した結果の一覧が得られるとのこと。

とりあえず、
Add-VPNConnectionRoute "VPN接続名" -DestinationPrefix "IPアドレス/ネットマスク長" -PassThru
とすると目的の VPN 接続に route が追加される。
-PassThru は結果の pass through なので、なくても良い。
設定されている routing の一覧は
Get-VPNConnection "VPN接続名" |% routes
で得られる他、
設定後に再接続を行うと、
route print
でも確認できる。

この設定は、例によって
  • %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk
の各セクションに格納されることで永続化されてて
NumRoutes=設定されているroute数
Routes=1route当たり16進72桁の設定値が128桁区切りで並ぶ
Routes=...
みたいになってた。
NumRoutes=0 の場合 Routes= の行は存在しない。

16進72桁で表される 36 byte (=576 bit) の routing データの内訳は先頭から
  • RouteMetric : little endian 32bit
  • AddressFamily: little endian 32bit (2 = IPv4, 0x17 = IPv6 ?)
  • NetMask(length) : little endian 32bit
  • IPAddress : (4 byte (IPv4) + 12byte (padding ?)) or (16 byte (IPv6))
  • 不明 : 8 byte
だと思う。

例えば、
PS C:\Users\kou> Add-VpnConnectionRoute "HOME" -DestinationPrefix "18.3.4.5/32" -RouteMetric 4660 -PassThru


DestinationPrefix : 18.3.4.5/32
InterfaceIndex    :
InterfaceAlias    : HOME
AddressFamily     : IPv4
NextHop           : 0.0.0.0
Publish           : 0
RouteMetric       : 4660
PolicyStore       :



PS C:\Users\kou> Add-VpnConnectionRoute "HOME" -DestinationPrefix "1234:5:6:7:8:9:a:b/128" -RouteMetric 4660 -PassThru


DestinationPrefix : 1234:5:6:7:8:9:a:b/128
InterfaceIndex    :
InterfaceAlias    : HOME
AddressFamily     : IPv6
NextHop           : ::
Publish           : 0
RouteMetric       : 4660
PolicyStore       :


のように設定すると
NumRoutes=2
Routes=341200000200000020000000120304050000000000000000000000000000000000000000341200001700000080000000123400050006000700080009000A000B
Routes=0000000000000000
のような設定値となる。
NextHop がどこかに入りそうな気がするが、IPv6 だと末尾の 8byte じゃ足らないし、Add-VPNConnectionRoute にもそれらしいオプションがなさそうなので気のせいだろうか?


なお、デフォルトでは、VPN 設定(プロパティ)の「ネットワーク」タブで
  • インターネット プロトコル バージョン 4 (TCP/IPv4)
  • インターネット プロトコル バージョン 6 (TCP/IPv6)
共に、「詳細設定」の「IP設定」のタブで
  • ☑ リモート ネットワークでデフォルト ゲートウェイを使う
にチェックが入っているため、全てのパケットが VPN を経由しようとするので、予めこの設定を OFF にしておく必要がある。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます