from electron 2 web

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

L2TP/IPSec VPNが思った以上にくっそムズイ

最近はいろんな方法でvpnを張って遊んでいる。ssh-vpnとかいろいろ張ってみてそろそろ低レイヤーでVPNで有名なl2-vpnに挑戦しようかなと思って挑戦してみた。

そしたらかなりムズイしググったらいろいろ勘違いしていてなんか理解できなくてググりまくってたんだけど3日間ぐらいかけてやっと理解した気がするのでメモっておく。

やったこと

まずvpnを理解するためにssh-vpnを張った。大変だったができた。

次にssh-vpnvpnの概要が理解できたしもっと低レイヤーのVPNのボスに挑んでもいいだろうということでrouterboardを使ってネットでググってその通りにvpnを張ってみた。

MikroTik RouterOS and Windows XP IPSec/L2TP - MikroTik Wiki

RouterBoardでL2TP over IPsec VPNの構築 | geek log.

ができなかった。

なぜか?全く分からなかった。だってL2TP理解してないもん。

ということで調べまくった。がよくわからなかったのでとりあえず適当にvpnで接続できる公開vpn探してそこにvpnつないでみた。

VPN Gate 筑波大学による公開 VPN 中継サーバープロジェクト

そしたらいわゆる一般のブロードバンドルーターで張れた。

え!?l2tp対応してないとl2tp-vpn張れないんじゃ・・・

というところから始まってググりまくった。

んでまあ最終的にさくらのクラウドに鯖立てて張れた。

自分がやりたいこと

vpnとして自分のネットワークの一環に置きたい鯖A--VPCルーター(l2tp/ipsec対応)--さくらのクラウド--ISP--routerboard--PC(このpcとVPN用のさくらの鯖をローカル上でpingしたい)

L2TP/IPSec

L2TP

Layer 2 Tunneling Protocol - Wikipedia

PPTP / L2F / L2TP とは

l2のプロトコル。トンネリングプロトコル。上位層でpppとかpppoeとかを渡す。udp上で動く。udp1701(ググりまくって覚えてしまった)。l2tp自身は暗号化機能を持っていない。

  • l2tpのiso7層に当てはめた時の関係

L7(data:トンネリングさせるもの):PPP、PPPoE L7(data):L2TP L3:udp

L2TPプロトコルの動作とか

トンネルとセッションは違う。トンネル上でセッションはいくつでも張れる。だからVPNserver1,2とかできるしクライアントA,Bも同時に同じvpnserverにアクセスできる。

PS:なんかさくらのクラウドvpnはってwindowsandroid同時にセッション張ったら失敗した・・・

L2TPはLACとLNSが通信する。LNSのSはサーバー。LACのCはcontentratorだけど実質clientのCだと思っておけばいい。

ここで自分のやりたいことを思い出す。自分はさくらに向かってVPNを張りたい。つまりクライアント。だからrouterboardはLNSじゃないことはわかった。

が、ここで勘違いをしてしまった。LACはクライアントのpcとかの端末ではなくてクライアント側ルーターのことだと勘違いしてしまっていた。んでL2TPでトンネルを掘るんだしrouterboardにもL2TPクライアントとして設定がいろいろ必要なんだろうなと思っていろいろやってみたけどまだまだ理解していなかったのでよくわからなかった。

まあいろいろ調べてLACはwindowsとかの端末だということが分かった。んでとりあえず張ってみようということで学術VPNを見つけて普通のブロードバンドルーターで張ったらなんと張れてしまった。

え?なんで普通のルーターl2tp/ipsec張れるの?

結論から言うとl2tpトンネリングしてるから。

ipsecl2tpの協調

IPsec - Wikipedia

IPsec - AH・ESP・IKE

ipsecは3層。ipsecの上でl2tpを動かしている。

l2tp/ipsec vpnはまず

  1. 普通にtcpで通信できるようになってから

  2. ipsecで短方向コネクションを張る(l2tpのセッションとは違う)。このコネクションのことをSA(security associationという)

  3. 相手もそれを返す

ここまではIKEがやってる。wiresharkvpn張るとこを見たらISAKMPってプロトコルだった(IKEの実態はISAKMP/Oakley)。ちなみにISAKMPはudp500でやりとりする。

3' 相手を認証する。ここでは証明書を使う方式と事前共有キー(パスワード的なもの)方式の2つがある。暗号ではない。暗号は公開鍵使ったりして暗号する、

  1. 暗号化したデータをESPもしくはAHを使ってやりとりする。自分がwiresharkで見たときはESPを使っていた。ちなみにAHは暗号化機能はない。認証のみ。

ここまでで暗号化したセキュアな通信ができるようになった、このあとl2tpを使ってそのうえでいろいろ通信する、これ以上は暗号化されるのでwiresharkではなにやってるかみれない。

http://www.rtpro.yamaha.co.jp/RT/docs/l2tp_ipsec/sequence.jpg

5, トンネルを掘る。ただしl2tpudpの上でしか動かないんで(udp1701)ESPで暗号化された上ではudpで通信される

PS. wiresharkで見たらUDPまでみれた。その上は暗号化されていた

  1. トンネルが確立したらセッションを張る。

  2. セッションを張れたらやっとこれでデータを送れる。l2tpは大体そのうえでpppやpppoeを送っている。んでそのうえで普通ににデータとか送る。

L3:ipとか任意の何か L2(l2tpでトンネリングしたデータ):PPP or pppoe L2:l2tp L3:IPSec

長々と説明したがこんな感じ↓

+-----+          IPsecコネクション の確立       +-----+
|     |<--------------------------------------->|     |
|     |          ESP(L2TP制御メッセージ)        |     |
| LAC |<--------------------------------------->| LNS |
|     |          ESP(L2TPデータパケット)        |     |
|     |<--------------------------------------->|     |
|     |                    ・・・                  |     |
|     |<--------------------------------------->|     |
+-----+                                         +-----+

トランスポートモードのESPで暗号化されたL2TP制御メッセージ
+--------+--------+--------+--------+------------+----------+------------+
|   IP   |  ESP   |  UDP   |  L2TP  |  L2TP制御  |   ESP    |    ESP     |
| ヘッダ | ヘッダ | ヘッダ | ヘッダ | メッセージ | トレーラ | 認証データ |
+--------+--------+--------+--------+------------+----------+------------+
                  <=========================================>
                          暗号化される範囲

トランスポートモードのESPで暗号化されたL2TPデータパケット
+--------+--------+--------+--------+--------+--------+------------+----------+------------+
|   IP   |  ESP   |  UDP   |  L2TP  |  PPP   |   IP   | ペイロード |   ESP    |    ESP     |
| ヘッダ | ヘッダ | ヘッダ | ヘッダ | ヘッダ | ヘッダ |            | トレーラ | 認証データ |
+--------+--------+--------+--------+--------+--------+------------+----------+------------+
                  <===========================================================>
                                     暗号化される範囲

こんな感じになっているおかげで普通のルーターでも送れるってワケ。

でもLACをクライアント側ルーターにする通信方法もある。↓

CentreCOM AR570S 設定例集 2.9: #104

  • トンネルモードとトランスポートモード

トンネルモードはipsec全体を暗号化

トランスポートモードはdataのみを暗号化

みたいな感じ。

vpn

鯖のdhcpプールを作るときにはクライアントではなく鯖が存在するサーバー側でpoolを作って配信する。

CentreCOM AR570S 設定例集 2.9: #104

special thanks

ここめっちゃわかりやすい。

L2TP/IPsec

外にもいろいろサイト見てたけどブラウザのタブ開きすぎて重かったので消した。

最終的に張れた

さくらのクラウドに鯖たててl2tpできた。

ここを参照↓(くそみたいな記事なので見ないほうがいい

lv7777.hatenablog.com

sshvpn張るよりもなんかthe・ネットワークって感じがするな

まあ結局routerboard使わなかったんだけどね。

conclusion

最終的に記事の内容がなんかぐだぐだになってしまった感ある。

まあl2tp/ipsecをなんとか理解できた気がするしl2tp張れたのでよしとするか。

グダグダなのが悔しいのでそのうちl2tp/ipsec vpnでまた記事書きたい。