SoftLayerとvyosでネットワークの基礎を勉強１-(トンネルGRE編)

# 1. はじめに
　クラウドシステムの基盤構築を行う上で、ネットワークは重要な要素の一つです。学習する上で実機を使って行うほうが、理解が深まります。
 ただ、必要な機材を準備すると費用と時間がかかりますが、SoftLayreを使って、安く短時間に実機で構築学習を行います。
 （これがクラウドの良いところだです。）
 
 今回は、基本としてGREの設定してみます。

# 2. GREについて
　GRE(Generic Routing Encapsulation)の前に、VPNについてを説明します。
 VPN(Virtual Private Network)は文字通り、公衆ネットワーク(Internet)を介してプライベートネットワーク間を接続します。
 ネットワークは、あたかも自分専用の回線として接続されますので、公衆ネットワーク経由でもセキュリティを高めてくれます。
 　
  そのVPNの仕組みで重要な要素は、
      （１）トンネリング-----経路
      （２）暗号化------------データ　 です。
　
 GREはトンネリングプロトコルのひとつで、他には
 ・Layer2トンネリングのL2F, PPTP, L2TP
 ・Layer3トンネリングのGRE, IPsec　などがあります。
また、暗号化はIPsecのみですので、L2TP/IPsecのようにトンネリングと暗号化を組み合わせて利用します。

今回は、GREのトンネリングだけで暗号化は行いません。

      
# 3. 構成について
　SoftLayerのシンガポールと東京の２ロケーションをGRE(VyOS)で接続して、各ロケーションにデプロイしたWindows2012サーバ間でデータの送受信を行います。
 注意点として、VLANスパニングをオフにして、２ロケーションのプライベートネットワークが接続されていない状態で確認テストを行います。
　また、VyOSの導入は下記情報などを参考にしてください。
 QIITA「SoftLayer仮想サーバにVyOSをインストールしました」
 http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b
 ![03.png](http://www.seahorse-inc.com/QIITA/Network-GRE/03.png) 
![05.png](http://www.seahorse-inc.com/QIITA/Network-GRE/05.png) 
![06.png](http://www.seahorse-inc.com/QIITA/Network-GRE/06.png) 

# 4. 構築手順
![07.png](http://www.seahorse-inc.com/QIITA/Network-GRE/07.png) 
 
# ５. 構築
　VyOSの基本的な操作について
> VyOSには「一般モード」(プロンプト$)と「設定モード」(プロンプト#)があります。
モード変更は、
・「一般モード」から「設定モード」へ変更は”configure”コマンド
・「設定モード」から「一般モード」へ変更は"exit"コマンド　です。
 ![08.png](http://www.seahorse-inc.com/QIITA/Network-GRE/08.png) 
 「一般モード」では、設定状態や動作状態が確認できます。
 「設定モード」では、動作のための値が設定できます。
 「設定モード」でよく使うコマンドは、
 "set"-------値の入力
 "delete"---値の削除
 "discard"--入力した値の破棄(commit前なら有効)
 "commit"--入力した値の有効化
 "save"-----保存(saveしないで再起動すると、値が消えてしまいます。)
 "show"----構成情報の表示
 >
 
## ５-1. VLANスパニングをOFF
SoftLayerポータルでの操作です。
![09.png](http://www.seahorse-inc.com/QIITA/Network-GRE/09.png) 
「Network」⇒「VLANs」⇒「Span」タグ

![10.png](http://www.seahorse-inc.com/QIITA/Network-GRE/10.png) 
「Off」選択

以上で「VLANスパニングをOFF」完了です。
※テスト終わりましたら、ONに戻してください。

## ５-2. VyOS-TOK(VyOS)の設定
まず、Tokyo側から設定。
IPをまだ設定してないので、SoftLayerのKVM操作です。

VyOSの初期値は下記の通りです。

 ```Command:vyos初期値
interfaces {
	ethernet eth0 {
		hw-id 06:ce84:86:0a:e6
	}
	ethernet eth1 {
		hw-id 06:96:da:92:17:25
	}
	loopback lo {
	}
}
system {
	config-management {
		commit-revisions 20
	}
	console {
		device hvc0 {
			speed 9600
		}
		device ttyS0 {
			speed 9600
		}
	}
	login {
		user vyos {
			authentication {
				encrypted-password  
				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 helium
			url http://packages.vyos.net/vyos
		}
	}
	syslog {
		global {
			facility all {
				level notice
			}
			facility protocols {
				level debug
			}
		}
	}
}
``` 

 この初期値に値を設定していきます。
### IP(interface)の設定
 ここでは、eth0がプライベート、eth1がパブリックです。
 
 ```Command:IP(interfaces)の設定
# set interfaces ethernet eth0 address 10.132.52.247/26 ⏎
# set interfaces ethernet eth1 address 161.202.91.38/28 ⏎
# commit ⏎
# save ⏎
```

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

 ```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-TOK ⏎
# commit ⏎
# save ⏎
```
### タイムゾーン(system)の設定 
ここではタイムゾーンを「Asia/Tokyo」にしました。

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

### GREトンネル(interfaces)の設定
トンネルは「tun0」という名前にします。
Tokyo側のトンネルIPは、”10.20.20.2/24”です。

```Command:GREトンネル(interfaces)の設定-Tokyo側トンネルIP設定
# set interfaces tunnel tun0 address 10.20.20.2/24 ⏎
# commit ⏎
# save ⏎
```

トンネルの記述を、"GRE tunnel to VyOS-SNG”にします。

```Command:GREトンネル(interfaces)の設定-Tokyo側トンネル記述設定
# set interfaces tunnel tun0 description "GRE tunnel to VyOS-SNG” ⏎
# commit ⏎
# save ⏎
```

パケットに新しいヘッダを付け加え、カプセル化（Encapsulation）して通信するのにGREを使います。

```Command:GREトンネル(interfaces)の設定-カプセル化にGRE使用
# set interfaces tunnel tun0 encapsulation gre ⏎
# commit ⏎
# save ⏎
```

ローカルIP指定(Tokyo側パブリックIP)

```Command:GREトンネル(interfaces)の設定-ローカルIP指定(Tokyo側パブリックIP)
# set interfaces tunnel tun0 local-ip 161.202.91.38 ⏎
# commit ⏎
# save ⏎
```

リモートIP指定(Singapore側パブリックIP)

```Command:GREトンネル(interfaces)の設定-リモートIP指定(Singapore側パブリックIP)
# set interfaces tunnel tun0 remote-ip 161.202.24.119 ⏎
# commit ⏎
# save ⏎
```

### Singaporeに対してのスタティックルート(protocols)の設定
```Command:GREトンネル(interfaces)の設定-Singaporeに対してのスタティックルート(protocols)の設定
# set protocols static route 10.116.145.0/26  next-hop 10.20.20.2 ⏎
# commit ⏎
# save ⏎
```


以上で、「VyOS-TOK(VyOS)の設定」完了です。
"show"コマンドで設定値を確認します。

```Command:GREトンネルの設定(Tokyo)-showコマンドで確認
 interfaces {
     ethernet eth0 {
         address 10.132.52.247/26
         duplex auto
         hw-id 06:ce:84:86:0a:e6
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.91.38/28
         duplex auto
         hw-id 06:96:da:92:17:25
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
     tunnel tun0 {
         address 10.20.20.2/24
         description "GRE tunnel to VyOS-SNG"
         encapsulation gre
         local-ip 161.202.91.38
         remote-ip 161.202.24.119
      }
 }
 protocols {
     static {
         route 10.116.145.0/26 {
             next-hop 10.20.20.2 {
             }
         }
     }
 }
 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-TOK
     login {
         user vyos {
             authentication {
                 encrypted-password 
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server 0.pool.ntp.org {
         }
         server 1.pool.ntp.org {
         }
          server 2.pool.ntp.org {
         }
     }
     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
 }
```

## ５-３. VyOS-SNG(VyOS)の設定
  「５-2. VyOS-TOK(VyOS)の設定」と同じ操作で設定してください。

  ```Command:GREトンネルの設定(Singapore)-showコマンドで確認
 interfaces {
     ethernet eth0 {
         address 10.116.145.13/26
         duplex auto
         hw-id 06:bd:96:13:b1:e0
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.24.119/28
         duplex auto
         hw-id 06:f0:5f:d6:7b:c4
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
     tunnel tun0 {
         address 10.20.20.1/24
         description "GRE tunnel to VyOS-TOK"
         encapsulation gre
         local-ip 161.202.24.119
         remote-ip 161.202.91.38
      }
 }
 protocols {
     static {
         route 10.132.52.192/26 {
             next-hop 10.20.20.1 {
             }
         }
     }
 }
 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.24.113
     host-name VyOS-SNG
     login {
         user vyos {
             authentication {
                 encrypted-password 
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server 0.pool.ntp.org {
         }
         server 1.pool.ntp.org {
         }
          server 2.pool.ntp.org {
         }
     }
     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
 }
```

# 6. GREトンネル接続確認
## 6-1. VyOSトンネルが”up”状態であることを確認
VyOSの「一般モード」で行います。
show コマンドで確認します。

```Command:GREトンネルup確認
$ show interfaces tunnel ⏎
```
![11.png](http://www.seahorse-inc.com/QIITA/Network-GRE/11.png) 
 
```Command:GREトンネルup確認-詳細
$ show interfaces tunnel detail⏎
```
![12.png](http://www.seahorse-inc.com/QIITA/Network-GRE/12.png) 
 
Toykyo側で確認しましたが、Shigapore側でも確認してください。

## 6-2. PINGで確認
PINGはVyOSの「一般モード」で行います。

（１）Tokyo側のVyOS-TOKから、Singapore側のVyOS-SNGのプライベートアドレス(10.116.145.13)に対してPINGが通る事を確認する。

（２）Singaporeo側のVyOS-SNGから、Tokyo側のVyOS-TOKのプライベートアドレス(10.132.52.247)に対してPINGが通る事を確認する。


# 7. Windows2012R2サーバ、スタティックルートの設定
PowerShellでの操作です。

・W2012R2-TOK設定

```Command:W2012R2-TOKスタティックルート設定
>route add -p 10.116.145.0 mask 255.255.255.0 10.132.52.247 ⏎
```
・W2012R2-SNG設定

```Command:W2012R2-SNGスタティックルート設定
>route add -p 10.132.52.0 mask 255.255.255.0 10.116.145.13 ⏎
```

# 8 Windows2012Server間データ転送確認
「6. GREトンネル接続確認」を参考にして確認してください。

（１）Tokyo側のW2012R2-TOKから、Singapore側のW2012R2-SNGのプライベートアドレス(10.116.145.25)に対してPINGが通る事を確認する。

（２）Singaporeo側のW2012R2-SNGから、Tokyo側のW2012R2-TOKのプライベートアドレス(10.132.52.213)に対してPINGが通る事を確認する。

# 6. おわりに
　IPアドレスには表示上マスクをかけるのが安全ですが、わかりにくくなると思い、あえてマスクをかけませんでした。
（インスタンスを削除する予定です。）

SoftLayerを活用すると、ネットワークを勉強する上で、少ない費用で実機勉強でき知識が深まります。

今後、L2TPやIPsecも投稿する予定です。