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をバックアップとして、普段はマスターは落としていてバックアップのほうを経由、マスターが動いた瞬間にマスターを経由するようなことができればと考えました。マスターが通常時停止しているといった一般的な使い方ではないですが、想定どおりに動いています。

今回実施した内容

  1. VyOSにVRRPの設定を追加
    こちらを参考にVRRPの設定をします。コツはもう一つのゲートウェイとvrrp-groupの番号をあわせるのと、バーチャルIPの設定と、preemptを有効にすることです。
  2. Raspberry Pi 3に有線LANを追加し、iptablesでNATルーターを構築
    Raspberry Pi 3にバッファローのUSB接続LANををつけると自動的に「eth1」として認識されます。あとはiptables-persistentのインストール/設定やパケットをフォワードする設定をやれば簡単にNATルーターができあがります。
  3. 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はいろんなことに使えるし、消費電力が低いしで、良いですね。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です