VyOSでIPSec VPNの設定

#やりたいこと
リモート拠点（たとえば自宅やクラウド）にあるサーバーにVPNで接続したいとき、ありますよね？
そういうときには、オープンソースのVyOSを使って簡単にVPNサーバーの設定をしてしまいましょう
こんなイメージです
<img width="438" alt="スクリーンショット 2015-12-29 19.57.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/101361/b1e3e499-5e5b-dea0-5d70-142b173e3dc5.png">
#IPSec VPNの設定
今回は**desktop-to-site型**のリモート接続を設定します
認証方式にはいくつかありますが、今回は**L2TP/IPsec**のVPNを設定します
では、どんな設定があるかみていきます

#vpn ipsecの設定内容

###●IPSecを張りたいインターフェースを指定
後でグローバルIPを指定しますので、グローバルIPを持っているインターフェースですね

```
set vpn ipsec ipsec-interfaces interface eth1
```
###●NATに関わる設定
NATトラバーサルはONにすることが必須になっています

```
set vpn ipsec nat-traversal enable
```
ここにはclient ip poolとなる（クライアントに割り当てる）サブネットを記載しておきます

```
set vpn ipsec nat-networks allowed-network 192.168.1.0/24
```
#vpn l2tpの設定内容
###●アドレス設定
先ほどのサブネットの中からクライアントに割り当てるアドレス範囲を指定できます

```
set vpn l2tp remote-access client-ip-pool start 192.168.1.101
set vpn l2tp remote-access client-ip-pool stop 192.168.1.110
```
outside-addressにはVPNサーバーのグローバルIPを指定します
（outside-nexthopにはゲートウェイを指定していますが、必須ではありません）

```
set vpn l2tp remote-access outside-address X.X.X.X
set vpn l2tp remote-access outside-nexthop X.X.X.Y
```
###●認証設定
事前共有鍵を設定します（ここではTESTSECRET）

```
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret TESTSECRET
```

ユーザー名とパスワードを設定します（ここではTESTUSER:TESTPASS）

```
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username TESTUSER password TESTPASS
```
実際に接続するには、ここで設定した事前共有鍵、ユーザー名、パスワードをクライアント側で接続設定をする必要があります
クライアントの設定は下記リンクの「Configure Remote Access VPN Service on a Vyatta Appliance」を参考にしてください

#その他、設定でできること
ログの設定

```
set vpn ipsec logging log-modes all
```
クライアント側IPアドレスの固定

```
set vpn l2tp remote-access authentication local-users username TESTUSER static-ip 192.168.1.105
```
ユーザーの無効化

```
set vpn l2tp remote-access authentication local-users username TESTUSER disable
```
#まとめ
VyOSでのIPSec VPNサーバーとしての設定は簡単でしたよね？
さらにどんな設定内容かがわかっていれば、いざという時にすぐ対応できますね
クライアントへのIPアドレスの割り当て、ユーザー接続可否の設定、ファイアウォールを上手く組み合わせれば、**ユーザーごとにアクセス先を制御する**こともできそうですね
また、ファイアウォールを設定している場合は、以下を必要に応じて開けてください

- Internet Key Exchange (IKE) - User Datagram Protocol (UDP) port 500
- Encapsulating Security Payload (ESP) - Internet Protocol (IP) 50
- IPsec NAT-T - UDP port 4500

#今回の設定内容

```
vyos@vyos# show vpn 
 ipsec {
     ipsec-interfaces {
         interface eth1
     }
     nat-networks {
         allowed-network 192.168.1.0/24 {
         }
     }
     nat-traversal enable
 }
 l2tp {
     remote-access {
         authentication {
             local-users {
                 username TESTUSER {
                     password TESTPASS
                 }
             }
             mode local
         }
         client-ip-pool {
             start 192.168.1.101
             stop 192.168.1.110
         }
         ipsec-settings {
             authentication {
                 mode pre-shared-secret
                 pre-shared-secret TESTSECRET
             }
         }
         outside-address X.X.X.X
         outside-nexthop X.X.X.Y
     }
 }
```

#参考リンク
Brocade 5600 vRouter Remote Access VPN Reference Guide
http://www.brocade.com/content/dam/common/documents/content-types/configuration-guide/brocade-5600-vrouter-ravpn-3.5r6-v01.pdf
Configure Remote Access VPN Service on a Vyatta Appliance
http://www.rackspace.com/knowledge_center/article/configure-remote-access-vpn-service-on-a-vyatta-appliance
NAT traversal - Wikipedia
https://ja.wikipedia.org/wiki/NAT_traversal