Compnet

仕事とか遊びとか、日々折々

2017-03-01(水)

Windows 10 から RTX810 に L2TP/IPsec で接続する

Posted by Nakane, R. in technical   

新しく購入したノート パソコンから作業場所に VPN で繋いで NAS などと通信できるようにしました。 これで、出先からでもスマート フォンでテザリングするなどすれば、NAS に保存した資料が見れます。

VPN の方式は L2TP/IPsec です。 接続先のルーターは YAMAHA RTX810 ですが、実は Windows 10 からの L2TP/IPsec での接続は、公式には対応していないことになっています。 巷ではこの組み合わせで問題なく使用している事例も多いし、なにかあっても自身で対応できるので、このままでいきます。

設定自体は公開されている設定例を基にすれば簡単にできますが、2 点ほど引っかかったので備忘録をかねて記しておきます。

まずは、YAMAHA RTX810 の設定です。 設定例は YAMAHA 周辺機器の技術情報の Web サイトの中にある L2TP/IPsec の技術資料のページを参考にしました。

    :
pp select 1
 pp name "インターネット接続"
 description pp "インターネット接続"
    :
 ip pp secure filter in ... 201040 201041 201042 ...
 ip pp secure filter out ... 201040 201041 201042 ...
    :
 ip pp nat descriptor 20100
    :
pp enable 1
    :
pp select anonymous
 pp bind tunnel1
 pp auth request mschap-v2
 pp auth username <ユーザー名> <パスワード> <割り当てるIPアドレス>
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ccp type mppe-any
 ppp ccp no-encryption accept
 ip pp mtu 1258
 pp enable anonymous
    :
tunnel select 1
 tunnel name "Anonymous PP 用 L2TP 設定"
 description tunnel "Anonymous PP 用 L2TP 設定"
 tunnel encapsulation l2tp
 ipsec tunnel 1
  ipsec sa policy 1 1 esp aes-cbc sha-hmac
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 ipcp pp 1
  ipsec ike nat-traversal 1 on
  ipsec ike pre-shared-key 1 text <事前共有鍵>
  ipsec ike remote address 1 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log off
 ip tunnel tcp mss limit auto
 tunnel enable 1
    :
ip filter 201040 pass * * udp * 500,4500
ip filter 201041 pass * * esp * *
ip filter 201042 pass * * tcp * 1701
    :
nat descriptor type 20100 masquerade
nat descriptor address outer 20100 ipcp
nat descriptor masquerade static 20100 1 <RTX810のLAN側IPアドレス> udp 500,4500
nat descriptor masquerade static 20100 2 <RTX810のLAN側IPアドレス> esp
nat descriptor masquerade static 20100 3 <RTX810のLAN側IPアドレス> tcp 1701
    :
ipsec use on
ipsec transport 1 1 udp 1701
    :
l2tp service on
    :

必要な個所以外は思い切って省略してあります。 IP パケット フィルターと静的マスカレードは UDP の 4500 番ポートに関するものだけで十分かもしれませんが、検証していないのでこのままにしておきます。

Windows 10 では、[設定 - ネットワークとインターネット - VPN] の「VPN 接続を追加する」から、VPN の設定を登録します。

「VPN 接続を追加する」では、「VPN プロバイダー」欄を「Windows (ビルトイン)」にして、「サーバー名またはアドレス」欄に接続先のホスト名 (FQDN) か IP アドレスを入れます。 「VPN の種類」は「事前共有キーを使った L2TP/IPsec」にして、「サインイン情報の種類」を「ユーザー名とパスワード」にします。 「事前共有キー」欄、「ユーザー名」欄、「パスワード」欄はそれぞれ、RTX810 で設定した <事前共有鍵>、<ユーザー名>、<パスワード> にします。 一番下にある「サインイン情報を保存する」はチェックを入れておく方がいいでしょう。

VPN 接続を追加する
VPN の種類 「Windows (ビルトイン)」
接続名 (任意)
サーバー名またはアドレス 接続先のホスト名 (FQDN) または IP アドレス
VPN の種類 「事前共有キーを使った L2TP/IPsec」
事前共有キー RTX810 で設定した <事前共有鍵>
サインイン情報の種類 「ユーザー名とパスワード」
ユーザー名 RTX810 で設定した <ユーザー名>
パスワード RTX810 で設定した <パスワード>
サインイン情報を保存する チェックを入れる

Windows 10 では VPN の設定の追加の他に、もうひとつやっておかないといけないことがあります。 これを忘れると「リモートコンピューターと最初にネゴシエートするときに、セイキュリティ層で処理エラーが検出されたため、L2TP接続に失敗しました」というエラーになり、VPN が繋がらない可能性が大です。

そのやっておかないといけないこととは、レジストリへの値の登録です。 以下のコマンドを管理者権限のコマンド プロンプトで実行して、レジストリに値を登録します。

reg add HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2

L2TP/IPsec はその名前の通り IPsec を使用しています。 IPsec が使われ始めた当初は、NAT のようなアドレス変換の仕組みが途中に挟まると、その接続が確立できないという問題を抱えています。 Window は IPsec が使われ始めた当初からこれを搭載しているため、初期状態だとアドレス変換が挟まる通信がエラーになります。 上のレジストリの値を設定すると、アドレス変換の仕組みを通過するための NAT トラバーサル機能が、IPsec で有効になります。 初期状態がこのようになっているのは、従来のバージョンとの互換性を維持するためですが、いつもこのレジストリの追加を忘れてしまいます。

ところで、最近 SHA1 の強衝突耐性の突破が実証されたニュースがありました。 だからといって SHA1 が使い物にならなくなるわけではありませんが、できればよりビット長の大きい暗号、ハッシュの計算法を使うべきだという認識を持っています。 そこで、上の RTX810 の設定で ipsec sa policy 1 1 esp aes256-cbc sha256-hmac にしたところ、Windows 10 からの接続でネゴシエート エラーになってしまいました。 なぜか、ipsec sa policy 1 1 esp にしたときも同様にネゴシエート エラーになります。 ipsec sa policy の設定は ipsec sa policy 1 1 esp aes-cbc sha-hmac 以外にはできないようです。

Comments