こちらのページで基本的なサービス 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
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
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