WAN越しのrsyncについて

Linuxでファイルのバックアップ・同期といえばrsync。
マシン内かローカルネットワーク内ならばセキュリティも何も考えずにrsyncすればよい。
じゃあ遠隔地へWAN越しならばどうか。

Linux機でファイルサーバのWAN越しのバックアップを考えるとき、まず真っ先に考えるのはrsync over sshだろう。
しかしsshを外部に開放する必要があるため、なんとなく怖いと思うのが普通だ。ssh認証でパスワードログインを有効化していたりしたらもう怖すぎである。
そこでsshを鍵認証のみにすれば、ほぼセキュリティは安心だろう。さらに鍵認証ならばsshコマンドでパスワードを聞かれないため、バックアップジョブとしてcron等で自動化できて一石二鳥。
普通のLinux通しの同期ならば、これで条件はすべて満たせて解決である。

さて、それでは片方が普通のLinuxではないNAS製品だったらどうだろうか。例えばQNAPのNASである。自宅のLinux機と遠隔地のQNAP機をどうやって同期すればいいのだろうか。
QNAPにも標準でrsyncやらsshやらが入っている。WEBコンソールからrsyncやrsync over sshっぽいのが使えるようになっているが、問題はsshが自分も相手も鍵認証を使えないこと。
sshでログインしてガチャガチャ改造っぽいことしないと鍵認証とかrsyncとか使えそうにないのである。やり方は知らないし、改造してもできないかもしれない。さらに改造した鍵認証sshをWEBコンソールのrsync画面から使えるかは不明。というかたぶん無理。
さらにQNAPのrsyncはローカルからリモートへのPUSH方式しかサポートしていない。PULLできない。割と致命的だったりする。
そしてアップデートのたびに仕様変更や改造部分の動作不良におびえることにもなる。

これらの残念な仕様を考慮し、我が家の自宅Linux機と遠隔地QNAPとの同期は、rsync over openvpnとすることにした。
といっても、そんなコマンドがあるわけではなくて、単にrsyncの前にopenvpnでLinuxからQNAPに接続(Linux側がクライアント)した後に、Linux機から普通にrsyncするということ。
QNAPにはopenvpnのサーバとクライアント機能があるが、遠隔地アクセスのためのサーバとしたかったので、QNAPはopenvpnサーバとする。Linuxはなんでもできるので、openvpnクライアントとしてつないだ後にrsyncでPULL・PUSHでデータ同期すればいいのだ。
ちなみにQNAPのopenvpn機能も貧弱で、接続ユーザごとに配布IPアドレスを固定できないため、openvpnでつないだ後にQNAPからLinuxにアクセスしようとすると、LinuxのIPアドレスが毎回変わるので自動化が不可能という罠がある。PUSHしようにも相手が不明というわけだ。QNAP(サーバ側)のIPアドレスは固定なので、Linux側からなら安定して接続が可能。
そしてrsyncするときはrsync over sshではだめ。なぜならsshが鍵認証にできず、自動化できないため。なのでrsync://とかいうマイナーなのをコマンドで使うことになる。

このやり方が完成するのにずいぶん時間がかかってしまった。