2020年09月19日(土) - 22:53 | カテゴリ:
自作PC
1台目のHyper-VホストはShuttle DS81ベアボーンを使っており、CPUは4770Sだった。
ゲストサーバの処理内容がメモリ寄りだった為、CPU処理速度は足りていたのだが、
最大メモリ容量が16GBだった事もありメモリを利用する用途には使いにくかった。
そんな事もあり、メモリ増強を兼ねた刷新を計画していたのだが、
他に進めていた刷新があったので後回しにしていた。
一方、VMware ESXiをNUCで構築する計画も練っていたのだが、
NUCで構築する際はNIC増設が必要となり、ハード・ソフトの両面でハードルが高かった。
そうなると、懸念が残る構成をNUCで作るよりも、
今まで使っていたHyper-Vホスト1号機を転用すれば問題無いと気付いた為、
先に1台目のHyper-Vホストサーバを刷新する事にした。

という事で、5月初頭に構築したHyper-V2号機の隣に同型機が加わった。
今回の構成は次の通り。2台目のスペックとほぼ同じ構成とした。
当初、メモリはADATA製を利用しようと計画していたが、G.SKILLが叩き売りをしていた変更。
保証期間が有限なのがネックだがメモリ故障の機会は稀なので、保証期間は許容した。
| CPU |
Intel Core i5 9400 |
19,000円 |
| MBO |
Shuttle DH310v2 |
27,000円 |
| MEM |
G.SKILL F4-2666C18S |
12,000円 |
| SSD |
Micron 5300 PRO 960G |
33,000円 |
| 合計 |
91,000円 |
twitterを見ているとNUCをベースにした仮想サーバや、Kubernetesクラスタを構築している事例が多い。
ただ、筆者の場合は仮想サーバホストを二重化しつつゲストサーバ単位で冗長化する方針を取っている。
今回の環境も同じ方針・構成を取っており、これでゲストOSをフル稼働する環境が整った。

LANケーブルの整理と物理設備の仮想化も進めているのでNWラックがスッキリした環境に。
VMware ESXiを接続する為のゲートウェイ用LANケーブルを仮設しているので、
ルータから1本のLANケーブルが表からスイッチに延びているが後で弾き直そうと思う。
« 続きを隠す
2020年08月11日(火) - 22:21 | カテゴリ:
Linux
数ヶ月前に実施した自宅サーバ刷新に合わせて、録画サーバ構成も大きく見直した。
従来はチューナーにPT2を使っており、必然的にPCIスロッド搭載の自作PCが必須だったが、
今回はUSB接続のPLEXチューナーに変更したので、大きな設備を用いる必要がなくなった。
また、本格的な仮想サーバ基盤をさくらの専用サーバに移設した事もあり、
録画サーバだけの為に場所を取りたく無かった。
また、現行世代のパーツでPCを組もうにも、
PCIスロッドを搭載したマザーボードが皆無なのでパーツ入手性も考慮すると諦める必要があった。
今回は録画サーバの構成紹介であって、
地デジを復号・録画する様な物じゃないのであしからず。
構成は至ってシンプル。母体となるベアボーンPCにPLEXチューナーを接続した。
ベアボーンPCには、ASRock DeskMini A300・ASRock DeskMini 310をチョイス。
筐体が小さくて置き場に困らないのと、デスクトップ用CPUを搭載出来る上、
2.5インチベイが2個あるのが決め手となった。

メイン機(左)は、以前から気になり少しずつ使っていた「foltia ANIME LOCKER」を導入。
サブ機(右)は、従来通りにCentOSを使った独自構成となり、今風のアプリケーションで組んだ。
WebサーバはNginxを使っても良かったのだが、使い慣れていないNginxを使うのも怖かったので、
一番慣れているapacheを採用した。
OS・データ領域はフルSSDにしつつ、録画データ領域はRAID1を組んで冗長化も行った。
ただ、foltiaについてはOSインストール先をRAID1にするのが面倒だった為、
OS専用にM.2-SATAのSSDを積んでシングル構成にした。
foltiaは仮想アプライアンスの様な物なので、
最悪OSが吹っ飛んでも録画データさえ生きていれば再インストールで乗り切れると割り切った。
………
問題だったのは、チューナーフル稼働時にPX-Q3U4の排熱ファン回転だった。
PX-Q3U4はフル稼働した時にチップを冷却する為にファンが搭載されているのだが、
このファンが小口径で相応の回転速度を持っており、
回転振動がチューナーに悪さをしてしまいドロップが発生する様になる。
ドライバをサードパーティの物にするとある程度安定する様になるのだが、
今回は排熱ファンを取り外して物理的に振動を起きなくさせた。
また、ファンを取り外した分を効率的に排熱させる必要があるので、
側面に排熱穴を開けつつチューナーを縦置きする事で対処した。
という事で、改造したPX-Q3U4を使いつつこんな環境で稼働させている。

撮影場所が暗かったので、フラッシュを焚いたら左のファンフィルターが凄い事に (;´Д`)
実際は埃の堆積もほぼ無い。
この状態で3ヶ月以上稼働させているが、独自構築した録画サーバで問題は発生していない。
むしろ、foltiaの方で稀にチューナーを認識しないケースが出ており、
何処かでOS入れ替えかチューナー変更が必要になりそうだった。
今回構築した環境のメリットはなんと言っても小型な所。その上、チューナーが入手しやすいのも追加点となる。
USB接続チューナーは種類が増えてきており、以前話題になったフリ○オもUSB対応の新バージョンが出るらしい。
来年には活躍しそうなサーバなので、今後も上手く運用していきたいと思う。
« 続きを隠す
2020年08月08日(土) - 22:35 | カテゴリ:
Network
“ns-lab BB”の自宅サーバとリモートで動いているVPS・専用サーバを繋ぐ為、
VyOSを使って拠点間IPSecVPNを構築してNW通信が出来る様にしてある。
従来はVPN専用に固定IPプロバイダを契約してIPv4 IPSecVPNを張っていたのだが、
費用とVPN冗長化の課題が出てきたので何とかしようと考えていた。
そんな中『PPPoEで大量に振ってくるIPv6を使えば専用プロバイダいらないのでは!?』
と思い立ったので、IPv6 IPSecVPNへ移行する事にした。
………
そうなると、IPv6アドレスのみ付与したインターフェースでIPSecを張る必要が出てくるのだが、
VyOS v1.2.Xに設定を投入するとこんなエラーが出てきた。
# commit
[ vpn ipsec site-to-site peer 2001:ffff:ffff:ffff::1 tunnel 1 ]
VPN configuration error: IPv4 over IPv6 IPsec is not supported
Warning: Local address 2001:0:0:0::1 specified for peer "2001:ffff:ffff:ffff::1"
is not configured on any of the ipsec-interfaces and is not the
clustering address. IPsec must be re-started after address
has been configured.
|
VyOS公式でもバグ報告が上がっているのだが、優先度低になっており何時直るのか判らない状況。
コレが出来ないとIPv6環境に移行が出来ないのは勿論の事、修正を待って何もしないのもどうかと思ったので、
自力でVyOS内のIPSec設定スクリプトを直してみた。
………
修正箇所は次の通り。スクリプトがperlで書かれていたので読みやすかった。
どうやら、IPv6のみ付与したインターフェースでIPSecを設定しようとすると、
条件判定に引っかかってしまいエラーが出る様だった。
この問題は、VyOSのフォークとなるEdgeRouterでも発生するらしく、
先人の知恵も借りながら次の通りに修正してみた。
修正前:[/opt/vyatta/sbin/vpn-config.pl]
550 # Check remote/local and peer protocol consistency
551 # IPv6 over IPv6 scenario is actually supported by StrongS/WAN,
552 # we do not allow it in this version because of design and QA issues.
553 if (($conn_proto != 6) && ($leftsubnet_proto == 6)) {
554 vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
"$vpn_cfg_err IPv6 over IPv4 IPsec is not supported");
555 } elsif (($conn_proto == 6) && ($leftsubnet_proto != 6)) {
556 vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
"$vpn_cfg_err IPv4 over IPv6 IPsec is not supported");
557 }
|
修正後:[/opt/vyatta/sbin/vpn-config.pl]
550 # Check remote/local and peer protocol consistency
551 # IPv6 over IPv6 scenario is actually supported by StrongS/WAN,
552 # we do not allow it in this version because of design and QA issues.
553 if (($conn_proto != 6) && ($leftsubnet_proto != 0 and $leftsubnet_proto == 6)) {
554 vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
"$vpn_cfg_err IPv6 over IPv4 IPsec is not supported");
555 }
556 if (($conn_proto == 6) && ($leftsubnet_proto != 0 and $leftsubnet_proto != 6)) {
557 vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
"$vpn_cfg_err IPv4 over IPv6 IPsec is not supported");
558 }
|
554行目と557行目は幅の関係で改行しているが実際は1行で書く。
実際の修正箇所は553行目と556行目の判定処理。
この改修を入れると、IPv6 IPSec VPNも設定が通る様になった。
だが、VyOSのアップグレードをすると元に戻る筈なので注意が必要。
そのうち公式修正で直ると思うが、それまではこの改修でお茶を濁そうと思う。
記事を公開した後に、違う不具合も見つけたので修正&追記
自力修正によってIPv6 IPSecVPNの設定が入る様になったが、
IPSecのIKEステータスを表示するとIKE SAが成立しているにも関わらず”down”と表示された。
$ show vpn ike sa | no-more
Peer ID / IP Local ID / IP
------------ -------------
2001:ffff:ffff:ffff::1 2001:0:0:0::1
State IKEVer Encrypt Hash D-H Group NAT-T A-Time L-Time
----- ------ ------- ---- --------- ----- ------ ------
down IKEv2 aes256 sha1_96 2(MODP_1024) no -5640
|
色々とバグっているが、コレの原因は内部処理でハッシュキーが参照出来なくなっている為。
具体的には、VyOSのライブラリでIPv6アドレス判定を10進数でのみ評価しており、
16進数は例外処理に投げ込んでしまう為、コマンド実行時にアドレス不一致で値を取れなくなる。
解消する為には、ライブラリのIPv6判定をちゃんと16進数も評価する様に作れば直る。
ただし、RFC準拠で厳密に判定するとソレだけでライブラリになるので、今回は最低限に留める。
修正前:[/opt/vyatta/share/perl5/Vyatta/VPN/OPMode.pm]
32 sub conv_id {
33 my $peer = pop(@_);
34 if ( $peer =~ /\d+\.\d+\.\d+\.\d+/ ){
35 $peer = $peer;
36 } elsif ($peer =~ /\d+\:\d+\:\d+\:\d+\:\d+\:\d+\:\d+\:\d+/){
37 $peer = $peer;
38 } elsif ($peer =~ /\%any/){
39 $peer = "any";
40 } else {
41 $peer = "\@$peer";
42 }
43 return $peer;
44 }
|
修正後:[/opt/vyatta/share/perl5/Vyatta/VPN/OPMode.pm]
32 sub conv_id {
33 my $peer = pop(@_);
34 if ( $peer =~ /\d+\.\d+\.\d+\.\d+/ ){
35 $peer = $peer;
36 } elsif ($peer =~ /\d+\:\d+\:\d+\:\d+\:\d+\:\d+\:\d+\:\d+/){
37 $peer = $peer;
38 } elsif ($peer =~ /^(\:)?([0-9a-zA-Z]\:){0,8}(\:)?/){
39 $peer = $peer;
40 } elsif ($peer =~ /\%any/){
41 $peer = "any";
42 } else {
43 $peer = "\@$peer";
44 }
45 return $peer;
46 }
|
38~39行目を追加。適当だが、最低限動作するからヨシ!
何処かのタイミングで、修正のフォーラム投稿にチャレンジするのも良いかもしれない。
« 続きを隠す