vps バックアップ

baculaでバックアップのままの設定だと外部のバックアップが取れない。
と言うのも、Firewallの外から内部にアクセス出来ないからだ。
あろうことか、Bacula File Daemonはこれをやろうとする。いや、やろうとしてもどういう設定にして良いのかわからないはずだ。

NATだからローカルIPアドレスを設定すればいいの?
てか、そもそも動的IPだとFile DaemonからSorage Daemonにアクセスする為にちょこちょこIPアドレスを書き換えないといけないじゃん!
あっ、グローバルIPに書き換えたらLAN内のバックアップが取れないじゃん!!

なんて事にはならず、普通はVPNを張ったりするだろう。
ここでは(私は違うが)面倒くさがり屋の為に、VPN環境を構築せず既存の環境のままバックアップする方法を書く。

Contents

前提

  • VPSやレンタルサーバ、専用サーバなど、バックアップ対象がLAN内に無い。
  • 動的IPでインターネットに接続している。

※もちろんこれらの制約が無くても可。

事前準備

Storage Daemonに付ける適当なホスト名を考える。変な名前でなければなんでもOK。

鍵認証

パスフレーズ無しでログイン出来るようにする。
vipwでbaculaユーザを一時的にログイン可能にして公開鍵認証を新たに設定するか、既存ユーザの.ssh配下をbaculaユーザのホームディレクトリにコピーしてオーナーを変える。

なお、ポートフォワードやトンネリングは良く行なわれているが、以下の設定ではこの逆(リバース)を行なう。

ディレクタのStorage設定

bacula-dir.confの該当するStorageのaddressを事前準備で考えたホスト名に変える。
Webminでは、左カラムの「Bacula Backup System」→「Storage Daemons」→該当ストレージ名→「Hostname or IP address」にStorage Daemonに付けるホスト名を設定する。

vbacula01
vbacula02
vbacula03

baculaサーバ側の名前解決

bacula Storage Daemin(LAN内/ローカル)のサーバのhostsや内向きDNSにIPアドレスと考えたStorae Daemonのホスト名の設定を行う。
hostsの場合は

のフォーマットで記述する。

baculaクライアント側の名前解決

bacula File Daemin(WAN/リモート/VPSやレンタルサーバ)側のサーバのhostsにIPアドレスと考えたStorae Daemonのホスト名の設定を行う。

のフォーマットで記述する。

上記の設定で各々Storage Daemonは自セグメント内にある事になる。
が、当然このままだとStorage Daemonが別なので、VPS側のバックアップは取れない。
これを同一にするためリバーストンネリングを行う。

リバーストンネリングを行うスクリプトの作成

Storage Daemonサーバにリバーストンネリングするshellスクリプトを作成する。

スクリプトの登録及び終了処理の登録

webminで「Bacuup Jobs」→「Add a new backup job」→「Command before job」に作成したスクリプト「/etc/bacula/reverse_port.sh」を、「Command after job」に「pkill -f ‘ssh -fNtR 9103’」を登録する。

これで

  1. リバーストンネリング作成
  2. Fire Daemonが自分自身のローカルのポートにバックアップデータを書き出す
  3. リバーストンネリングによりLAN内のStorage Daemonにバックアップデータが流される
  4. pkillでトンネリングの削除

という流れになる。

チェック項目

  • リモート/ローカルそれぞれのファイアウォールは適切にポートが開けられているか?
  • 回線ルータの設定はローカルのStorage Daemonに流れるようNAT / PATの設定がしてあるか?

コメントをどうぞ

入力されたメールアドレスは公開されません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください