春雨日記 about me tags

Google Driveの無制限が終了するという噂を聞き,やはりオンプレストレージを整えるしかないと確信しました.

というわけで,HDD買うお金がなくて眠っていたProLiand DL160 Gen9をついに本番投入することに.

注意: 研究が忙しすぎて各所で詰めが甘いです.

でもまあメモ書きにはなってるので公開…

写真も何枚か撮ったんですがちょっとまとめる気力が沸かないのでここに1枚供養します

あとWireGuardはこっちでIPが分からないことが判明したので没にしてます. まねしないでね.

アーキテクチャ

まあそんな大それた物ではないのですが…

今回は性能に余裕ありありなので積極的にコンテナ化していこうと思います.これまでの貧乏鯖では全て単一システムで動かしていたためアプデが恐怖とかそういった問題点がありましたが疎結合にして被害を最小限にしていきたいです.

(図を書く予定だったが余裕無いので割愛, nspawn用LANを作って流す感じです)

サーバーはこんな感じです.

シリーズ ProLiant DL160 Gen9
CPU Xeon E5-2650 v3
メモリ 16GB ECC Registered
NIC I350(2ポート)
VGA Matrox G200EH(笑)
遠隔 iLO4 Advanced✨

ヤフオクで7千円ぐらいで買いました.送料入れても万超えてないです.

買ったときはメモリ8GB,HDD500GB(数万時間選手),Xeon E5-2603v3の貧弱構成だったのでヤフオクメモリとAliexpressのXeonに交換してあります.

今って2650v3が$29で買えるんですよ.凄すぎない

ProLiantのGen9シリーズでもCPUメモリなしのベアボーンみたいな状態の物が5000円以下で買えるので中華Xeonと適当なメモリ入れてサーバーにするのおすすめです.おそらく5年保守落ちで大量に出てきてるんだと思います.

まだEoLから1年経っていないので色々入手できますし,iLOはHTML5に対応した更新が出てるのでモダンなサーバーが体験できます.

ただしAdvancedなキー入ってないと遠隔KVMは使えなかったりするので注意.私が買った物はキー入ってるしFWが(当時の)最新になってるし良かったです.

ホストをUbuntuにする意味ですが,hp-amsがdeb系かrpm系にしか配布されておらず,またArchだと更新が多すぎてホストとして不適ではないかと考えたためです.

プロプラサーバーだとこういうのが面倒すぎて保守組む以外ありえない気がします…

あと,DL160で注意してほしいのがRAIDコントローラであるB140iが終わっている事です.公式パッケージはUbuntu14.04.1までのサポートしかなく,Ubuntu14系はサポートがありますがカーネルが4.xになっているため実質使用不可です.

こいつがないとファンが(メッチャ)煩くなる等の家サーバー的には割と致命的な状態になるので注意してください.ど田舎の鳥1匹に一部屋あるような家にはあまり関係ないですが…

まあ,B140iはドライバベースのソフトウェアRAIDらしいので,パフォーマンス的にはLinuxのmdとあまり変わらないんじゃないかなと思います.EFIの設定からAHCIモードにするとC610の標準SATAコントローラが見えるようになるため,特に問題なくセットアップできるはずです.RAIDモードにしておくとSMARTが見えなくなるのでそういう意味でも使用しない方がいいでしょう.普通はIntelligent Provisioningで"ちゃんと"見るんでしょうが…

OSインストール

普通にUbuntu20.04 LTSを入れます.RAIDはお好みで.

私は新品TOSHIBA+新品Seagate+3年選手Seagate(いずれも4TB)でRAID5としました.

Ubuntuのインストーラーからポチポチで設定できるので非常にお手軽ですね.トラブったときどうなるかわかりませんが…

セットアップ後やること

  • netplanを止める
  • systemd-networkd
  • amsd
  • Mirakurunインストール
  • Nginxインストール
  • WireGuardインストール
  • systemd-nspawn構築

netplanを止める

nano /etc/netplan/00-installer-config.yaml

1
2
3
4
5
6
7
8
9
# This is the network config written by 'subiquity'
network:
#  ethernets:
#    eno1:
#      dhcp4: true
#    eno2:
#      dhcp4: true
  version: 2
  renderer: networkd

netplan generate

netplan apply

amsdインストール

ライセンスNGな気がするので大きく書かないですが,librpmを入れてrhel8用のパッケージをバラして入れると最新版が動きます.

WireGuard

v4でグローバルIPを使うと家からアクセスできないのでv4のみVPSを経由するようにします.

DNS設定はAをVPS,AAAAをサーバーのv6アドレスとしておきます.

VPS側

[Interface]
PrivateKey =
Address = 172.16.0.1/32

[Peer]
PublicKey = 
Endpoint = 家のIP:ポート
AllowedIPs = 172.16.0.2/32
PersistentKeepalive = 25

家側

[Interface]
PrivateKey = 
Address = 172.16.0.2/32
ListenPort = ポート

[Peer]
PublicKey = 
AllowedIPs = 172.16.0.1/32

※VPS側にて,firewalld使用,外向きのzoneはpublic

1
2
3
4
5
6
7
8
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --add-interface=wg0 --zone=internal --permanent
firewall-cmd --add-masquerade --zone=internal --permanent
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=172.16.0.2 --permanent
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=443:toaddr=172.16.0.2 --permanent
firewall-cmd --reload

これでWireGuardインターフェイスに転送されるようになります.

家側は普通にwg0にzoneを割り当てて許可すればOK.セキュリティを気にしないなら割り当てすら必要ないですが.

あとルーターでWireGuardを許可するのとv6を通過させる設定をお忘れなく.

curl -4 example.comでつながったら大丈夫です.

余談:安いからといってWebArena indigoを使うと一瞬でDoS判定されて通信できなくなります.しかしUDP側は素通しなのでWireGuardは繋がったままという…

コンテナ構築

内部ネットワーク作成

ブリッジ作成

nano /etc/systemd/network/br0.netdev

[NetDev]
Name=br0
Kind=bridge

nano /etc/systemd/network/br0.network

[Match]
Name=br0

[Network]
Address=10.0.100.1/24
#環境に合わせる
DNS=192.168.1.1
Gateway=192.168.1.1

systemctl restart systemd-networkd でbr0が現れます.

firewalldでマスカレード設定

ルーターにつながっているインターフェイスをeno1でzoneはpublic,ブリッジのzoneはinternalとします.

1
2
3
4
5
6
7
8
firewall-cmd --zone=internal --add-interface=br0 --permanent
firewall-cmd --reload
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=internal --add-masquerade --permanent
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eno1 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o eno1 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eno1 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
firewall-cmd --reload

感謝: https://www.server-world.info/query?os=CentOS_7&p=firewalld&f=2

コンテナ作成

インストール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
cd /root
wget https://mirrors.cat.net/archlinux/iso/2022.01.01/archlinux-bootstrap-2022.01.01-x86_64.tar.gz
tar xvf archlinux-bootstrap-2022.01.01-x86_64.tar.gz
mkdir -p /var/lib/machines/arch
mount --rbind /var/lib/machines/arch root.x86_64/mnt/
root.x86_64/bin/arch-chroot root.x86_64/
pacman-key --init
pacman-key --populate archlinux
pacman -S archlinux-keyring
pacstrap -c /mnt base nano
umount root.x86_64/mnt/
exit

設定

1
2
3
4
systemd-nspawn -D /var/lib/machines/arch/
passwd
rm /etc/securetty
rm /usr/share/factory/etc/securetty

nano /etc/pacman.conf

NoExtract   = usr/share/factory/etc/securetty etc/securetty

nano /etc/systemd/network/10-host0.network

↑80-にhost0の設定があるのでそれより前にする

[Match]
Name=host0

[Network]
Address=10.0.100.2/24
Gateway=10.0.100.1
DNS=192.168.1.1

systemctl enable systemd-networkd

起動

(ホストで) nano /etc/systemd/nspawn/arch.nspawn

[Files]
Bind=/var/data
[Network]
Bridge=br0

systemctl enable --now systemd-nspawn@arch

ちゃんと動いてるか確認してみます.

machinectl login arch

ログインしてちゃんと動いててたらOK.アプリケーションをインストールしましょう.

今のところGiteaとJellyfin入れてます。

めちゃめちゃおすすめです。