SoftLayer仮想サーバーでVyOSの冗長化構成を勉強３-(OpenVPNリモートアクセス接続編)

# 1. はじめに
  VyOSの冗長化構成で、OpenVPNリモートアクセス接続を試しました。
 仮想サーバーにVyOSを導入した環境での構成です。
  
  下記情報も併せてご覧ください。
 <strong> ・VyOS導入</strong>
  「SoftLayer仮想サーバにVyOSをインストールしました」
  http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b
  
 <strong> ・OpenVPNリモートアクセス接続</strong>
  「SoftLayerとVyOSでネットワークの基礎を勉強３-(OpenVPNリモートアクセス編)」
 http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
  
 <strong> ・VRRP</strong>
  「SoftLayer仮想サーバーでVyOSの冗長化構成を勉強１-(VRRP基本構成編)」
  http://qiita.com/Mitsu-Murakita/items/15660fd4281959816a0f
  
 
# 2. 構成について
## 2-1. 全体構成

Softlayerの東京DCでVRRP構成のVyOS(OpenVPNサーバー)仮想インスタンスをデプロイし、オンプレミスのOpenVPNクライアントから接続します。
![01.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/01.png)
VRRP構成は、「vyos-TOK01」のPriorityが250、「vyos-TOK02」のPriorityが240ですので、初期状態では<strong><font color="blue">「vyos-TOK01」</font></strong>が<strong><font color="blue">MASTER</font></strong>、<strong><font color="blue">「vyos-TOK02」</font></strong>が<strong><font color="blue"> BACKUP</font></strong>です。
![03.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/03.png)

# 3. 設定の手順
![02.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/02.png)
クライアント側OpenVPNの設定は、 <font color="green"> 「SoftLayerとVyOSでネットワークの基礎を勉強３-(OpenVPNリモートアクセス編)」</font>
 http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
をご覧ください。

①まず、<font color="blue"> 「vyos-TOK01」</font>だけで設定し接続確認します。
②<font color="blue">「vyos-TOK01」</font>をpoweroffして停止した後、<font color="blue">「vyos-TOK02」</font>だけで設定し接続確認します。
③VRRPの設定を<font color="blue">「vyos-TOK01」</font>と<font color="blue">「vyos-TOK02」</font> に行います。①②それぞれで接続確認しているので、接続できるはずですが、接続できません。
④VRRPに関係するOpenVPNの設定をし、接続確認します。

<font color="red">※③で接続できないのは、OpenVPNはUPDで接続しに行きますが、VRRPの関係でTCPで接続するように変更する必要があります。
この変更は、VyOS側とクライアント側の両方に行います。</font>

# 4. 設定
## 4-1.① vyos-TOK01   OpenVPN設定、接続確認
### 4-1-1.VyOS設定
VyOSは導入しているとして、残っている設定は
(1) IP Address(PrivateとPublic)
(2) SSH
(3) Gatewat Address
(4) DNS
(5) Domain Name
(6) Host Name
(7) Static route
です。
<font color="green">※説明しやすいように行番号(xxx)をつけてますが、実際に登録する際は行番号を入力しないでください。</font>

```Command:vyos-TOK01のVyOS設定
(001)  interfaces {
(002)     ethernet eth0 {
(003)         address 10.132.52.225/26
(004)         duplex auto
(005)         hw-id 06:0a:86:51:ea:06
(006)         smp_affinity auto
(007)         speed auto
(008)     }
(009)     ethernet eth1 {
(010)         address 161.202.138.186/29
(011)         duplex auto
(012)         hw-id 06:88:83:ca:74:82
(013)         smp_affinity auto
(014)         speed auto
(015)     }
(016)     loopback lo {
(017)     }
(018) }
(019) protocols {
(020)     static {
(021)         route 10.0.0.0/8 {
(022)             next-hop 10.132.52.193 {
(023)             }
(024)         }
(025)     }
(026) }
(027) service {
(028)     ssh {
(029)         port 22
(030)     }
(031) }
(032) system {
(033)     config-management {
(034)         commit-revisions 20
(035)     }
(036)     console {
(037)         device hvc0 {
(038)             speed 9600
(039)         }
(040)         device ttyS0 {
(041)             speed 9600
(042)         }
(043)     }
(044)     domain-name softlayer.com
(045)     gateway-address 161.202.138.185
(046)     host-name vyos-TOK01
(047)     login {
(048)         user vyos {
(049)             authentication {
(050)                 encrypted-password xxxxxxxxxxxxxxxxxxxxx
(051)                 plaintext-password ""
(052)             }
(053)             level admin
(054)         }
(055)     }
(056)     name-server 10.0.80.11
(057)     name-server 10.0.80.12
(058)     ntp {
(059)         server time.service.networklayer.com {
(060)         }
(061)     }
(062)     package {
(063)         repository community {
(064)             components main
(065)             distribution helium
(066)             url http://packages.vyos.net/vyos
(067)         }
(068)     }
(069)     syslog {
(070)         global {
(071)             facility all {
(072)                 level notice
(073)             }
(074)             facility protocols {
(075)                 level debug
(076)             }
(077)          }
(078)     }
(079) }
```
<font color="blue">・(001)-(018) IPアドレス関連の設定
・(027)-(031) SSHの設定
・(045)-(045) Gatewat Addressの設定
・(056)-(057) DNSの設定
・(044)-(044) Domain Nameの設定
・(046)-(046) Host Nameの設定
・(020)-(025) Static routeの設定</font>

### 4-1-2.vyos-TOK01 OpenVPN設定
まず、rootアカウントの有効化を行います。

```Command:rootアカウントの有効化
# set system login user root authentication plaintext-password rootのパスワード ⏎
# commit ⏎
# save ⏎
``` 
サーバー側、クライアント側秘密鍵・公開鍵の作成します。
<font color="green">「SoftLayerとVyOSでネットワークの基礎を勉強３-(OpenVPNリモートアクセス編)」の「５.サーバー側、クライアント側秘密鍵・公開鍵の作成」をご覧ください。</font>
http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
ここでは、サーバー用の鍵関連は /rootに保存しました。
<font color="blue"> ・ca.crt
 ・dh1024.pem
 ・server.crt
 ・server.key</font>

VyOSの設定を行います。

```Command:OpenVPNの設定
# set interfaces openvpn vtun0 ⏎
# set interfaces openvpn vtun0 mode server ⏎
# set interfaces openvpn vtun0 openvpn-option "--push route 10.0. 0.0 255.0.0.0  --push dhcp-option DNS 10.0.80.11" ⏎
# set interfaces openvpn vtun0 server client client ip 10.132.42. 50 ⏎
# set interfaces openvpn vtun0 server subnet 10.132.42.48/28 ⏎
# set interfaces openvpn vtun0 tls ca-cert-file /root/ca.crt ⏎
# set interfaces openvpn vtun0 tls cert-file /root/server.cr ⏎
# set interfaces openvpn vtun0 tls dh-file /root/dh1024.pem ⏎
# set interfaces openvpn vtun0 tls key-file /root/server.key ⏎
# commit ⏎
# save ⏎
```

```Command:NATの設定
# set nat source rule 1 ⏎
# set nat source rule 1 outbound-interface eth0  ⏎
# set nat source rule 1 source address 10.132.42.48/28 ⏎
# set nat source rule 1 translation address masquerade ⏎
# commit ⏎
# save ⏎
```

設定は終わりましたので、接続します。
クライアントPCの接続設定の関しては、
<font color="green">「SoftLayerとVyOSでネットワークの基礎を勉強３-(OpenVPNリモートアクセス編)」の「7.クライアントPCの設定」「8.接続確認」をご覧ください。</font>
http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48

![04.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/04.png)

## 4-2.② vyos-TOK02  OpenVPN設定、接続確認
<font color="green">「 4-1.① vyos-TOK02  OpenVPN設定、接続確認」を参考に設定と接続を行ってください。</font>
サーバー用鍵は<font color="blue">「vyos-TOK01」</font>の<font color="blue">/rootディレクトリー</font>から<font color="blue">「vyos-TOK02」</font>の<font color="blue">/rootディレクトリー</font>へコピーしてください。
<font color="blue"> ・ca.crt
 ・dh1024.pem
 ・server.crt
 ・server.key</font>

```Command:vyos-TOK02のVyOS設定
 interfaces {
     ethernet eth0 {
         address 10.132.52.224/26
         duplex auto
         hw-id 06:c6:d3:50:ed:82
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.138.188/29
         duplex auto
         hw-id 06:f1:6b:7d:eb:6c
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
 }
 protocols {
     static {
         route 10.0.0.0/8 {
             next-hop 10.132.52.193 {
             }
         }
     }
 }
 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.188.185
     host-name vyos-TOK02
     login {
         user vyos {
             authentication {
                 encrypted-password $1$hNEJiYUZ$YO1n8CsFpLTROKeLIChN7/
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server time.service.networklayer.com {
         }
     }
     package {
         repository community {
             components main
             distribution helium
             url http://packages.vyos.net/vyos
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
          }
     }
     time-zone Asia/Tokyo
 }
```

```Command:rootアカウントの有効化
# set system login user root authentication plaintext-password rootのパスワード ⏎
# commit ⏎
# save ⏎
``` 

```Command:OpenVPNの設定
# set interfaces openvpn vtun0 ⏎
# set interfaces openvpn vtun0 mode server ⏎
# set interfaces openvpn vtun0 openvpn-option "--push route 10.0. 0.0 255.0.0.0  --push dhcp-option DNS 10.0.80.11" ⏎
# set interfaces openvpn vtun0 server client client ip 10.132.42. 50 ⏎
# set interfaces openvpn vtun0 server subnet 10.132.42.48/28 ⏎
# set interfaces openvpn vtun0 tls ca-cert-file /root/ca.crt ⏎
# set interfaces openvpn vtun0 tls cert-file /root/server.cr ⏎
# set interfaces openvpn vtun0 tls dh-file /root/dh1024.pem ⏎
# set interfaces openvpn vtun0 tls key-file /root/server.key ⏎
# commit ⏎
# save ⏎
```

```Command:NATの設定
# set nat source rule 1 ⏎
# set nat source rule 1 outbound-interface eth0 ⏎
# set nat source rule 1 source address 10.132.42.48/28 ⏎
# set nat source rule 1 translation address masquerade ⏎
# commit ⏎
# save ⏎
```

接続確認します。
![04.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/04.png)

## 4-3.③ VRRPの設定
```Command:vyos-TOK01-VRRPの設定
# set interfaces ethernet eth0 vrrp ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 advertise-interrval 1 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 preempt true ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 priority 250 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 sync-group synccgroup01 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 virtual-addresss  10.132.52.225 ⏎
# commit ⏎
# save ⏎
# set interfaces ethernet eth1 vrrp ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 advertise-interrval 1 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 priority 250 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 sync-group synccgroup01 ⏎  
# set interfaces ethernet eth1 vrrp vrrp-group 200 virtual-addresss 161.202.138.186 ⏎
# commit ⏎
# save ⏎
```

```Command:vyos-TOK02-VRRPの設定
# set interfaces ethernet eth0 vrrp ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 advertise-interrval 1 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 preempt true ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 priority 240 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 sync-group synccgroup01 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 virtual-addresss 10.132.52.225 ⏎
# commit ⏎
# save ⏎
# set interfaces ethernet eth1 vrrp ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 advertise-interrval 1 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 priority 240 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 sync-group synccgroup01 ⏎  
# set interfaces ethernet eth1 vrrp vrrp-group 200 virtual-addresss 161.202.138.186 ⏎
# commit ⏎
# save ⏎
```

## 4-4.④ VRRPに関係する、OpenVPNの設定接続確認
「4-1.① vyos-TOK01  OpenVPN設定、接続確認」「4-2.② vyos-TOK02  OpenVPN設定、接続確認」でそれぞれで接続できていましたが、VRRPを設定後に「vyos-TOK02」をMASTERにして接続しようとするとエラーで<font color="red">接続できません</font>。

![05.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/05.png)

結論から言いますと、標準ではOpenVPNサーバーはUDPで待ちうけていますが、VRRPではUDPではなくTCPでないと通信できないためです。
サーバー側とクライアント側のOpenVPN設定をTCPに変更すると接続できます。
＜サーバー側＞

```Command:vyos-TOK01のVRRP用追加設定
# set interfaces openvpn vtun0  protocol tcp-passive ⏎
```

```Command:vyos-TOK02のVRRP用追加設定
# set interfaces openvpn vtun0  protocol tcp-passive ⏎
```
＜クライアント側＞
OpenVPNクライアント構成ファイルに「proto tcp」を追加します。
![06.png](http://www.seahorse-inc.com/QIITA/VyOS-HA-3/06.png)

# 5. 設定したVyOS構成
```Command:vyos-TOK01
 interfaces {
     ethernet eth0 {
         address 10.132.52.225/26
         duplex auto
         hw-id 06:0a:86:51:ea:06
         smp_affinity auto
         speed auto
         vrrp {
             vrrp-group 100 {
                 advertise-interval 1
                 preempt true
                 priority 250
                 sync-group syncgroup01
                 virtual-address 10.132.52.225
             }
         }
     }
     ethernet eth1 {
         address 161.202.138.186/29
         duplex auto
         hw-id 06:88:83:ca:74:82
         smp_affinity auto
         speed auto
          vrrp {
             vrrp-group 200 {
                 advertise-interval 1
                 preempt true
                 priority 250
                 sync-group syncgroup01
                 virtual-address 161.202.138.186
             }
         }
     }
     loopback lo {
     }
     openvpn vtun0 {
         mode server
         openvpn-option "--push route 10.0.0.0 255.0.0.0  --push dhcp-option DNS  10.0.80.11"
         protocol tcp-passive
         server {
             client client {
                 ip 10.132.42.50
             }
             subnet 10.132.42.48/28
         }
          tls {
             ca-cert-file /root/ca.crt
             cert-file /root/server.crt
             dh-file /root/dh1024.pem
             key-file /root/server.key
         }
     }
 }
 nat {
     source {
         rule 1 {
             outbound-interface eth0
             source {
                 address 10.132.42.48/28
             }
             translation {
                 address masquerade
             }
         }
     }
 }
 protocols {
     static {
          route 10.0.0.0/8 {
             next-hop 10.132.52.193 {
             }
         }
     }
 }
 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.138.185
     host-name vyos-TOK01
     login {
         user root {
             authentication {
                 encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                 plaintext-password ""
             }
         }
         user vyos {
             authentication {
                 encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server time.service.networklayer.com {
          }
     }
     package {
         repository community {
             components main
             distribution helium
             url http://packages.vyos.net/vyos
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
         }
     }
 } 
```

```Command:vyos-TOK02
 interfaces {
     ethernet eth0 {
         address 10.132.52.224/26
         duplex auto
         hw-id 06:c6:d3:50:ed:82
         smp_affinity auto
         speed auto
         vrrp {
             vrrp-group 100 {
                 priority 240
                 sync-group syncgroup01
                 virtual-address 10.132.52.225
             }
         }
     }
     ethernet eth1 {
         address 161.202.138.188/29
         duplex auto
         hw-id 06:f1:6b:7d:eb:6c
         smp_affinity auto
         speed auto
         vrrp {
             vrrp-group 200 {
                  priority 240
                 sync-group syncgroup01
                 virtual-address 161.202.138.185
             }
         }
     }
     loopback lo {
     }
     openvpn vtun0 {
         mode server
         openvpn-option "--push route 10.0.0.0 255.0.0.0  --push dhcp-option DNS  10.0.80.11"
         protocol tcp-passive
         server {
             client client {
                 ip 10.132.42.50
             }
             subnet 10.132.42.48/28
         }
         tls {
             ca-cert-file /root/ca.crt
             cert-file /root/server.crt
             dh-file /root/dh1024.pem
              key-file /root/server.key
         }
     }
 }
 nat {
     source {
         rule 1 {
             outbound-interface eth0
             source {
                 address 10.132.42.48/28
             }
             translation {
                 address masquerade
             }
         }
     }
 }
 protocols {
     static {
         route 10.0.0.0/8 {
             next-hop 10.132.52.193 {
             }
         }
      }
 }
 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.138.185
     host-name vyos-TOK02
     login {
          user root {
             authentication {
                 encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                 plaintext-password ""
             }
         }
         user vyos {
             authentication {
                 encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server time.service.networklayer.com {
         }
     }
     package {
         repository community {
              components main
             distribution helium
             url http://packages.vyos.net/vyos
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
         }
     }
     time-zone Asia/Tokyo
 }
```


# 6. おわりに
OpenVPNをVRRPで冗長化する際は、初期のUDPでなくTCPの設定を行ってください。