SoftLayerのVyattaでL2TP/IPsecを試してみた

SoftLayerで提供されるVyatta Gateway Appliance(以下VGA)を使ってL2TP/IPsecでRemote Accessを構成し、SoftLayerのPrivate Networkにアクセスする構成を試してみました。L2TP/IPsecはサイト間のVPNではなく、PCそれぞれがVPN接続をしてリモートサイトにアクセスする形となり、接続時にはユーザー認証が行われます。


#### (2015/06/24追記)

最初に記事を書いた時点の最新バージョンVSE6.7R5では、NAT traversalが有効で、NATされた環境からL2TP/IPsecで接続される場合、複数VPNセッションが確立できないという問題がありましたが、最新のVSE6.7R8では修正されていることを確認しました。


## L2TP/IPsecを使うメリット

SoftLayerでは、管理用に共用のSSL-VPN接続を提供しているのであまり使うケースがないかもしれませんが、以下のような特長があります。

- より高速なスループットが期待できる
 管理用や開発用の環境で大量のISOイメージなどを転送する場合、管理用のSSL-VPNからよりも、インターネット側からRemote AccessでSoftLayer環境に接続するほうが、より高速なスループットが期待できる。

- RADIUS認証が可能
 また、今回は試していませんがRADIUS認証も可能なので、既存のActive DirectoryのユーザーでRemote Accessの認証をさせることもできます。

- クライアント側の追加ソフトウェアが不要
 L2TP/IPsecは、WindowsでもMac OS Xでもデフォルトでクライアントがインストールされているので、追加のソフトウェアが不要で、簡単に使うことができるのもメリットです。

## 検証結果

結果から言うと、2015/01時点でSoftLayerからVGAにデフォルトで提供されるバージョン(VSE(Vyatta Subscription Edition) R6.3)では、vyatta-pppパッケージが正しく導入されていないため、L2TP/IPsecでの接続は失敗しました(L2TPではPPPで認証を行います)。最新版のVSE 6.7R5では修正されいて正常に使えるので、アップグレードをチケットでSoftLayerに依頼してから設定を行ってください。

また、設定はVGAで試していますが、機能制限はないのでVyatta Community Editionでも同じことができると思います。

## 検証した環境

検証した環境は以下の通りです。

- Vyatta: VSE6.7R5
- クライアントOS: Windows 7 Professional (英語版) / Mac OS X
- VyattaのPublic側アドレス：101.111.212.71
- クライアントのIPアドレス：192.168.1.0/24
- クライアントに割り当てるアドレスプール：192.168.10.10-192.168.10.20
- ユーザー認証：Vyattaローカルのユーザーで認証


## Vyatta設定

```text
# IPsec configuration
set vpn ipsec ipsec-interfaces interface bond1
set vpn ipsec nat-traversal enable
set vpn ipsec nat-networks allowed-network 192.168.1.0/24
set vpn ipsec nat-networks allowed-network 192.168.13.0/24

# L2TP endpoints
set vpn l2tp remote-access outside-address 101.111.212.71
set vpn l2tp remote-access outside-nexthop 0.0.0.0

# L2TP client IP pool
set vpn l2tp remote-access client-ip-pool start 192.168.10.10
set vpn l2tp remote-access client-ip-pool stop 192.168.10.20

# IPsec authentication
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret <pre shared key>

# L2TP authentication
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username user01 password <user01's password>
set vpn l2tp remote-access authentication local-users username user02 password <user02's password>
```

## Windowsクライアント設定

Control Panel 
\> Network and Internet 
\> Network and Sharing Center 
\> Set Up a Connection or Network 
\> Connect to a workplace 
\> Next 
\> No, create a new connection
\> Next 
\> Use my Internet connection (VPN)

![l2tp-ipsec1.png](https://qiita-image-store.s3.amazonaws.com/0/65167/4ca51b37-5514-9c3f-9c8e-938e3a60111a.png)

\> Next

![l2tp-ipsec2.png](https://qiita-image-store.s3.amazonaws.com/0/65167/51dccedc-0dac-c6a6-6431-1d2f286bb4c9.png)

\> Create
\> Close

タスクバーのConnectionから、作成したConnectionを右クリック
\> Properties
\> Securityタブ
\> Type of VPNから"Layer 2 Tunneling Protocol with IPsec (L2TP/IPsec)"を選択

![l2tp-ipsec3.png](https://qiita-image-store.s3.amazonaws.com/0/65167/348a586d-757c-8427-d828-d1720b0c5448.png)

\> Advanced settings
![l2tp-ipsec4.png](https://qiita-image-store.s3.amazonaws.com/0/65167/a7804fb5-4f8f-08b2-f67b-b58efe86744e.png)
 

## 接続時のログ

接続時のログは/var/log/messages に出力されます。

```text:/var/log/messages
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: received Vendor ID payload [RFC 3947]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [4df37928e9fc4fd1b3262170d515c662]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [8f8d83826d246b6fc7a8a6a428c11de8]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [439b59f8ba676c4c7737ae22eab8f582]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [4d1e0e136deafa34c4f3ea9f02ec7285]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [80d0bb3def54565ee84645d4c85ce3ee]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [9909b64eed937c6573de52ace952fa6b]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [draft-ietf-ipsec-nat-t-ike-03]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [draft-ietf-ipsec-nat-t-ike-02]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [draft-ietf-ipsec-nat-t-ike-02_n]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: ignoring Vendor ID payload [FRAGMENTATION 80000000]
Dec 30 08:05:18 vga01-paris pluto[7891]: packet from 101.111.212.71:500: received Vendor ID payload [Dead Peer Detection]
Dec 30 08:05:18 vga01-paris pluto[7891]: "remote-access-mac-zzz"[17] 101.111.212.71 #17: responding to Main Mode from unknown peer 101.111.212.71
Dec 30 08:05:18 vga01-paris pluto[7891]: "remote-access-mac-zzz"[17] 101.111.212.71 #17: NAT-Traversal: Result using RFC 3947: peer is NATed
Dec 30 08:05:18 vga01-paris pluto[7891]: "remote-access-mac-zzz"[17] 101.111.212.71 #17: ignoring informational payload, type IPSEC_INITIAL_CONTACT
Dec 30 08:05:18 vga01-paris pluto[7891]: "remote-access-mac-zzz"[17] 101.111.212.71 #17: Peer ID is ID_IPV4_ADDR: '192.168.1.3'
Dec 30 08:05:18 vga01-paris pluto[7891]: "remote-access-mac-zzz"[18] 101.111.212.71 #17: deleting connection "remote-access-mac-zzz" instance with peer 101.111.212.71 {isakmp=#0/ipsec=#0}
Dec 30 08:05:18 vga01-paris pluto[7891]: "remote-access-mac-zzz"[18] 101.111.212.71:4500 #17: sent MR3, ISAKMP SA established
Dec 30 08:05:19 vga01-paris pluto[7891]: "remote-access-mac-zzz"[18] 101.111.212.71:4500 #18: NAT-Traversal: received 2 NAT-OA. using first, ignoring others
Dec 30 08:05:19 vga01-paris pluto[7891]: "remote-access-mac-zzz"[18] 101.111.212.71:4500 #18: responding to Quick Mode
Dec 30 08:05:19 vga01-paris pluto[7891]: "remote-access-mac-zzz"[18] 101.111.212.71:4500 #18: Dead Peer Detection (RFC 3706) enabled
Dec 30 08:05:19 vga01-paris pluto[7891]: "remote-access-mac-zzz"[18] 101.111.212.71:4500 #18: IPsec SA established {ESP=>0x0d1888cf <0xc61fbd57 NATOA=192.168.1.3}
Dec 30 08:05:19 vga01-paris xl2tpd[9245]: Connection established to 101.111.212.71, 56685.  Local: 3380, Remote: 11 (ref=0/0).  LNS session is 'default'
Dec 30 08:05:19 vga01-paris xl2tpd[9245]: Call established with 101.111.212.71, Local: 5345, Remote: 53463, Serial: 1
Dec 30 08:05:19 vga01-paris pppd[9339]: pppd 2.4.5 started by root, uid 0
Dec 30 08:05:19 vga01-paris Keepalived_vrrp: Netlink: filter function error
Dec 30 08:05:19 vga01-paris pppd[9339]: Connect: ppp0 <-->
Dec 30 08:05:21 vga01-paris pppd[9339]: Unsupported protocol 'IPv6 Control Protocol' (0x8057) received
Dec 30 08:05:21 vga01-paris pppd[9339]: Unsupported protocol 'Apple Client Server Protocol Control' (0x8235) received
Dec 30 08:05:21 vga01-paris Keepalived_vrrp: Netlink: filter function error
Dec 30 08:05:21 vga01-paris pppd[9339]: Cannot determine ethernet address for proxy ARP
Dec 30 08:05:21 vga01-paris pppd[9339]: local  IP address 10.255.0.0
Dec 30 08:05:21 vga01-paris pppd[9339]: remote IP address 192.168.10.10
```