2017年9月10日日曜日

VPSとVPNで自宅のネットワークにアクセスできるようにした

ご無沙汰しています。

いろいろありましてバタバタしてブログを更新することができませんでした。

そんな中、インターネット回線完備の物件へ引っ越しました。これまではDDNSで自宅へアクセスできていたのですが、管理会社のルータを挟むことになったのでこれまでの方法では自宅へアクセスできなくなってしまいました。
また、引っ越しに伴い通勤で電車に乗っている時間が長くなりましたので通勤時間で自宅のPCにアクセスしていろいろ作業したいなと思っていました。(ノートパソコンではFPGAの開発はつらい...)

上記のような背景があり、VPSと自宅のサーバ(Raspberry Pi)を使って自宅のネットワークにアクセスできるようにしてみました。

■方法について考える
こちらの方を参考にさせていただきました。VPSでSoftEther VPNを使って自宅LANに外部から接続する
自宅のネットワークから外へは出ていけますので、自宅のサーバを使って外部のVPSへVPNを張ります。さらに外出先からVPSへVPN接続し、外出先から自宅へとアクセスします。

イメージとしては下記のとおりです。



VPNの仮想HUBと物理的なネットワークインターフェース(上図だとeth0)をブリッジすることで自宅ネットワークをVPNの仮想HUBに接続します。
VPNの仮想ハブは通常のスイッチングハブと同様に扱える(はず)なので、外部からこれにVPN接続することで自宅のセグメントへ組み込まれます。
自宅ネットワーク内にDHCPサーバがあるので、VPN Clientに自動的にIPが割り当てられます。(192.168.0.xx)




■構成
VPN Server : VPS (さくらVPS) CentOS7
VPS Bridge : Raspberry Pi 2  Raspbian
VPS Client : Windows10ノートPC
VPNはSoftetherを使用します。

■構築方法
概要は下記の通り
・VPSにVPNサーバを構築。仮想HUB一つのみ、適宜パケットフィルタリングの設定など
・上記の時に自宅のWindowsPC(RDPサーバ)にSoftether管理ツールを導入
・Raspberry pi にSoftether Bridgeを導入


【VPSにVPNサーバを構築】
既にVPSの初期設定は終わっているものとします。

SoftEtherダウンロードセンターからソフトをダウンロードしてインストールします。
 $ wget http://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz
 $ tar zxvf ./softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz
 $ cd vpnserver
 $ make
ここで選択肢がでますが、1を選んでおけばOKです。
 $ cd ..
 $ sudo mv vpnserver /usr/local/
 $ cd /usr/local/vpnserver
 $ sudo chmod 600 *
 $ sudo chmod 700 vpncmd
 $ sudo chmod 700 vpnserver
 $ sudo vi /etc/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

 $ sudo systemctl start vpnserver
 $ sudo systemctl enable vpnserver

あとはiptablesなどの設定でVPNで使用するポート(TCP 5555等)を開けておきます。
 
今回はGUIの管理ツールを使用します。
自宅のwindowsPCに SoftEther VPN Server Manager for Windowsをインストールします。
あとは仮想HUB一つ、bridge用(raspberry piからアクセスするためのユーザ、VPNクライアントからアクセスするためのユーザを作成します。
VPNサーバの設定については通常のVPNサーバと同じです。


【Raspberry Pi に VPN Bridge を構築】
こちらもサーバと同様に基本的な設定は終わっているものとします。
インストール手順はサーバの方とほぼ同じです。

SoftEtherダウンロードセンターからソフトをダウンロードしてインストールします。
 $ wget http://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Linux/SoftEther_VPN_Bridge/32bit_-_ARM_EABI/softether-vpnbridge-v4.22-9634-beta-2016.11.27-linux-arm_eabi-32bit.tar.gz
 $ tar zxvf ./softether-vpnbridge-v4.22-9634-beta-2016.11.27-linux-arm_eabi-32bit.tar.gz
 $ cd vpnserver
 $ make
 $ cd ..
 $ sudo mv vpnserver /usr/local/
 $ cd /usr/local/vpnserver
 $ sudo chmod 600 *
 $ sudo chmod 700 vpncmd
 $ sudo chmod 700 vpnserver
 起動スクリプトについてはこちらを参考にさせていただきました。
VPNでiPhoneからラズパイに接続する

 $ sudo vi /etc/init.d/vpnserver
下記を記述
#!/bin/sh
### BEGIN INIT INFO
# Provides:                 vpnserver
# Required-Start:           $local_fs $network
# Required-Stop:            $local_fs $network
# Default-Start:            2 3 4 5
# Default-Stop:             0 1 6
# Short-Description:        SoftEther VPN RTM
# Description:              Start vpnserver daemon SoftEther VPN Server
### END INIT INFO

DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver

# tun/tapモジュールのロード
sudo modprobe tun

. /lib/lsb/init-functions
test -x $DAEMON || exit 0

case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3

# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;

stop)
log_daemon_msg "Stopping SoftEther VPN Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2
;;

restart)
$DAEMON stop
sleep 2

$DAEMON start
sleep 5
# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;

status)
    if [ -e $LOCK ]
    then
        echo "vpnserver is running."
    else
        echo "vpnserver is not running."
    fi
;;
*)

echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0

 $ sudo chmod +x /etc/init.d/vpnserver
 $ sudo insserv vpnserver
 $ sudo reboot

VPN Serverの時と同様にWindowsマシンの管理ツールで設定を行います。
設定で重要なのは仮想HUBを一つ作り、VPSのVPNサーバ上の仮想HUBにカスケード接続すること、Raspberry Piの物理インターフェースeth0にローカルブリッジを設定することです。


【VPN Clientの設定】
上記の設定が完了した時点でVPSサーバにVPNを張れば自宅のネットワークに接続できます。
ただし、この時にはL2接続が必要となります。今回はOpenVPNのL2接続を行いましたが、L2TP/IPsecでも可能だと思います。

VPNを張った状態であれば自宅のLAN内と同様に扱えますので、外出先からRDPサーバにアクセスして作業したりということが可能となります。


--------------------------
意外と簡単に自宅LANへアクセスする環境を構築することができました。
これで外出先での作業が捗りそうです。
あと、中国出張のときでも自由にアクセスできるようになりますね!

Raspberry Pi はGbEに対応していないですし、ちょっと非力なのでゆくゆくはちゃんとしたサーバを導入したいところです。



0 件のコメント:

コメントを投稿