1. はじめに
SoftLayerの仮想サーバーとVyOSを使ってVPN-LAN間接続、リモートアクセス接続を構築ケースがあります。
SoftLayerでは、冗長化構成が組める「ネットワークゲートウェイアプライアンス」(Vyatta6.x)を提供しているので構築が可能ですが、ベアメタル基盤のため数台のサーバー利用では全体のシステムを考えた場合、費用面のハードルが高くなるでしょう。
また、仮想サーバーにVyOSを導入した場合、スタンダードイメージからもどすことができず、故障の際の復旧に時間がかかります。
今回は耐障害性を考慮しつつ、コストを少なくする事を目的に、仮想サーバーにVyOSを導入しVRRPで冗長化構成の可能性をテストしたいと思います。
まずは、VyOSでVRRP構成の基本から始めます。
2. VRRPについて
(VRRP:Virtual Router Redundancy Protocol)
VRRPは、物理的には複数台あるルータを仮想的に1台のルータに見せることができる技術です。
ルータなどネットワーク機器の 冗長化構成を構築する際の機能で、RFC5798で標準化されてます。
シスコ社のHSRP(Hot Standby Routing Protocol)も基本的には同じ機能ですが、
VRRPの場合は、仮想IPアドレスにマスタールータの物理IPアドレスを指定することができます。
SoftLayerでVRRP用の仮想IPアドレスを入手するには、インスタンスをオーダー時についてくるプライマリーIPアドレスを使用する方法がありますが、将来インスタンスを作成するための予約IPとなっているので、お勧めしません。
ちなみに、SoftLayerで有償版のVyttaをHA構成でオーダーすると、仮想IPは予約済みとなりますので、上記のような心配はありません。
また、ポータブルIPではネットワークの設定がうまくいかず、通信ができませんでした。(参考まで:パブリックポータブルIPは16ポート月額$32です。)
そこで、今回はVRRPで可能な、仮想IPアドレスにマスタールータの物理IPアドレスを指定しました。
VRRPは複数台のルータ(複数台のVyOS)でグループを組み、VRRP仮想IPを共有します。
各ルータは「マスター(1台)」と「バックアップ」の役割に分かれ、プライオリティ値の大きなルータが「マスター」となります。
・マスター
・バックアップ
「マスター」がダウンした際は、自動で「バックアップ」が「新マスター」に昇格します。
また、ダウンした「旧マスター」が復旧した場合の切り戻しには2つの方法があります。
・プリエンプション有効---「旧マスター」がすぐに「マスター」へ昇格
・プリエンプション無効---「マスター」の切り戻しは行わない
※通信接続状況を考慮し、自動的に切り戻しを行わない ”プリエンプション無効”をお勧めします。
3. 構成について
VyOSへの入れ替えは省略いたします。
「SoftLayer仮想サーバにVyOSをインストールしました」の「9. ⑦ VyOSネットワークの設定」をご覧ください。
http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562baa
3-1. 全体構成
SoftLayerの仮想インスタンスを3台オーダーしました。
・VyOS01 ------- VyOSマスタールーター
・VyOS02 ------- VyOSバックアップルーター
・WWWCent6 --- 確認用Webサーバー
・VyOS01のPriorityを250、VyOS02のPriorityを200にしましたので、VyOS01がマスター、VyOS02がバックアップになります。
・VRRP仮想PublicIPはVyOS01のeth1(161.202.158.218)、VRRP仮想PrivateIPはVyOS01のeth0(10.132.52.225)です。
・VyOS01/VyOS02のeth1をGroup200、eth0をGroup100としました。
グループは、マルチキャストパケットがどのグループに属するかを識別するために使用されます。
・確認用のWebサーバー(WWWCent6)のディフォルトゲートウェイは、VRRP仮想PrivateIP(10.132.52.225)です。
3-2. VyOS構成
説明しやすいように行番号(XXX)を入れてます。実際に入力する際は入れないでください。
(001) interfaces {
(002) ethernet eth0 {
(003) address 10.132.52.225/26
(004) duplex auto
(005) hw-id 06:98:ae:8a:24:ac
(006) smp_affinity auto
(007) speed auto
(008) vrrp {
(009) vrrp-group 100 {
(010) advertise-interval 1
(011) preempt true
(012) priority 250
(013) sync-group syncgroup01
(014) virtual-address 10.132.52.225
(015) }
(016) }
(017) }
(018) ethernet eth1 {
(019) address 161.202.158.218/29
(020) duplex auto
(021) hw-id 06:26:c9:26:4f:4d
(022) smp_affinity auto
(023) speed auto
(024) vrrp {
(025) vrrp-group 200 {
(026) advertise-interval 1
(027) preempt true
(028) priority 250
(029) sync-group syncgroup01
(030) virtual-address 161.202.158.218
(031) }
(032) }
(033) }
(034) loopback lo {
(035) }
(036) }
(037) nat {
(038) destination {
(039) rule 200 {
(040) description "1-to-1 NAT"
(041) destination {
(042) address 161.202.158.218
(043) port 80
(044) }
(045) inbound-interface any
(046) protocol tcp
(047) translation {
(048) address 10.132.52.226
(049) port 80
(050) }
(051) }
(052) }
(053) source {
(054) rule 200 {
(055) description " masquerade NAT"
(056) outbound-interface eth1
(057) source {
(058) address 10.132.52.192/26
(059) }
(060) translation {
(061) address masquerade
(062) }
(063) }
(064) }
(065) }
(066) protocols {
(067) static {
(068) route 10.0.0.0/8 {
(069) next-hop 10.132.52.193 {
(070) }
(071) }
(072) }
(073) }
(074) service {
(075) ssh {
(076) port 22
(077) }
(078) }
(079) system {
(080) config-management {
(081) commit-revisions 20
(082) }
(083) console {
(084) device hvc0 {
(085) speed 9600
(086) }
(087) }
(088) gateway-address 161.202.158.217
(089) host-name vyos
(090) login {
(091) user root {
(092) authentication {
(093) encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(096) plaintext-password ""
(097) }
(098) level admin
(099) }
(100) user vyos {
(101) authentication {
(102) encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(103) plaintext-password ""
(104) }
(105) level admin
(106) }
(107) }
(108) name-server 10.0.80.11
(109) ntp {
(100) server time.service.networklayer.com {
(111) }
(112) }
(113) package {
(114) auto-sync 1
(115) repository community {
(116) components main
(117) distribution helium
(118) password ""
(119) url http://packages.vyos.net/vyos
(120) username ""
(121) }
(122) }
(123) syslog {
(124) global {
(125) facility all {
(126) level notice
(127) }
(128) facility protocols {
(129) level debug
(130) }
(131) }
(132) }
(133) time-zone Asia/Tokyo
(134) }
VRRPとNATの箇所を重点に説明します。
・(008)-(016):eth0のVRRP設定
・(009):マルチキャストが届くグループを定義(この例では100)
vyos02のeth0と同じグループ
・(010):グループ内でのadvertiseパケットを送信する間隔(ディフォルト値)
・(011):ダウンしたマスターが障害から復旧した際、すぐに自動でマスターへ昇格するかを
設定(プリエンプション)(この例ではtrue:すぐに昇格します)
・(013):インスタンスのeth0/eth1のどちらかがダウンして片方が生き残った場合、バックアップへ
切り替わらないケースがある。これを防ぐためにeth0/eth1インターフェースをグループ化して管理。
(この例では「eth0/eth1」を「sysncgroup01」というグループ名で登録している)
・(014):プライベート側(eth0)のVRRP仮想IPアドレス。
(この例では、VRRPはマスターと同じ物理IPを登録できるので、「10.132.52.225」とした)
・(024)-(032):eth1のVRRP設定
・(025):マルチキャストが届くグループを定義(この例では200)
vyos02のeth1と同じグループ
・(026):グループ内でのadvertiseパケットを送信する間隔(デフォルト値)
・(027):ダウンしたマスターが障害から復旧した際、すぐに自動でマスターへ昇格するかを
設定(プリエンプション)(この例ではtrue:すぐに昇格します)
・(028):インスタンスのeth0/eth1のどちらかがダウンして片方が生き残った場合、バックアップへ
切り替わらないケースがある。これを防ぐためにeth0/eth1インターフェースをグループ化して管理。
(この例では「eth0/eth1」を「sysncgroup01」というグループ名で登録している)
・(030):プライベート側(eth0)のVRRP仮想IPアドレス。
(この例では、VRRPはマスターと同じ物理IPを登録できるので、「161.202.158.218」とした)
・(037)-(065):NAT設定
確認目的なので、簡易的な設定になってます。
・(038)-(052):destination NAT設定
パブリックVRRP仮想IP(161.202.158.218)のポート80から来たパケットを、WebサーバーのIP(10/132.52.226)のポート80に1対1変換しています。
・(053)-(064):sourceNAT(マスカレード)設定
今回は、インターネットから構内のWebサーバーを参照する想定なので、特に必要ない。
説明しやすいように行番号(XXX)を入れてます。実際に入力する際は入れないでください。
(001)interfaces {
(002) ethernet eth0 {
(003) address 10.132.52.234/26
(004) duplex auto
(005) hw-id 06:e3:74:c6:aa:96
(006) smp_affinity auto
(007) speed auto
(008) vrrp {
(009) vrrp-group 100 {
(010) priority 240
(011) sync-group syncgroup01
(012) virtual-address 10.132.52.225
(013) }
(014) }
(015) }
(016) ethernet eth1 {
(017) address 161.202.158.221/29
(018) duplex auto
(019) hw-id 06:62:f3:35:0d:2a
(020) smp_affinity auto
(021) speed auto
(022) vrrp {
(023) vrrp-group 200 {
(024) priority 240
(025) sync-group syncgroup01
(026) virtual-address 161.202.158.218
(027) }
(028) }
(029) }
(030) loopback lo {
(031) }
(032) }
(033) nat {
(034) destination {
(035) rule 200 {
(036) description "1-to-1 NAT"
(037) destination {
(038) address 161.202.158.218
(039) port 80
(040) }
(041) inbound-interface any
(042) protocol tcp
(043) translation {
(044) address 10.132.52.226
(045) port 80
(046) }
(047) }
(048) }
(049) source {
(050) rule 200 {
(051) description " masquerade NAT"
(052) outbound-interface eth1
(053) source {
(054) address 10.132.52.192/26
(055) }
(056) translation {
(057) address masquerade
(058) }
(059) }
(060) }
(061) }
(062) protocols {
(063) static {
(064) route 10.0.0.0/8 {
(065) next-hop 10.132.52.193 {
(066) }
(067) }
(068) }
(069) }
(070) service {
(071) ssh {
(072) port 22
(073) }
(074) }
(075) system {
(076) config-management {
(077) commit-revisions 20
(078) }
(079) console {
(080) device hvc0 {
(081) speed 9600
(082) }
(083) }
(084) gateway-address 161.202.158.217
(085) host-name vyos
(086) login {
(087) user vyos {
(088) authentication {
(089) encrypted-password xxxxxxxxxxxxxxxxxxxx(090) plaintext-password ""
(091) }
(092) level admin
(093) }
(094) }
(095) name-server 10.0.80.11
(096) ntp {
(097) server time.service.networklayer.com {
(098) }
(099) }
(100) package {
(101) auto-sync 1
(102) repository community {
(103) components main
(104) distribution helium
(105) password ""
(106) url http://packages.vyos.net/vyos
(107) username ""
(108) }
(109) }
(100) syslog {
(111) global {
(112) facility all {
(113) level notice
(114) }
(115) facility protocols {
(116) level debug
(117) }
(118) }
(119) }
(120) time-zone Asia/Tokyo
(121) }
4. 動作確認
4-1. vyos01をリブートし、vyos02がマスターに昇格するかを確認
初期状態 vyos01はMASTERr、vyos02はBACKUPを確認
vyos02がBACKUPからMASTERへ昇格したことを確認。
vyos01が正常起動後
プリエンプションが有効(preempt true)のため、vyos01起動後にMASTERになり、vyos02がBACKUPに移行している。
4-2. vyos01のeth0インターフェースをダウンさせ、vyos02がマスターに昇格するかを確認
SoftLayerポータルより、デバイスの詳細画面でeth0を切断する
vyos01のeth0/eth1状態が両方ともFAULTになり、eth0/eth1の「sysncgroup01」というグループでFAULTになったことを確認。
同時にvyos02がMASTERに昇格したことを確認。
4-3. vyos01の電源をオフにし、Web画面を確認。
まずはWebサイトにアクセスし、HTML画面が表示されることを確認。
vyos02がMASTERになっていることを確認し、Webサイトにアクセス
正常に表示されました。
5. おわりに
VRRPの状態確認コマンドは $ show vrry をはじめ色々ありますので、是非試してください。
また、セキュリティの観点よりパスワードをかける事ができます。
# set interfaces ethernet eth0 vrrp vrr-group 100 authentication password xxxx ⏎
# set interfaces ethernet eth0 vrrp vrr-group 100 authentication type plaintext-password ⏎
今回、VyOSの冗長化機能を勉強しましたが、実際にVPN-LAN間接続やリモート接続ができるかテストする予定です。