VyOSで一つのグローバルIPを配下のローカルIPアドレスで共有する、いわゆる普通のブロードバンドルーター的な動作をするルータを作ってみます。
ただし、1台だけで構築した場合、そのサーバに何らかの障害が起きると、配下のサーバは通信できなくなってします。
そこで、登場するのがVRRPです。
設定手順に重点を置き、詳細は割愛しますが、VRRPを利用することで、2台以上のサーバがお互いに死活監視を行い、
常に一台だけが特定のIPアドレスを握ることで、全体として稼働し続けるルーターを構築することができます。
IPアドレス構成
以下のようなIPアドレスの構成とします
ホスト名 | グローバルIP(eth0) | ローカルIP(eth1) |
---|---|---|
router-01 | 198.51.100.172/28 | 192.168.0.252/24 |
router-02 | 198.51.100.173/28 | 192.168.0.253/24 |
仮想IP | 198.51.100.174/28 | 192.168.0.254/24 |
通常のインターフェース設定
それぞれ以下のようにすでにIPアドレスが設定されている状態にします。
router-01
interfaces {
ethernet eth0 {
address 198.51.100.172/28
hw-id 9c:a3:ba:31:92:f8
}
ethernet eth1 {
address 192.168.0.252/24
hw-id 9c:a3:ba:31:12:7c
}
loopback lo {
}
}
router-02
interfaces {
ethernet eth0 {
address 198.51.100.173/28
hw-id 9c:a3:ba:31:3b:6a
}
ethernet eth1 {
address 192.168.0.253/24
hw-id 9c:a3:ba:31:20:34
}
loopback lo {
}
}
仮想IPアドレスとVRRPの設定
VRRPの設定と、マスタの時に握る仮想IPアドレスを設定します。
全てのルータに共通の設定を流し込むだけでOKです。
configure
set interface ethernet eth0 vrrp vrrp-group 100
set interface ethernet eth0 vrrp vrrp-group 100 advertise-interval 1
set interface ethernet eth0 vrrp vrrp-group 100 preempt false
set interface ethernet eth0 vrrp vrrp-group 100 virtual-address 198.51.100.174/28
set interface ethernet eth0 vrrp vrrp-group 100 sync-group syncgroup01
set interface ethernet eth1 vrrp vrrp-group 100
set interface ethernet eth1 vrrp vrrp-group 100 advertise-interval 1
set interface ethernet eth1 vrrp vrrp-group 100 preempt false
set interface ethernet eth1 vrrp vrrp-group 100 virtual-address 192.168.0.254/24
set interface ethernet eth1 vrrp vrrp-group 100 sync-group syncgroup01
commit
save
exit
動作確認
それぞれのサーバのシェルで show vrrp
すると以下のように、一台がマスタ、残りがバックアップになっていることがわかります。
以下の場合では、router−01がバックアップ、router-02がマスタになっており、仮想IPアドレスも、router-02が握っていることが確認できます。
router-01
vyos@router-01:~$ show vrrp
RFC Addr Last Sync
Interface Group State Compliant Owner Transition Group
--------- ----- ----- --------- ----- ---------- -----
eth0 100 BACKUP no no 18s syncgroup01
eth1 100 BACKUP no no 18s syncgroup01
vyos@router-01:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 9c:a3:ba:31:92:f8 brd ff:ff:ff:ff:ff:ff
inet 198.51.100.172/28 brd 198.51.100.175 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::9ea3:baff:fe31:92f8/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 9c:a3:ba:31:12:7c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.252/24 brd 192.168.0.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::9ea3:baff:fe31:127c/64 scope link
valid_lft forever preferred_lft forever
router-02
vyos@router-02:~$ show vrrp
RFC Addr Last Sync
Interface Group State Compliant Owner Transition Group
--------- ----- ----- --------- ----- ---------- -----
eth0 100 MASTER no no 14s syncgroup01
eth1 100 MASTER no no 12s syncgroup01
vyos@router-02:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 9c:a3:ba:31:3b:6a brd ff:ff:ff:ff:ff:ff
inet 198.51.100.173/28 brd 198.51.100.175 scope global eth0
valid_lft forever preferred_lft forever
inet 198.51.100.174/28 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::9ea3:baff:fe31:3b6a/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 9c:a3:ba:31:20:34 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.253/24 brd 192.168.0.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.0.254/24 scope global secondary eth1
valid_lft forever preferred_lft forever
inet6 fe80::9ea3:baff:fe31:2034/64 scope link
valid_lft forever preferred_lft forever
NAT (IP masquarade) の設定
上記まででは、IPアドレスを持っているだけで、実際に配下のサーバがインターネットと通信するためにはNATの設定が必要です。
この設定に関してはVRRPを使わない場合と同様です。
configure
set nat source rule 100
set nat source rule 100 description "masquarade"
set nat source rule 100 outbound-interface eth0
set nat source rule 100 translation address 198.51.100.174
set nat source rule 100 source address 192.168.0.0/24
commit
save
exit
動作確認
配下に設置したサーバからインターネット上のサーバにpingを送りながらそれぞれのルーターを再起動してみましたが、
切り替えのタイミングで遅延が発生すルものの、継続して通信できていることが確認できます。