はじめに
ネットにつながっていない機器上でUSBドライブに保存したデータを簡単に遠隔のサーバーにアップロードする必要があったため、作りました。
動作環境
- ファイルを受け取る側
- Windows 10 (ソースコードを修正すれば*nixでも使える)
- ネットワークにつながっていること
- 共有フォルダを作る権限
- Softether VPNサーバー
- ファイルを送る側
- Raspberry Pi 3 (通常のPCでも問題ない)
- Raspbian
- ネットワークにつながっていること
- Raspberry Pi 3 (通常のPCでも問題ない)
動作概要
- Raspberry PiにUSBドライブを挿す。すると、VPN経由で遠隔の場所にあるCIFSディレクトリに、USBドライブの中身がrsyncによって同期される。
- 構成
- autofsはUSBドライブをマウントする用途で用いる
- マウント先を選ぶことができる
- udevはUSBドライブマウント時に同期用のスクリプトを実行する用途で用いる
- cifs-utilsは遠隔のCIFSディレクトリをマウントする用途で用いる
- softether-vpnは遠隔のネットワークのCIFSディレクトリにアクセスする用途で用いる
- systemdは以上の内容をサービスとして登録し、起動時に自動的に立ち上がるようにする用途で用いる
- autofsはUSBドライブをマウントする用途で用いる
環境構築
以下の手段はRaspberry Pi上で行う。Windows上ではSoftether VPNサーバーの構築を行う。
インストール
sudo apt install git, autofs # gitとautofsをインストール
git clone https://github.com/rayanti/usb_sync.git # githubのリポジトリ(当プロジェクト)をクローン
sudo cp {auto.master,auto.misc} /etc # autofsのファイルを/etcにコピー
sudo cp 1-usb.rules /etc/udev/rules.d # udevのファイルを/etcにコピー
静的ルーティング
- 以下のファイルをコピーし、各自の環境に合わせて設定する
sudo cp 40-route /lib/dhcpcd/dhcpcd-hooks/
Softether vpncmdインストール
vpncmdはSoftether VPNのコマンドラインツールである
- https://www.softether-download.com/en.aspx?product=softether で必要なファイルをダウンロードする
- ターミナル上で以下の手段にしたがって、環境の設定を行う
tar xzvf vpnserver-5070-rtm-linux-x86.tar.gz
cd vpnclient
make
#(1,1,1)
sudo ./vpnclient start
./vpncmd
#(2," ")
PasswordSet
RemoteDisable
NicCreate
#VPN
AccountCreate
#{account name}
AccountPasswordSet
#standard
AccountConnect
AccountStartupSet
quit
cifs-utilsの設定
共有フォルダを閲覧する権限のあるwindowsユーザーのログイン情報を入力する。これにより、Windowsの共有フォルダをLinux上でマウントすることができる。
cifs-credientials
にはパスワードを保存するため、rootユーザー以外から見えないようにする必要がある。
sudo apt install cifs-utils
sudo chown root: /home/pi/usb_sync/cifs_credentials
sudo chmod 600 /home/pi/usb_sync/cifs_credentials
vpncmdを自動起動するサービスに登録する
systemdのサービスとして登録する。
sudo cp vpnserver.service /etc/systemd/system/
sudo cp vpn_dhclient.service /etc/systemd/system/
systemdサービスを自動起動するように設定
startで起動、enableでスタートアップ時自動起動する
systemctl daemon-reload
systemctl start vpnserver
systemctl enable vpnserver
systemctl start vpn_dhclient
systemctl enable vpn_dhclient
systemctl start cifs_mount
systemctl enable cifs_mount
各自の環境に合わせて設定する項目
-
nmtui
でipアドレスの固定 -
40-route
でルーティングの設定 -
1-usb.rules
内で用いるUSBドライブのUUIDの設定
付録
automountが行われない場合
autofsのファイルは実行可能な権限を持っていると動かないため、以下のコマンドを実行
sudo chmod -x /etc/auto*