Conohaと自宅鯖をVPNでつないで大容量ストレージサーバーを構築した話

クラウドサーバーで大容量のストレージサーバーを構築すると料金がバカにならない。
かなり安くそれもそこそこ早い回線でストレージサーバーを構築できないかと考えて思い付きでやってみたらできた話。

WEBサーバーはApache、PHP、MariaDB、Owncloud
VPNサーバーはsoftether
両サーバーともCentOS7で構築。

#環境
Conoha(512MBプラン）　×２
自宅鯖（非固定IP・NTT東日本管内）
私はもともと構築していたアクティブディレクトリ鯖とストレージサーバーが別なので2台（AD鯖は仮想）使っているが、一つでも構わない。
自宅インターネットはIPoEに対応したギガライン環境（IPv6）
今回の内容はIPv6（NGN)がないと現実的ではないので注意。（クラウドと自宅間を高速通信させる必要があるため）
IPv6オプションを申し込んでるだけでもできるのかもしれないけど、環境がないのでわからない・・・

WEBサーバーとVPNサーバーはconohaのプライベートネットワークを構築して、1Gbpsで安定したサーバー間通信を行う。
WEBサーバー：10.0.0.1/24
VPNサーバー：10.0.0.2/24
で設定しているがネットワークアドレスが重複しなければ何でも構わない。

#各サーバーの役割
サーバー別に簡単に役割を書いておく

##Conoha（Webサーバー）
ただのWEBサーバー。
https://qiita.com/salt_field/items/31acb1cbb707102e0702
当方のWEBサーバーはここで書いたようにバーチャルドメイン対応している。

##Conoha（VPNサーバー）
Softetherを導入したVPNサーバー
WEBサーバーと自宅サーバーを繋ぐ為に導入。
WEBサーバーと別な理由はポートが被るから。VPNで443ポート使わなければ一緒にできるけど、softetherを使うならSSL-VPN(VPN over https)を使わないとメリットが激減する。（と思う）

##自宅鯖（ストレージサーバー）
ただのwindowsサーバー。
別にwindowsサーバーである必要もない。
NASでもLinuxでもwindows10でもwindows7でもなんでも構わない。
ただフォルダを共有しているだけのサーバー。
windowsサーバーな理由は稼働しているサーバーが転がっていたから。ただそれだけ。
windowsサーバーを買うと高いので、windows系でやりたいんだ！って人はhyper-v Serverで共有フォルダ作ればいいと思う。サーバーOSだから安定して使えると思う。
ちなみにこの辺からダウンロードできる。
https://www.microsoft.com/ja-jp/evalcenter/evaluate-hyper-v-server-2016

##自宅鯖（ADサーバー）
だいぶ前に構築してそのまま放置していたADサーバー。
今回はWEBサーバーの認証をLDAPで行いたいので使用する。
LDAPを使用しないなら不要。

#構築

ここではOwncloudをドメイン「cloud.test.com」でアクセスする。

##WEBサーバー
WEBサーバーはこちらをもとに構築する。
Wordpressは導入しなくても良い。
https://qiita.com/salt_field/items/31acb1cbb707102e0702

##VPNサーバー
Softetherを導入する。
まずはダウンロード
最新版はこちらで確認
http://jp.softether-download.com/files/softether/

ちなみに2018/04/07現在での最新はこちら。
http://jp.softether-download.com/files/softether/v4.25-9656-rtm-2018.01.15-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz

```
#wget http://jp.softether-download.com/files/softether/v4.25-9656-rtm-2018.01.15-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz
```

wgetコマンドがない場合は

```
#yum install wget
```

でコマンドをインストールする。

コンパイルにGCCが必要なので先にインストールする。

```
#yum install gcc
```


ダウンロードしたファイルを解凍する。

```
#tar xvfz softether-vpnserver-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz
#cd vpnserver/
#make
```

コンパイルが完了したらディレクトリを移動する。

```
#cd ..
#mv vpnserver /usr/local/
#cd /usr/local/vpnserver
```

サービスを登録する。

```
#vi /usr/lib/systemd/system/vpnserver.service

[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target
```

```
#systemctl daemon-reload
#systemctl enable vpnserver
#systemctl start vpnserver
```

ポートを開放する

```
#firewall-cmd --add-service=https --zone=public --permanent
#firewall-cmd --add-port=992/tcp --zone=public --permanent
#firewall-cmd --add-port=1194/tcp --zone=public --permanent
#firewall-cmd --add-port=5555/tcp --zone=public --permanent
#firewall-cmd --add-port=500/udp --zone=public --permanent
#firewall-cmd --add-port=4500/udp --zone=public --permanent
#firewall-cmd --reload
```

softetherの設定
SoftEther VPN サーバー管理をパソコンにインストールして、そこから設定を行う。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/155421/f24d3713-f46b-5cac-c1f9-c41a5b86a602.png)
新しい接続設定を押してセットアップする。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/155421/ca4ee9c8-9176-50cc-b5b9-0c931f86b5ec.png)
設定名：任意の設定名
ホスト名：VPNサーバーのアドレス又はドメイン
管理パスワード：空白
入力したらOKを押す。

設定した項目が出てくるのでそれをクリック。
初回はパスワードが設定されていないので、パスワードなしでアクセスする。
その後パスワードを新規設定する画面がでるので任意のパスワードを設定する。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/155421/2abf4ab5-996d-2c59-124d-74384cbb04b2.png)
アクセスするとこんな感じ。
仮想HUBの作成を押して仮想HUBを作成する。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/155421/e3ebacb9-b351-d16b-b515-10e146653f1b.png)
仮想HUB名：任意HUB名
パスワード：任意パスワード
WEBサーバーからのアクセス用と自宅鯖からのアクセス用のHUBを作成する。（計２つ）

![5.png](https://qiita-image-store.s3.amazonaws.com/0/155421/f7451b10-8142-0285-7a11-f0a8eb8b0dd1.png)
作成した仮想HUBにアクセスしてそれぞれユーザーを作成する。

![6.png](https://qiita-image-store.s3.amazonaws.com/0/155421/89ca4d78-a760-8f82-a3aa-7dc22dbd56f6.png)
新規作成

![7.png](https://qiita-image-store.s3.amazonaws.com/0/155421/053e479a-1c00-e5d0-00f4-0ffea89ca484.png)
ユーザー名：任意のユーザー名
パスワード：任意のパスワード
後で必要になるので忘れないこと
２つのHUBに対してユーザーを作成し終わったら続いて仮想L3スイッチの作成を行う。

![8.png](https://qiita-image-store.s3.amazonaws.com/0/155421/a19bc3f6-3cd9-f0f4-14a8-ae35ac8033e8.png)
新規作成

![9.png](https://qiita-image-store.s3.amazonaws.com/0/155421/1fb94fd2-fd11-b604-7d1d-3ab38ab838b7.png)
任意の名称を設定

![10.png](https://qiita-image-store.s3.amazonaws.com/0/155421/b712aa10-e37e-8851-0ab6-f9734cbe879c.png)
仮想インターフェイスを追加する。

![11.png](https://qiita-image-store.s3.amazonaws.com/0/155421/7659ea9b-fdc6-acd4-0ebc-e7da2b61ba94.png)
仮想HUBは先ほど作成したものを指定する。
<font color="Red">WEBサーバーとの接続用HUBのIPは自宅鯖のネットワークIPとは<strong>違うもの</strong>を指定する。</font>
<font color="Red">自宅鯖との接続用HUBのIPは自宅鯖のネットワークIPとは<strong>同じもの</strong>を指定し、<strong>自宅で使用していないIPにする。</strong></font>
例
（WEBサーバー用HUB)
IPアドレス：192.168.255.254
サブネットマスク：255.255.255.0
（自宅鯖用HUB)
IPアドレス：192.168.1.254
サブネットマスク：255.255.255.0

設定したら最後に「動作開始」を押して仮想L3スイッチを稼働させる。
これでVPNServerの構築は終わり。

##WEBサーバー（VPN接続設定）

VPNサーバーを構築したら、自宅に接続する用のVPN接続設定をWEBサーバーに構築する。

softether VPN Clientを導入
最新版はこちらを確認する。
http://jp.softether-download.com/files/softether/

2018/04/08現在の最新版はこちら
http://jp.softether-download.com/files/softether/v4.25-9656-rtm-2018.01.15-tree/Linux/SoftEther_VPN_Client/64bit_-_Intel_x64_or_AMD64/softether-vpnclient-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz

VPN Clientをダウンロードする。
wgetコマンドがなければインストールしておくこと

```
#yum install wget
```

```
#wget http://jp.softether-download.com/files/softether/v4.25-9656-rtm-2018.01.15-tree/Linux/SoftEther_VPN_Client/64bit_-_Intel_x64_or_AMD64/softether-vpnclient-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz
```
ダウンロードしたファイルを解凍する。

```
#tar zxvf softether-vpnclient-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz
```

VPN Clientをコンパイルする。
gccがなければインストールしておく。この辺はVPNServerと同じ

```
#yum install gcc
```

```
#cd vpnclient/
#make
```

コンパイルしたソフトを移動する。

```
#cd ..
#mv vpnclient /usr/local/
#cd /usr/local/vpnclient/
```

権限を変更する。

```
#chmod 600 *
#chmod 700 vpncmd vpnclient
```

softether client　起動時に仮想インターフェイスにIPを追加するshellスクリプトを追加する。
ここで指定するIPアドレスは、VPNサーバーのL3スイッチで作成したWEBサーバーとの通信用IPと同じネットワークアドレスにする。

```
# vi /usr/local/vpnclient/setting_ip.sh
      #!/bin/bash

      # case Static IP
      TAP_IF="vpn_tap1"

      # 30sec Loop
      for i in {1..30}
      do
          sleep 1
          ip tap | grep --quiet ${TAP_IF}
          STATUS=$?
          if [ "${STATUS}" == "0" ]
          then
              ifcfg  ${TAP_IF}  add  192.168.255.1/24(任意のIPアドレス)
              route add -net [自宅LANネットワークアドレス] netmask 255.255.255.0 gw 192.168.255.254
              break;
          fi
      done
      exit 0
```

実行権限を付与

```
#chmod 700 /usr/local/vpnclient/setting_ip.sh
```

VPN Clientをサービスとして登録する。
また起動時に先ほどのshellスクリプトを実行して、仮想インターフェースにIPを自動で付与するようにする。

```
[Unit]
Description=SoftEther VPN Client
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnclient/vpnclient start
ExecStartPost=/usr/local/vpnclient/setting_ip.sh
ExecStop=/usr/local/vpnclient/vpnclient stop

[Install]
WantedBy=multi-user.target
```

デーモンを再読み込みして、サーバー起動時に実行されるようにする。
ここではまだ起動させない。

```
#systemctl daemon-reload
#systemctl enable vpnclient
```

サーバーを単体で手動起動していろいろ設定をする。

```
#cd /usr/local/vpnclient
#./vpnclient start
#./vpncmd localhost /CLIENT
```

管理者用のパスワードを設定する。

```
>PasswordSet
```

リモート管理の禁止

```
>RemoteDisable
```

インターネット接続維持機能の無効化

```
>KeepDisable
>KeepGet
```

仮想NICの追加

```
>NicCreate  vpn_tap1
>NicList
```

アカウント作成

```
>AccountCreate  CloudVPN  /SERVER:10.0.0.2:443  /HUB:[VPNServerのWEBサーバーとのアクセス用HUB名]  /USERNAME:[サーバーのHUBに設定したユーザー名]   /NICNAME:vpn_tap1
>AccountList
```

パスワード設定と自動起動設定

```
>AccountPasswordSet CloudVPN  /TYPE:standard
>AccountStartupSet  CloudVPN
>AccountGet  CloudVPN
```

接続

```
>AccountConnect CloudVPN
>AccountList
```

状態が接続完了になっていればOK
一度停止して、サービスから起動しなおす。

```
#./cpnclient stop
```

```
#systemctl start vpnclient
#ip a
```

インターフェース「vpn_tap1」が追加されて、シェルスクリプトに記述したIPが割り振られていることを確認する。

仮想L3スイッチに通信できることを確認する。

```
#ping -c 4 192.168.255.254
#ping -c 4 [自宅鯖用HUBの仮想IFのIP]
```

WEBサーバーHUBの仮想IFに通信できて、自宅鯖HUBの仮想IFに通信できない場合は、ルーティング設定がうまくできていない可能性が高い。
WEBサーバーのルーティング情報を確認すること。

##owncloudのインストール

今回はyumでインストールする。

```
#wget http://download.owncloud.org/download/repositories/stable/CentOS_7/ce:stable.repo -P /etc/yum.repos.d
#yum install owncloud
```

Owncloud用のDBを作成する。

```
#mysql -u root -p
> create database [DB名]; 
> grant all privileges on [DB名].* to [ユーザー名]@'localhost' identified by '[パスワード]';
> flush privileges; 
```

自宅鯖にsoftetherのBridgeかServerをインストールする。
自宅鯖ネットワークにブリッジを作成して、VPNサーバー上の自宅鯖用HUBにカスケード接続する。
このあたりは公式ページにもやり方が乗っているので確認しながら設定するとよい。
需要があればVPN網構築部分だけ記事にするけど、需要あるのかな・・・
カスケード接続する際はIPv6を使用して設定すること。

自宅鯖の共有フォルダをマウントする。
自宅鯖はあらかじめ192.168.255ネットワークにアクセスできるようにルーティング設定を入れておく。
windowsの場合は次のコマンドで設定できる。

```
route -p add 192.168.255.0 mask 255.255.255.0 [自宅鯖用仮想HUBのIFのIP]
```

```
mount -t cifs -o user=[共有フォルダにアクセスできるユーザー],password=[パスワード],sec=ntlm,uid=48,dir_mode=0770 [共有フォルダのパス] [共有フォルダのマウント先]
``` 

Owncloudのサーバーにアクセスして初期設定を行う。
http://[ドメイン]/owncloud
データフォルダはマウントしたフォルダを指定する。
DB名・DBユーザー名・DBパスワードを入力する。

これでクラウドサーバー上に大容量のストレージサーバーが構築できた。

##引用
https://qiita.com/nobu-maple/items/4f61c19676133624d28f
https://qiita.com/ayihis@github/items/cff4d9f0306342f489b0
https://thinkit.co.jp/article/9772
http://www.unix-power.net/networking/post-734