【CentOS8/rear】IPoE接続のNASにVPSサーバのイメージバックアップを取得する

2022年8月3日

 なんとなく現在VPS上で動作しているサーバのカーネルをkernel-mlに変更したくなり、その前にどうにかしてサーバのバックアップを取得できないかと考え、実行した結果をまとめています(なお、バックアップはカーネル変更後に取得しましたとさ)

環境について

 ざっと現在の構成を上の図にしていますが、現在の構成としてはインターネットへの接続にWMC-DGST2-Wを使用したIPoE接続を使用している。
 IPoE接続はインターネット接続の高速化が期待できるが、仕組み上IPv4アドレスへのアクセスを行うためにv6/v4変換を行っている。この機能による影響として、利用者側に払い出されるグローバルIPアドレスが従来のPPPoEのように1IPアドレスを占有するものではなく、1つのIPアドレスを複数人で共有している。
 この仕様により、IPoE接続のLAN側ではWEBサーバやメールサーバのような予約されたサービスポート(~1024/TCP・UDP)を使用したサーバをそのままのポートで外部に公開することができない。
 一方で、各利用者ごとにほぼ固定された公開サービスに利用可能なポートが存在し、待ち受けポートをそのポートに変更することで一応LAN内のサーバを外部に公開することができる。
 今回は後述のrearの使用からNASのSSHの待ち受けポートを公開可能なポートに変更することで対応する。

rear(Relax-and-Recover)について

 まずはバックアップを取得するためのソフトウェアの設定となるが、有償製品であればeasyusとかAcronisあたりのバックアップソフトが候補となりますが、そこまでお金をかけず、というかタダで取得したいのでパッケージでRelax and Recover(rear)を使用する。無料ながらシステムレスキューISOも作成できて同一HWへの復旧については非常に便利。
 ただ、このソフトは設定ファイルにマウント先を指定しておけばバックアップ先としてリモートのデバイスを自動でマウントしてくれるのですが、便利に使用できるcifsとnfsが上述のネットワークの制限で使用不可能。
 そのため、rearでリモートのデバイスをマウントするのではなく、あらかじめリモートのデバイスをマウントしておき、そのデバイスにrearでファイルを書き出すという方法を選択。
 NASとサーバ側で共通に使用できるマウント方法はSSH/FTPだったので、今回はSSHFSを使用する。
 rearはEPELのパッケージなのでEPEL導入後、dnf install rear でインストール。
 その後、/etc/rear/local.confのバックアップをとっておき、編集する。

OUTPUT=ISO
OUTPUT_URL="file://<マウントしたデバイス内のファイル保存場所のパス>"
BACKUP=NETFS
BACKUP_URL="file://<マウントしたデバイス内のファイル保存場所のパス>"

 あらかじめNASをマウントする想定なので、レスキューイメージとバックアップデータの出力先はファイルパスを指定しています。

NASの公開

 rearの準備ができたので、NASを公開する準備をする。
 まずは、使用できるポートを確認するために、自身のグローバルIPv6アドレスをhttp://test-ipv6.com/index.html.ja_JPにアクセスして確認する。
 次にhttp://ipv4.web.fc2.com/map-e.htmlなど、払い出されたIPv6アドレスから使用可能ポートを計算してくれるサイトにアクセスし、先ほど確認したIPv6アドレスを入力して計算し、表示された利用可能ポートから1つのポートを選択する。
 その次に、NASの管理画面からSSHの設定を開き、待ち受けポートを変更。
 そして、IPoEルータの管理画面からポートフォワードの設定を開き、選択したポートとNASのIPをフォワード設定に追加する。
 なお、マウント作業に当たり、注意事項。今回使用したAsustorのNASではSSH接続できるのがrootか管理者グループのアカウントに制限されているため、マウント時に使用するアカウントはそれらのアカウントとなる。
 また、実際のマウント時に必要となるグローバルIPアドレスについては確認くん等を使用して確認する。

sshfsでのマウント

 NASの公開が完了したら、実際にマウント。
 まずは適当にマウント用のフォルダを作成(例では/mnt/nasを作成)
 そして、sshfsのインストール。dnf install sshfs でインストール。
 そして実際にマウントを実施。

sshfs <アカウント>@<接続先IPアドレス>:<マウントしたいディレクトリのパス> <サーバのマウント先> -o Port=<選択した利用可能ポート>

 正しく通信できればアカウントのパスワードを要求されるので、パスワードを入力する。
 なお、自分の環境だけだけかもしれないが、この方法でマウントしたリモートのNASの状態はdfコマンドでは見えなかったので、実際にマウント後のデバイスにアクセスして確認する。
 また、バックアップ先のフォルダについてだが、実際にはさらにホスト名のフォルダを作成し、そこにデータを保存する。そのため保存先フォルダにフォルダを作成するだけの権限がないとバックアップに失敗するので、マウント後に保存先フォルダの所有者をrootにしてしまうかパーミッションを777にするかしておく。

バックアップの実行

rear -v mkbackup

 上記のコマンドを実行して、バックアップを実施する。なお、自分でやった場合の転送速度は5.6MB/Secで、バックアップ完了まで3時間程度を要した。また、バックアップがある程度進行するまでCPUの負荷が高くなることを確認(負荷自体は20分ほどである程度のレベルに落ち着いた)。

完了後の事後処理

 バックアップが完了したら、データが保存された場所に移動し、ファイルが作成されていることを確認する。レスキュー用のISOイメージとバックアップデータのtar.gzファイルがあればとりあえず完成。
 なお、これらのファイルのパーミッションは600となっており、そのままNASで表示すると何らかの操作をすることはほぼできなくなる。そのため、NAS上でファイルに対して作業を行うつもりであれば、パーミッションを適宜変更する。
 その後、以下のコマンドを実施してマウントを解除する。

fusermount -u /mnt/fs

 マウント解除が完了したら、IPoEルータの管理画面よりポートフォワード設定を削除する。その後、NASの管理画面よりSSH接続をもとの状態に戻す。

 とりあえず、このような手順でバックアップが取得できた。