VMのPi-holeをLXCのPi-holeへ移行する

2024/04/29に公開

Pi-holeの環境移行

現在家庭内で内部DNS兼DNSキャッシュサーバとしてPi-holeを利用しています。
作ったときは考えなしにVMで作成してしまったけれど、明らかにオーバースペックで勿体ないためLXCで動作させようと思います。
環境としてはproxmox上にコンテナを立ち上げてデータをコピーした後入れ替える想定です。
世間ではUbuntu24.04が出ていますが、今回は古い方で構築します。

バージョン

今回検証しているバージョンは以下の通り。

ProxmoxVE
pve-manager/7.4-17/513c62be
pve-manager/8.1.3/b46aac3b42da5d15

Ubuntu22.04.3
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

debian_version
12.4

Pi-hole
  Pi-hole version is v5.17.2 (Latest: v5.17.2)
  AdminLTE version is v5.21 (Latest: null)
  FTL version is v5.23 (Latest: v5.23)

コンテナの作成

新たに移行するためのPi-hole入りのLXCを作成します。

コンテナテンプレートのダウンロード

コンテナテンプレートをダウンロードします。
Proxmox UIからノードを選択-> テンプレートを保存したいストレージ -> CTテンプレート -> テンプレート
で使いたいテンプレートをダウンロードします。
Section:System と言うのから Debian Ubuntu辺りをダウンロードします。

コンテナのデプロイ

GUI右上のCT作成からウィザードに従ってコンテナを作成していきます。
Pi-holeの設定値は公式docを参考に[1]

ノード:入れたいノード
CT ID: 自動で振られるモノでもOK 
ホスト名:好きな名前で 内部の名前は変えることもできる  
非特権コンテナ:特権が必要なモノ以外はチェックしておくことを推奨  
ネスト:中でコンテナを建てられる  
リソースプール: コンテナのリソースプールを作成していれば  
パスワード:rootユーザのパスワード  
SSH公開鍵:クライアントマシンのものを指定していればログインできる、後で投入も可

テンプレートは先ほどダウンロードしてきたものから、使いたいイメージを選択します。

ディスク
ストレージはコンテナを建てたいノードのモノか、共有ストレージに
共有ストレージにするとライブマイグレーションが高速でできる
ディスクサイズは4GBにした  

CPU
1コアで十分だけれど2コア割り当てした

メモリ
要件では512MBとあるのでそれで 少し余裕持たせて1GB確保 SWAPは無しとした

ネットワーク
各自に合わせて
DHCPサーバーを別途建てていて制御できるのであればDHCPで良いけれどそうでないのであればStaticで設定

DNS
特別な事が無ければホスト(Proxmox)に準じる設定でOK

ここまで設定ができればコンテナの初期設定が完了、2分ほどでコンテナ作成が完了するはずです。
コンテナが立ち上がるまで少しかかるので待ってコンソール接続しましょう。

コンテナ初期設定

最初はまっさらな状態なのでPi-holeを入れるための設定をしていきます。

LXC
hogeユーザを作成して、sudogroupに追加
# adduser hoge
# usermod -aG sudo hoge
管理用パッケージのインストール、再起動
# apt update
# apt install git sudo
# apt upgrade -y
# reboot

Pi-holeのインストール

SSHで外部からコンテナにhogeユーザでアクセスできたらPi-holeの設定に移っていきます。

lxc
インストールスクリプトでインストールします。
$ git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
$ cd "Pi-hole/automated install/"
$ sudo bash basic-install.sh

固定IPにしなさい、やらアップストリームDNSサーバの設定等つらつら進めていくとセットアップ完了画面が出てきます。
ココのパスワードが初期パスワードですが、覚えにくいし忘れがちなので変えておいても良いかもしれません。
$ sudo pihole -a -pでパスワード変更ができるのでやっておきましょう。

WEBUI接続

念のためWEBUIでログインしておきます。
設定したhttp://IPアドレス/admin/login.phpへアクセスしログインします。
ここまででLXCでコンテナ作成は終わりです。

Pi-hole設定のコピー

本題のPi-holeの設定コピーをします。
と言っても、公式のGUIからできるのですが。
ちなみにCUIからバックアップをすることはできますが、復元する方法はありません。[2] 本当のところは、CUIで作成したバックアップを適当な位置に展開すれば多分できるでしょう。
WEBUIからSetting -> Teleporter -> Backup で必要なデータを纏めたtar.gzファイルがダウンロードできます。
これを移したいPi-hole上でRestoreすればOKです。
同じくWEB UIから Setting -> Teleporter -> Restore でRestoreしたい項目を選択し、復元ファイルを指定してRestoreで復元できます。
その後Pi-holeサーバを再起動すればOK。

IPアドレスの切り替え

既存サーバからの切り替えなのでIPアドレスを付け替える必要があります。
LXCコンテナ内の設定ファイルを弄る、のではNGでProxmoxのUIから設定変更が必要です。
それに伴い名前解決が一時できなくなりますので、作業時は余裕を持ってメンテナンス時間をとりましょう。

  1. 旧DNSサーバの停止
    旧サーバをシャットダウンしておきましょう。
    ただシャットダウンしておけば、何かあったとき戻せますからね。

  2. 新DNSサーバのIP付け替え
    IPを付け替えるためにコンテナを一度シャットダウンします。
    GUIから ネットワーク -> NIC -> 編集で静的IPを変更 -> OK
    その後コンテナを起動します。

  3. WEBGUIから確認
    切り替えた後サーバが立ち上がりWEBGUIにログインします。
    他端末からクエリーが飛んできていれば切り替え成功です。
    検索も試してみて、問題なく検索ができればOK。

これでPi-holeサーバの切り替えが成功です。

Pi-hole on DHCPサーバ

DHCPサーバとして運用していた場合、設定は引き継がれていません。
手動で設定し直すか、設定ファイルをコピーする必要があります。

設定ファイル

DHCPサーバ用の設定はここにあります。

内部DNS

後で追記するかも。

オマケ Debian12のsyslog

Debian12 のコンテナイメージを今回使ったけれど、Debian12 で標準構成でインストールするとどうやらrsyslogが入っていないらしいです。[2:1]
と言うわけでSyslog Serverにログを送信するためにはインストールが必要です。

syslog
$sudo apt install rsyslog  
$sudo vim /etc/rsyslog.conf
~~~~
*.* @SYSLOGSERVERIP:PORT
$sudo systemctl restart rsyslog

とすれば、良いでしょう。

脚注
  1. https://docs.pi-hole.net/main/prerequisites/ ↩︎

  2. https://www.debian.org/releases/bookworm/ppc64el/release-notes/ch-information.ja.html ↩︎ ↩︎

Discussion