VRRPによるVyattaの冗長構成 on SoftLayer

本エントリは[2枚目 SoftLayer Advent Calendar 2014](http://qiita.com/advent-calendar/2014/softlayer2)の23日目向けに書きました！

昨日はついに東京DCがオープンしました！
同時に「[第5回東京SoftLayer勉強会](http://softlayer.connpass.com/event/10286/)」も開催され、SoftLayerの波が日本に上陸しています！
世界的ですもんね 乗るしかない、このビッグウェ（以下略）

勉強会でのLTは非常にレベルが高く、その翌日にこんなエントリで何か申し訳ない気分になっています。

#やりたいこと#
私「VyattaをVirtualServerにしてFirewallとして使えますよ。」
お客様「それ冗長化できない？」
私「え!？」
お客様「そのVyattaとかいうのを冗長化できない？」
私「やってみます……」

以前お客様と上記のようなやりとりがありましたので、Vyattaの冗長化をSoftLayerで検証してみます。

冗長化して内部のサーバがインターネット側にNAT（PAT）されて通信できる、というところをゴールにします。

#構成#
![kousei.png](https://qiita-image-store.s3.amazonaws.com/0/61030/9a6a1380-f264-51ae-aeca-bccfc4c55bd1.png)
Vyatta入りのVirtualServerを2台作ってVRRPを組みます、通信確認用のサーバはPrivate Networkのみに足を出します。

##Vyatta##

タイプ：VirtualServer,Vyatta
OS：Vyatta Community Edition for VSI6.6.0
スペック：1CPU/1GBmemory

×2台

##任意のサーバ（通信確認用）##

タイプ：VirtualServer
OS：CentOS6.0-64 LAMP for VSI
スペック：1CPU/1GBmemory

×1台

##VRRP用のIPアドレスの用意について##
PrivateとPublicそれぞれにVRRP用のIPアドレスが必要なので、IPアドレスの追加購入が必要……のはずですが、下記のようなことをやったら追加購入せずに出来ちゃいましたが……（いいのだろうか…）。
検証じゃなくて、使用する環境の場合はちゃんとオーダーした方がいいと思います！

PublicIP　… 通信確認用のサーバで不使用のPublicIPを、VRRP用の仮想アドレスに使用
PravateIP　… PrivateNetworkのIPセグメントの中の使用されていないであろうIPを勝手に使用


#VRRP設定#
VRRPの設定は非常に簡単ですが、インターフェースモードに入って設定する必要があります。
今回の場合public側、private側の両方のインターフェースでそれぞれ設定を行います。
※実アドレスの設定はインターフェース側の設定であらかじめ行っておきます。

```
edit interfaces ethernet [インターフェース番号/例 eth0]
set vrrp vrrp-group [VRRPグループ番号/例 100 /※両機で合わせる必要があります]
set vrrp vrrp-group [VRRPグループ番号] virtual-address [仮想アドレス]
set vrrp vrrp-group 100 priority 150　※priority値が高い方がPrimaryになります
```

editとsetの違いに注意！
あとcommitとsaveを忘れないで！

#設定後コンフィグ#
##1号機の設定##
VRRP設定
前述の通りの設定を、publicとprivateの両インターフェースに行った状態。

```
# show vrrp interfaces 
 ethernet eth0 {
     address [private側の実IPアドレス]
     duplex auto
     hw-id [MACアドレス]
     speed auto
     vrrp {
         vrrp-group 200 {
             priority 150
             virtual-address [private側仮想アドレス]
         }
     }
 }
 ethernet eth1 {
     address [public側の実IPアドレス]
     duplex auto
     hw-id [MACアドレス]
     speed auto
     vrrp {
         vrrp-group 100 {
             priority 150
             virtual-address [public側仮想アドレス]
         }
     }
 }
```

NAT設定
内部の機器がインターネットに抜けるときに、public側のインターフェースアドレスに変換させるようにします。

```
# show nat
 source {
     rule 1 {
         outbound-interface eth1
         source {
             address 0.0.0.0/0
         }
         translation {
             address masquerade
         }
     }
 }
```


##2号機の設定##
VRRP設定

```
# show vrrp interfaces 
 ethernet eth0 {
     address [private側の実IPアドレス]
     duplex auto
     hw-id [MACアドレス]
     speed auto
     vrrp {
         vrrp-group 200 {
             priority 100
             virtual-address [private側仮想アドレス]
         }
     }
 }
 ethernet eth1 {
     address [public側の実IPアドレス]
     duplex auto
     hw-id [MACアドレス]
     speed auto
     vrrp {
         vrrp-group 100 {
             priority 100
             virtual-address [public側仮想アドレス]
         }
     }
 }
```

NAT設定

```
# show nat
 source {
     rule 1 {
         outbound-interface eth1
         source {
             address 0.0.0.0/0
         }
         translation {
             address masquerade
         }
     }
 }
```

##テスト用サーバの設定##
DGWを、VRRPのプライベート側の仮想アドレスに向けます。

#通信テスト#

###前提###
Vyatta1号機(Primary機) Publicアドレス:173.xx.xx.10
Vyatta2号機(Secondary機) Publicアドレス:173.xx.xx.12
テスト用サーバアドレス Pravateアドレス:10.xx.xx.174

###正常系（1号機Active）###

テスト用サーバからインターネットの任意の場所に通信した後、ログを確認します。

####VRRPログ#####
1号機
VRRPの状態は"MASTER"になっており、テスト用サーバのアドレスをNATしていることがわかります。

```
$ show vrrp
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              200    MASTER  no         no     6m30s       <none>
eth1              100    MASTER  no         no     6m30s       <none>

$ sho nat source  translations
Pre-NAT              Post-NAT             Prot  Timeout
10.xx.xx.174         173.xx.xx.10         tcp   114
```

2号機
VRRPの状態は"BACKUP"です。

```
$ show vrrp
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              200    BACKUP  no         no     4m29s       <none>
eth1              100    BACKUP  no         no     4m29s       <none>

```


####テスト用サーバログ####
アドレス確認用サイトにアクセスすると、1号機側のpublicアドレスでアクセスしていることがわかります。

```
# curl inet-ip.info
173.xx.xx.10
```

###異常系（2号機Active）###

1号機をダウンさせた後、テスト用サーバからインターネットの任意の場所に通信した後、ログを確認します。

####VRRPログ#####
2号機
VRRPの状態は"MASTER"になっており、テスト用サーバのアドレスをNATしていることがわかります。

```
$ show vrrp 
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              200    MASTER  no         no     1m19s       <none>
eth1              100    MASTER  no         no     1m19s       <none>

$ show nat source translations 
Pre-NAT              Post-NAT             Prot  Timeout 
10.xx.xx.174         173.xx.xx.12         tcp   106     
```



####テスト用サーバログ####
アドレス確認用サイトにアクセスすると、2号機側のpublicアドレスでアクセスしていることがわかります。

```
# curl inet-ip.info
173.xx.xx.12
```

#最後に#
SoftLayerは他のクラウドサービスに比べてネットワークレイヤが圧倒的に自由です。
今回はこじんまりとした内容でしたが、グローバルなプライベートネットワークが使い放題！であることを考えると、色々な用途が考えられてワクワクしてきますね。