LoginSignup
7
4

More than 5 years have passed since last update.

SoftLayer仮想サーバーでVyOSの冗長化構成を勉強1-(VRRP基本構成編)

Last updated at Posted at 2016-06-12

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サーバー

01.png

・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をGroup200eth0をGroup100としました。
グループは、マルチキャストパケットがどのグループに属するかを識別するために使用されます。
・確認用のWebサーバー(WWWCent6)のディフォルトゲートウェイは、VRRP仮想PrivateIP(10.132.52.225)です。

02.png

3-2. VyOS構成

説明しやすいように行番号(XXX)を入れてます。実際に入力する際は入れないでください。

VyOS01構成例
(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)を入れてます。実際に入力する際は入れないでください。

VyOS02構成例
(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がマスターに昇格するかを確認

03.png
初期状態 vyos01はMASTERr、vyos02はBACKUPを確認

04.png
vyos01をリブート

05.png
vyos02がBACKUPからMASTERへ昇格したことを確認。

vyos01が正常起動後
06.png
プリエンプションが有効(preempt true)のため、vyos01起動後にMASTERになり、vyos02がBACKUPに移行している。

4-2. vyos01のeth0インターフェースをダウンさせ、vyos02がマスターに昇格するかを確認

SoftLayerポータルより、デバイスの詳細画面でeth0を切断する
07.png

08.png
vyos01のeth0/eth1状態が両方ともFAULTになり、eth0/eth1の「sysncgroup01」というグループでFAULTになったことを確認。
同時にvyos02がMASTERに昇格したことを確認。

4-3. vyos01の電源をオフにし、Web画面を確認。

まずはWebサイトにアクセスし、HTML画面が表示されることを確認。
10.png

SoftLayerポータルより、vyos01電源オフ
11.png

vyos02がMASTERになっていることを確認し、Webサイトにアクセス
12.png
正常に表示されました。

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間接続やリモート接続ができるかテストする予定です。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4