本エントリは2枚目 SoftLayer Advent Calendar 2014の23日目向けに書きました!
昨日はついに東京DCがオープンしました!
同時に「第5回東京SoftLayer勉強会」も開催され、SoftLayerの波が日本に上陸しています!
世界的ですもんね 乗るしかない、このビッグウェ(以下略)
勉強会でのLTは非常にレベルが高く、その翌日にこんなエントリで何か申し訳ない気分になっています。
#やりたいこと#
私「VyattaをVirtualServerにしてFirewallとして使えますよ。」
お客様「それ冗長化できない?」
私「え!?」
お客様「そのVyattaとかいうのを冗長化できない?」
私「やってみます……」
以前お客様と上記のようなやりとりがありましたので、Vyattaの冗長化をSoftLayerで検証してみます。
冗長化して内部のサーバがインターネット側にNAT(PAT)されて通信できる、というところをゴールにします。
#構成#
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は他のクラウドサービスに比べてネットワークレイヤが圧倒的に自由です。
今回はこじんまりとした内容でしたが、グローバルなプライベートネットワークが使い放題!であることを考えると、色々な用途が考えられてワクワクしてきますね。