赤鯖にVyos入れて最高のインターネッツを手に入れた
この記事は OIC ITCreate Club Advent Calendar 2017 5日目の記事ですが、投稿日は6日です。謹んでお詫びします。
表: https://adventar.org/calendars/2640
裏: https://adventar.org/calendars/2563
登場人物
- Rad Beagle
- Vyos
- Netgear GS116E
あらすじ
- EdgeRouter-Liteに飽き飽きとし、x86鯖にVyosを入れて爆速にする。
ことの始まり
界隈である程度有名だった通称「赤鯖」。前回はi7モデル・Core2Duoモデルが販売されていたが、今回はi5モデルが秋葉で売られたらしい。50台在庫は有ると書いているが心配なので、すぐに優秀な学生を派遣し、2台確保。翌日には売り切れていたようだ。
届いた
手元に届いたのは1月後のこと。東京に行った時に受け取った。
- GigabitEther: 4
- IPMI Ether: 1
- USB: 2
- D-Sub: 1
- Serial: 1
という端子の充実ぶり。基板の表面実装には、USB1つ・6ポートのSATA・PCI Express2つ付いており、拡張性もかなり高い。
IPMIは、BIOS上から設定したIPアドレスにWebブラウザでアクセスすると操作できる。Javaサーブレット製のコンソールを開くと、ISOイメージマウントも行える。
ネットワーク切り替えついでに、手頃なスイッチGS116Eも買った。NetgearのVlan/QoSなどに対応したL2スイッチだ。ビジネス向けということもあり、かなり安定性が高いと評判を見かける。自宅のc2970g-24ts-eはアイドル時で消費電力が70W有る一方、この機種は最大で10W程度だ。
https://www.amazon.co.jp/gp/product/B00GQL3U2M
Netgearのスイッチは、Windowsにインストールするユーティリティソフト・WebUIの2種類の設定方法が提供されている。ユーティリティソフトのインストール画面を見てほしい。
闇過ぎる。操作画面を乗せるには刺激が強すぎるので、どうしても見たい人はググってFlash全盛期のUIを見て懐かしさに浸ってほしい。
赤鯖のCPU情報。ノート向けCPUにノート向けRAMを積んでいる。
構築
今回はこのような構成のネットワークを構築する。
- 赤鯖にはWindows10を入れ、Hyper-Vを有効にする
- Hyper-V上にVyosをインストールし、仮想スイッチでGS116E2本イーサーを接続する
- GS116EはVLAN2を割り当てた3ポートを残し、残りの13ポートはVLAN1に設定する(すべてアクセス)
- 対向はフレッツ・IIJ FiberAccess/NF・TransixによるDS-Lite
- ひかり電話は契約しておらずIPv6のプレフィックスは/64のため、Vyosの外側・内側インタフェースをブリッジする
Netgear GS116E
WebUIの方が格段に使いやすいため、そちらを使う。(AdobeAirの方はVLAN設定を行うとするとエラーが出て神)
ポイントとなるのが、 ポートベースVLANを使用せず、全て802.1Qのアクセスポートを使用してVLANを構築する こと。前者で設定すると、異なるVLAN同士をブリッジでつなげた際に、MACアドレスの学習テーブルがぶっ壊れて、疎通・切断を繰り返すようになる模様。詳しくは調査していない。
1-13をVLAN1・14-16をVLAN2とした。
Vyos on Hyper-V
赤鯖にWindows10をインストールするにはコツが必要だった。ISO/USBのインストールディスクを挿入しても、インストーラーが途中までしか進まない。なので、他のマシンにディスクをマウントし、インストールを済ませてから赤鯖にディスクを挿入した。Hyper-Vに物理ディスクをアタッチし、これを行った。
VyosをHyper-Vにインストールした。RAM 512MB・CPU1コアで元気に動いてくれる。
最初に、ブリッジを使用するにあたって、Hyper-V上で「MACアドレスのスプーフィング」を有効にしておく。これで、仮想NICに割り当てられていないMACアドレスのパケットを流せるようになる。
まず、雑にeth0/eth1/br0を作る。貧乏で/64しか貰えないので、eth0とeth1をブリッジする。
interfaces { bridge br0 { address xxxx:xxxx:xxxx:xxxx::1/64 address 192.168.11.1/24 aging 300 dhcpv6-options { parameters-only } ipv6 { address { autoconf } disable-forwarding dup-addr-detect-transmits 1 } } ethernet eth0 { bridge-group { bridge br0 } } ethernet eth1 { bridge-group { bridge br0 } } }
次に、transixのDS-Liteを利用するため、トンネルデバイスを作成する。本来、DHCPv6で貰ったDNSで名前を引いた上でトンネルを作成するらしいが、ドメイン名でのトンネル作成に対応していないためこうしている。
RemoteIPはこちらで確認できる。http://www.mfeed.ad.jp/transix/ds-lite/
interfaces { tunnel tun0 { encapsulation ipip6 local-ip xxxx:xxxx:xxxx:xxxx::1 multicast disable remote-ip 2404:8e01::feed:100 } } protocols { static { interface-route 0.0.0.0/0 { next-hop-interface tun0 { } } } }
疎通を確認し、FWの設定を投入する。
IPv4のグローバルアドレスは存在しないため、FWの設定を現段階で行っていない。IPv6に関しては、ブリッジを使用しているため、ポートを指定してのルールが書けない。アドレスを指定してルールを記述する。
firewall { ipv6-name ipv6fw { default-action drop rule 100 { action accept protocol icmpv6 } rule 110 { action accept description ds-lite protocol 4 } rule 200 { action accept description out source { address xxxx:xxxx:xxxx:xxxx::0/64 } } rule 210 { action accept destination { address xxxx:xxxx:xxxx:xxxx::0/64 } state { established enable related enable } } } }
リザルト
速度
改善前(EdgeRouter-Lite)
改善後
手元マシンのCPU負荷が100%近くになり、これ以上はHTTPSがボトルネックになり測定できない模様。日本の上位3%の速度らしい。VyosのCPUは1コアしか割り当てていないが、この時も5%程度しかCPUを使用していない。
EdgeRouter等のARMルーターはipip6等のトンネルに対してオフロードを持たないことが多く、かなりのリソースを消費し、200Mbpsも流すとWebUIすら表示できなかった。それに比べx86鯖は素の性能が高く、スループットが非常に良くなるという予想。
消費電力
- アイドル: 25W
- 負荷時: 50W
(ドライブにSSD使用)
課題点
ハイパーバイザーにWindowsのHyper-Vを選択したため、 Windows Updateでルーターが定期的に再起動 する。これに対し、フレッツ側の回線に対してもスイッチでポートを増やしているので、いずれEdgeRouterとのVRRPを行って冗長構成を持つことで回避したい。
ただ、Hyper-Vは自体は脳死で使えて非常に良いので、みんな使ってほしい。コンシューマOSでこれ使えるの凄い。