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


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

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

環境

Conoha(512MBプラン) ×2
自宅鯖(非固定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 サーバー管理をパソコンにインストールして、そこから設定を行う。

新しい接続設定を押してセットアップする。


設定名:任意の設定名
ホスト名:VPNサーバーのアドレス又はドメイン
管理パスワード:空白
入力したらOKを押す。

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


アクセスするとこんな感じ。
仮想HUBの作成を押して仮想HUBを作成する。


仮想HUB名:任意HUB名
パスワード:任意パスワード
WEBサーバーからのアクセス用と自宅鯖からのアクセス用のHUBを作成する。(計2つ)


作成した仮想HUBにアクセスしてそれぞれユーザーを作成する。


新規作成


ユーザー名:任意のユーザー名
パスワード:任意のパスワード
後で必要になるので忘れないこと
2つのHUBに対してユーザーを作成し終わったら続いて仮想L3スイッチの作成を行う。


新規作成


任意の名称を設定


仮想インターフェイスを追加する。


仮想HUBは先ほど作成したものを指定する。
WEBサーバーとの接続用HUBのIPは自宅鯖のネットワークIPとは違うものを指定する。
自宅鯖との接続用HUBのIPは自宅鯖のネットワークIPとは同じものを指定し、自宅で使用していないIPにする。

(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