VRRPでデフォルトゲートウェイ冗長化(VyOSとRaspbian)
リモートで3Dゲーム①~④までで、グラボを乗せたPCにESXiをインストールし、グラボをパススルーしてゲストのVMで使用する、といったことをやっていたのですが、消費電力が気になります。GeForce1050Tiを乗せたPCのアイドル時の消費電力は50W程度らしいので、常時電源ONにしておくとひと月あたりの電気代は850円程度になりそうです。また排熱もそれなりにあるので、使わないときは電源OFFにしたいのですが、ここで問題発生です。
ESXi上のVM(VyOS)を内部LANのデフォルトゲートウェイ&NATルーターにしているのですが、電源をOFFにすると当然外部のネットワークにつながらなくなります。
そこで考えたのが、家庭内DNSやDHCPサーバを任せているRaspberry Pi 3にデフォルトゲートウェイ&NATルーターまで任してしまう方法です。Raspberry Pi 3には有線LANは一つしかついていませんが、当blogで紹介したUSB接続の有線LAN
をつけることで物理的なLANの口を追加します。
しかしながらやり方が悪いのか、Raspberry Pi 3で作ったデフォルトゲートウェイ&NATルーターはパフォーマンスが悪く、Speedtestで調べた結果、上りは95MbpsぐらいでRaspberry Pi 3
の有線の上限ぐらいまでいきましたが、下りが33Mbpsと物足りない結果でした。一方でESXi上のVyOSでは上り下りとも280Mbps程度(おそらく無線LANが律速)でます。
■VyOS on ESXi
■Raspberry Pi 3
普段はスマホでネットを見たりする程度なので問題ないのですが、大きなファイルをダウンロードするときは、ESXiの電源をつけ、VyOSのデフォルトゲートウェイ&NATルータを経由したいところです。一方で、普通にやると毎回デフォルトゲートウェイの設定(うちの場合はDnsmasqにDNSとDHCPを任せているので、Dnsmasqの設定ファイル)を書き換えることになり非常に面倒です。
そこで考えたのが、題名にしているデフォルトゲートウェイの冗長化です。ESXi上のVyOSをマスター、Raspberry Pi 3をバックアップとして、普段はマスターは落としていてバックアップのほうを経由、マスターが動いた瞬間にマスターを経由するようなことができればと考えました。マスターが通常時停止しているといった一般的な使い方ではないですが、想定どおりに動いています。
今回実施した内容
- VyOSにVRRPの設定を追加
こちらを参考にVRRPの設定をします。コツはもう一つのゲートウェイとvrrp-groupの番号をあわせるのと、バーチャルIPの設定と、preemptを有効にすることです。 - Raspberry Pi 3に有線LANを追加し、iptablesでNATルーターを構築
Raspberry Pi 3にバッファローのUSB接続LANを
をつけると自動的に「eth1」として認識されます。あとはiptables-persistentのインストール/設定やパケットをフォワードする設定をやれば簡単にNATルーターができあがります。
- Raspberry Pi 3にKeepalivedをインストールし、VRRP互換モードとして起動
こちらを参考にして設定しました。VyOSとkeepalivedを使用した場合のパラメータの設定がよくわかりませんでしたが、以下のようにして問題なく動いています。(eth0が内部ネットワークからみたゲートウェイのインターフェースです)
■keepalived.conf
global_defs {
notification_email {
}
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 100 ←VyOSと同じ番号を設定する
priority 10 ←数字が大きいほうが優先される
preemp ←マスター(VyOS)が起動したらマスターに移す
advert_int 1
virtual_ipaddress {
AAA.BBB.CCC.DDD/24 dev eth0 ←バーチャルIP。VyOSと同じ番号を設定する
}
}
以上で、ESXiを起動すれば自動的にVyOS経由になり、ESXiを落とすと自動的にRaspberry Pi 3経由になる環境が構築できました。拍子抜けするぐらい簡単です。Raspberry Piはいろんなことに使えるし、消費電力が低いしで、良いですね。