VyOS の High Availability 設定 (VRRP)
[履歴] [最終更新] (2017/04/03 00:35:34)

概要

こちらのページで基本的なサービス DHCP/DNS/NAT/Firewall の設定方法を把握した VyOS について、VRRP (Virtual Router Redundancy Protocol) という仕組みを用いて可用性を高めるための設定方法をまとめます。

設定方法を検証するための構成

VirtualBox のゲスト OS として VyOS 用の VM を三つ用意します。手順はこちらです。192.168.200.0/24 のネットワークは VirtualBox の「内部ネットワーク」として用意します。

ホスト OS の所属するネットワーク
|
|
|NAT
|                      .1
|- eth0 | vyos-0001 | eth1 --|
|           master     .4    |
|                      VIP   |---- eth0 | vyos-0003
|                            |      .3
|- eth0 | vyos-0002 | eth1 --|
            backup     .2   192.168.200.0/24

固定 IP の設定

vyos-0001

vyos@vyos-0001# set interfaces ethernet eth1 address 192.168.200.1/24
vyos@vyos-0001# commit
vyos@vyos-0001# save

vyos-0002

vyos@vyos-0002# set interfaces ethernet eth1 address 192.168.200.2/24
vyos@vyos-0002# commit
vyos@vyos-0002# save

vyos-0003

vyos@vyos-0003# set interfaces ethernet eth0 address 192.168.200.3/24
vyos@vyos-0003# commit
vyos@vyos-0003# save

VRRP 設定

192.168.200.4/24 を仮想 IP として設定します。vyos-0001 の priority を高めに設定することで master に指定します。同じセグメントに他の VRRP のパケットが流れたときに区別ができるように、vrrp-group というグループ ID を設定します。ここでは仮に 10 としました。また、sync-group は今回の用途では実は不要な設定です。複数の VRRP 設定を同じ sync-group に所属させると、あるグループの interface で failover が発生したときに、他のグループでも failover が発生するようになります。例えば vyos-0001 の eth0 と vyos-0002 の eth0 でも VRRP 設定を組んだときに、eth0 側と eth1 側で master が不一致になる状況を回避できます。公式ドキュメントはこちらです。VRRP は VyOS 公式ドキュメントにおける記述がなく、必要に応じて Vyatta のドキュメントを参照する必要があります。

vyos-0001

vyos@vyos-0001# set interfaces ethernet eth1 vrrp vrrp-group 10 virtual-address 192.168.200.4/24
vyos@vyos-0001# set interfaces ethernet eth1 vrrp vrrp-group 10 sync-group my-vrrp-sync-group
vyos@vyos-0001# set interfaces ethernet eth1 vrrp vrrp-group 10 priority 255
vyos@vyos-0001# commit
vyos@vyos-0001# save

vyos-0002

vyos@vyos-0002# set interfaces ethernet eth1 vrrp vrrp-group 10 virtual-address 192.168.200.4/24
vyos@vyos-0002# set interfaces ethernet eth1 vrrp vrrp-group 10 sync-group my-vrrp-sync-group
vyos@vyos-0002# set interfaces ethernet eth1 vrrp vrrp-group 10 priority 100
vyos@vyos-0002# commit
vyos@vyos-0002# save

内部からの確認

VRRP の状態を確認します。vyos-0001 が master として認識されていることが分かります。

vyos-0001

vyos@vyos-0001# run show vrrp detail
Use of uninitialized value in printf at /opt/vyatta/share/perl5/Vyatta/VRRP/OPMode.pm line 249.
--------------------------------------------------
Interface: eth1
--------------
  Group: 1
  ----------
  State:                        MASTER
  Last transition:              2m6s

  Source Address:
  Priority:                     255
  Advertisement interval:       1 sec
  Authentication type:          none
  Preempt:                      enabled

  Sync-group:                   my-vrrp-sync-group

  VIP count:                    1
    192.168.200.4/24

vyos-0002

vyos@vyos-0002# run show vrrp detail
Use of uninitialized value in printf at /opt/vyatta/share/perl5/Vyatta/VRRP/OPMode.pm line 249.
--------------------------------------------------
Interface: eth1
--------------
  Group: 1
  ----------
  State:                        BACKUP
  Last transition:              1m13s

  Master router:                192.168.200.1
  Master priority:              255

  Source Address:
  Priority:                     100
  Advertisement interval:       1 sec
  Authentication type:          none
  Preempt:                      enabled

  Sync-group:                   my-vrrp-sync-group

  VIP count:                    1
    192.168.200.4/24

外部からの確認

vyos-0003 から VIP に対して arping を実行すると、vyos-0001 の 192.168.200.1 に対して実行したときと同じ MAC アドレスが得られることが分かります。

vyos@vyos-0003:~$ arping 192.168.200.1
WARNING: interface is ignored: Operation not permitted
ARPING 192.168.200.1 from 192.168.200.4 eth0
Unicast reply from 192.168.200.1 [08:00:27:5A:75:64]  0.838ms
Unicast reply from 192.168.200.1 [08:00:27:5A:75:64]  0.842ms

vyos@vyos-0003:~$ arping 192.168.200.2
WARNING: interface is ignored: Operation not permitted
ARPING 192.168.200.2 from 192.168.200.4 eth0
Unicast reply from 192.168.200.2 [08:00:27:A6:0C:AC]  0.890ms
Unicast reply from 192.168.200.2 [08:00:27:A6:0C:AC]  0.987ms

vyos@vyos-0003:~$ arping 192.168.200.4
WARNING: interface is ignored: Operation not permitted
ARPING 192.168.200.4 from 192.168.200.4 eth0
Unicast reply from 192.168.200.4 [08:00:27:5A:75:64]  0.762ms
Unicast reply from 192.168.200.4 [08:00:27:5A:75:64]  0.850ms

障害時の検証

vyos-0001 と vyos-0002 に割り当てられた IP を確認します。一般に、一つのインターフェースには IPv4 と IPv6 の混在も含めて複数の IP を設定可能です。ただし、DHCP との混在はできません。

vyos-0001

vyos@vyos-0001# run show interfaces ethernet eth1
eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:5a:75:64 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.1/24 brd 192.168.200.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet 192.168.200.4/24 scope global secondary eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5a:7564/64 scope link
       valid_lft forever preferred_lft forever

    RX:  bytes    packets     errors    dropped    overrun      mcast
         20331        152          0          0          0          0
    TX:  bytes    packets     errors    dropped    carrier collisions
         70623       1058          0          0          0          0

vyos-0002

vyos@vyos-0002# run show interfaces ethernet eth1
eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a6:0c:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.2/24 brd 192.168.200.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea6:cac/64 scope link
       valid_lft forever preferred_lft forever

    RX:  bytes    packets     errors    dropped    overrun      mcast
         47460        791          0          0          0        774
    TX:  bytes    packets     errors    dropped    carrier collisions
          1058         11          0          0          0          0

ここで vyos-0001 を落としてみます。

vyos@vyos-0001:~$ poweroff

vyos-0002 に VIP が移動しました。vyos-0001 を起動すると VIP は元に戻ります。

vyos@vyos-0002# run show interfaces ethernet eth1
eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a6:0c:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.2/24 brd 192.168.200.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet 192.168.200.4/24 scope global secondary eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea6:cac/64 scope link 
       valid_lft forever preferred_lft forever

    RX:  bytes    packets     errors    dropped    overrun      mcast
         51600        860          0          0          0        843
    TX:  bytes    packets     errors    dropped    carrier collisions
          2858         41          0          0          0          0
関連ページ