SoftLayerとVyOSでネットワークの基礎を勉強２-(L2TP/IPsecリモートアクセス編)

# 1. はじめに
　SoftLayer上のVyOSにL2TP/IPsecリモートアクセスの設定をして、Windows7 / 10クライアントから接続します。
![01.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/01.png) 
> <font color="gray"><今回使用したVyOSは1.1.6(Heliun)です。VyOSのL2TPは「最初に接続したユーザが接続状態の時、別のユーザが接続できない」といった問題があります。（一人しか接続できない。）
 過去のVyattaでも同じ問題があり、まだ解決していません。
 複数ユーザでL2TP/IPsecリモートアクセスを使う場合は、OpenVPNやWindows2008/2012を検討したほうが良いと思います。
ちなみに、最初のユーザ(Aさん)が接続している状態で別のユーザ(Bさん)が接続しようとすると、下記メッセージが表示されBさんは接続できませんでした。</font>
![02.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/02.png) 
>


# 2. L2TPについて
　L2TPはレイヤー２で動作するトンネリングプロトコルで、暗号化の機能はありませんので、レイヤー3のIPsec暗号化と合わせて使用します（L2TP/IPsec)。

L2のトンネリングプロトコルは他に、
 <font color="blue">・PPTP(Microsoft, 3Com, Lucentが開発)
 ・L2F   (Ciscoが開発) </font>
 があり、L2TPはPPTPとL2Fを統合し、IETFで標準化( RFC2661 )されています。
 
      
# 3. 構成について
　SoftLayerTokyoロケーションにL2TP/IPsecサーバを設定し、インターネット経由でWindows7 / 10クライアントを接続します。
![03.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/03.png) 

![041.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/041.png) 
![042.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/042.png) 
  
  クライアントIPプール用にSoftLayerのポータルより、Private Portable IPをオーダーしました。
![04.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/04.png) 

  IPプール： 10.132.42.52～10.132.42.62
<font color="green">※SoftLayerがインスタンスを作成する際に使用する「Private Primary」IPアドレスを使用すると、新たにインスタンスをオーダーした際にアドレスバッティングする事がありますので、PortableIPを使用してください。
</font>
 
# 4. VyOSのL2TPリモートアクセス設定(ssh接続用)
 VyOSの導入は下記情報などを参考にしてください。
 QIITA「SoftLayer仮想サーバにVyOSをインストールしました」
http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b
 
VyOSの設定はSoftLayerのKVMで行います。
操作につぃては、下記情報を参考にしてください。
QIITA「SoftLayerとvyosでネットワークの基礎を勉強１-(トンネルGRE編)」
http://qiita.com/Mitsu-Murakita/items/73d497b391664273174e

## 4-1. VyOS初期値
```Command:vyos初期値
interfaces{
	ethernet eth0{
		hw-id 06:54:db:17:0e:60
	}
	ethernet eth1{
		hw-id 06:6d:4a:3d:82:8e
	}
system{
	config-managemant{
		commit-revision 20
	}
	console{
		device ttys0{
			speed 9600
		}
	}
	login{
		user vyos{
			authentication{
				encrypted-password S1S5FsQse2v$VQLh5eeEp4ZzGmCG/PRBA1
				plaintext-password ""
			}
			level admin
		}
	}
	ntp{
		server 0.pool.ntp.org{
		}
		server 1.pool.ntp.org{
		}
		server 2.pool.ntp.org{
		}
	}
	package{
		repository community{
			components main
			distribution heliunm
			url http://packages.vyos.net/vyos
		}
	}
	syslog{
		global{
			facility protocols{
				level debug
			}
		}
	}
}
``` 

## 4-2. SSHで接続できるように設定
KVMでは操作しづらいので、SSH接続できるように設定を行います。
KVMでの操作です。

### IP(interface)の設定
 ここでは、<font color="blue">eth0がプライベート</font>、<font color="blue">eth1がパブリック</font>です。
 
 ```Command:IP(interfaces)の設定
# set interfaces ethernet eth0 address 10.132.52.225/26 ⏎
# set interfaces ethernet eth1 address 161.202.91.39/28 ⏎
# commit ⏎
# save ⏎
```

下記３行は再起動後、自動的に追加されますが、ここでは明示的に設定します。
<font color="green">　　・duplex auto
　　・smp_affinity auto
　　・speed auto</font>

```Command:IP(interfaces)の設定続き
# set interfaces ethernet eth0 duplex auto ⏎
# set interfaces ethernet eth1 duplex auto ⏎
# set interfaces ethernet eth0 smp_affinity auto ⏎
# set interfaces ethernet eth1 smp_affinity auto ⏎
# set interfaces ethernet eth0 speed auto ⏎
# set interfaces ethernet eth1 speed auto ⏎
# commit ⏎
# save ⏎
```

### ssh(service)の設定 
 クライアントPCからssh接続できるようにします。

```Command:ssh(service)の設定
# set service ssh port 22 ⏎
# commit ⏎
# save ⏎
```

### Gatewayアドレス(system)の設定 
 パブリックのゲートウェイアドレスを設定。

```Command:Gatewayアドレス(system)の設定
# set system gateway-address 161.202.91.33 ⏎
# commit ⏎
# save ⏎
```

### DNS(system)の設定 
SoftLayerのDNS、
・10.0.80.11
・10.0.80.12 を設定します。

```Command:DNS(system)の設定
# set system name-server 10.0.80.11 ⏎
# set system name-server 10.0.80.12 ⏎
# commit ⏎
# save ⏎
```

### ドメイン名(system)の設定 
ここではドメイン名を「softlayer.com」にしました。

```Command:ドメイン名(system)の設定
# set system domain-name softlayer.com ⏎
# commit ⏎
# save ⏎
```

### ホスト名(system)の設定 
ここではホスト名を「VyOS-TOK」にしました。

```Command:ホスト名(system)の設定
# set system host-name VyOS-L2TP ⏎
# commit ⏎
# save ⏎
```
### タイムゾーン(system)の設定 
ここではタイムゾーンを「Asia/Tokyo」にしました。

```Command:ホスト名(system)の設定
# set system time-zone Asia/Tokyo ⏎
# commit ⏎
# save ⏎
```

### NTP(system)の設定 
初期値で
　　　　ntp{
　　　　　　server 0.pool.ntp.org{
　　　　　　}
　　　　　　server 1.pool.ntp.org{
　　　　　　}
　　　　　　server 2.pool.ntp.org{
　　　　　　}
　　　　}
 が設定されていますので、これを削除して
 ntp.nict.jpを設定しました。

 ```Command:初期値NTPの削除
# delete system ntp ⏎
# commit ⏎
# save ⏎
```

```Command:NTP(system)の設定
# set system ntp server ntp.nict.jp⏎
# commit ⏎
# save ⏎
```

これでクライアントPCからssh接続できるようになりました。

これ以降はTeraTermで接続して、L2TP/IPsec設定を続けます。
![05.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/05.png) 

# 5. VyOSのL2TP/IPsecリモートアクセス設定
 TeraTermでの操作です。
 ※説明しやすいように行番号[xx]をつけてますが、実際に登録する際は行番号を入力しないでください。

 ```Command:L2TP/IPsecリモートアクセス設定値について
[01] set vpn ipsec ipsec-interfaces interface eth1
[02] set vpn ipsec nat-traversal enable
[03] set vpn ipsec nat-networks allowed-network 0.0.0.0/0
[04] set vpn l2tp remote-access outside-address 161.202.91.39
[05] set vpn l2tp remote-access client-ip-pool start 10.132.42.52
[06] set vpn l2tp remote-access client-ip-pool stop 10.132.42.62
[07] set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
[08] set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret password
[09] set vpn l2tp remote-access authentication mode local
[10] set vpn l2tp remote-access authentication local-users username user01 password user01
[11] set vpn l2tp remote-access authentication local-users username user02 password user02
[12] set vpn l2tp remote-access authentication local-users username user03 password user03
```
【説明】
[01] ipsecのインターフェースをパブリックIPのeth1に設定。
[02] NATトラバーサルを設定
[03] ここでは、リモートからのアクセスをすべて(0.0.0.0)にしました。
[04] パブリック(eth1)のアドレス。
[05]-[06] クライアントIP用のIPプールの範囲を設定。
　　Privete PortableIPのIPアドレスを使用します。
  　ここでは10.132.42.52～10.132.42.62を設定しました。
[07] 認証に事前共有鍵方式を使用します。
[08] ここでは、事前共有鍵を"password"としました。
[09] クライアントPCの認証をローカル登録で使用します。
[10]-[12] ユーザID、パスワードの設定（ローカル登録）。
　　ここでは、3ユーザーを作成しました。
　　　　・ユーザーID：user01 / パスワード：user01
　　　　・ユーザーID：user02 / パスワード：user02
　　　　・ユーザーID：user03 / パスワード：user03
    
```Command:vyosL2TPリモートアクセス設定
 interfaces {
     ethernet eth0 {
         address 10.132.52.225/26
         duplex auto
         hw-id 06:54:db:17:0e:60
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.91.39/28
         duplex auto
         hw-id 06:6d:4a:3d:82:8e
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
 }
 service {
     ssh {
         port 22
     }
 }
 system {
     config-management {
         commit-revisions 20
     }
     console {
         device hvc0 {
             speed 9600
         }
         device ttyS0 {
             speed 9600
         }
     }
     domain-name softlayer.com
     gateway-address 161.202.91.33
     host-name VyOS-L2TP
     login {
         user vyos {
             authentication {
                 encrypted-password $1$e3p8PPXh$kGXa8tOvqpnGkbJApLO4A/
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server ntp.nict.jp {
         }
     }
     package {
         auto-sync 1
         repository community {
             components main
             distribution helium
             password ""
             url http://packages.vyos.net/vyos
             username ""
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
         }
     }
     time-zone Asia/Tokyo
 }
 vpn {
     ipsec {
         ipsec-interfaces {
             interface eth1
         }
         nat-networks {
             allowed-network 0.0.0.0/0 {
             }
         }
         nat-traversal enable
     }
     l2tp {
         remote-access {
             authentication {
                 local-users {
                     username user01 {
                         password user01
                     }
                     username user02 {
                         password user02
                     }
                     username user03 {
                         password user03
                     }
                 }
                 mode local
             }
             client-ip-pool {
                 start 10.132.42.52
                 stop 10.132.42.62
             }
             ipsec-settings {
                 authentication {
                     mode pre-shared-secret
                     pre-shared-secret password
                 }
             }
             outside-address 161.202.91.39
         }
     }
 }
``` 
   
# 6. クライアントPC側の設定
![01.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/01.png) 
 クライアントPC側の設定において、Windows7と10ではディフォルト値が違いますので、注意して下さい。
 Windows7では接続できるが、Windows10では接続できないといった事が発生します。
> Windows10での接続エラー
![06.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/06.png) 



<strong><font color="blue">＜Windows7/10デフォルト値の違い＞ </font></strong>
接続のプロパティのセキュリティタグ
<strong><font color="green">(Windows7)</font></strong>
・データの暗号化：「暗号化が必要(サーバーが拒否する場合は切断します)」
・認証：「次のプロトコルを許可する」チェック済
<strong><font color="green">(Windows10)</font> </strong>
・データの暗号化：「暗号化は省略可能(暗号化なしでも接続します)」
・認証：チェックなし
![07.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/07.png) 

接続エラーを起こさないためには、Windows10の設定を変更します。
<font color="blue">・データの暗号化：「暗号化が必要(サーバーが拒否する場合は切断します)」
・認証：「次のプロトコルを許可する」チェック済</font>

## 6-1. クライアントPC側の設定(Windows7)
<ネットワーク共有センター>
![08.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/08.png) 
「新しい接続またはネットワークのセットアップ」

![09.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/09.png) 

「職場に接続します」

![10.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/10.png) 
「いいえ、新しい接続を作成します(C)」

![11.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/11.png) 
「インターネット接続(VPN)を使用します(I)」


![12.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/12.png) 
"インターネットアドレス"：VyOS構成のパブリックインターフェース(eth1)
"接続先の名称"：
「今な接続しない。」チェックを外す
⇒「次へ」

![13.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/13.png)
"ユーザ名"、”パスワード”：VyOS構成で指定した設定値を入れる
⇒「接続」

![14.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/14.png)
「閉じる」

<ネットワーク接続>
![15.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/15.png)
「プロパティ」

![16.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/16.png)
”VPNの種類”：「IPsecを利用したレイヤー2トンネリングプロトコル(L2TP/IPsec」選択
⇒「詳細」

![17.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/17.png)
「認証に事前共有キーを使う(P)」選択
"キー"：VyOS構成で指定した設定値を入れる

<TCP/IP詳細設定>
![18.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/18.png)
「リモートネットワークでデフォルトゲートウェイを使う(U)」チェックをはずす

## 6-2. クライアントPC側の設定(Windows10)
<ネットワーク共有センター>
![19.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/19.png)
「新しい接続またはネットワークのセットアップ」

![20.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/20.png)
「職場に接続します」⇒「次へ」

![21.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/21.png)
「いいえ、新しい接続を作成します(C)」⇒「次へ」

![22.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/22.png)
「インターネット接続(VPN)を使用します」

![23.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/23.png)
"インターネットアドレス"：VyOS構成のパブリックインターフェース(eth1)
"接続先の名称"：
⇒「作成」

<ネットワーク接続>
![24.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/24.png)
選択し、プロパティ表示

<セキュリティタグ>
![25.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/25.png)
”VPNの種類”：「IPsecを利用したレイヤー2トンネリングプロトコル(L2TP/IPsec」選択
⇒「詳細設定」


![26.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/26.png)
「認証に事前共有キーを使う(P)」選択
"キー"：VyOS構成で指定した設定値を入れる
⇒「OK」

![27.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/27.png)
”データの暗号化”：「暗号化が必要(サーバーが拒否する場合は切断します)」選択
「次のプロトコルを許可する」選択
⇒「OK」

# 7. VyOSのL2TP/IPsecリモートアクセス接続確認
Teratermで接続したVyOSで確認します。

Windows10クライアントPCからL2TP接続
![29.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/29.png)
状況が接続済みになり、接続完了。
![30.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/30.png)
 
 VyOSコマンドの "show vpn remote-access"で確認します。
![31.png](http://www.seahorse-inc.com/QIITA/Network2-L2TPRemote/31.png)

# 8. おわりに
今回の設定のだけでは、セキュリティ上かなり脆弱な状態ですので、フィルター(ファイアーウォール)の設定で補強して下さい。