SoftEther を利用した VPN サーバの構築
どうも,筆者です.今回は,前回セットアップした Raspberry Pi 3 Model B を利用して,VPN サーバを立てた.何度か試してみた結果,ようやくうまくいったので,ここに記録しておく.
VPN に関しては以下のサイトを参考にした.
システムのアップデート
まずは,おなじみのシステムのアップデートを行う.
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade
初期設定
システムのアップデートが完了したら,初期設定を行っていく.まずは,swap 領域を無効にするため,以下のコマンドを入力する.
sudo swapoff --all # swap off にする sudo apt-get remove dphys-swapfile # swap 機能を無効にする.
次に,必要なエディタのインストールとその設定を行う.
sudo apt-get install -y vim # vim をインストール sudo update-alternatives --config editor # sudo で使用するエディタの設定をする.ここでは vim を選択 sudo vim /etc/vim/vimrc # vim の設定ファイルを修正する sudo ln -s /etc/vim/vimrc /root/.vimrc # 設定ファイルを root の .vimrc に反映 ln -s /etc/vim/vimrc ~/.vimrc # 同様に自分のローカルにも反映する
vim の設定ファイルに関しては,以前記事にしたので,そちらを参照のこと.
workspacememory.hatenablog.com
最後に,pi ユーザの変更とパスワードなしでの root 切り替えを無効にする設定を行う.これは,以下のサイトを参考にした.
sudo useradd -M tmp # 一時的なユーザ tmp の作成 sudo gpasswd -a tmp sudo # sudo 権限を付与 sudo passwd tmp # パスワードの設定 exit # 一旦抜ける ### tmp ユーザでログインする ### sudo usermod -l admin pi # pi ユーザのユーザ名を admin に変更 sudo usermod -d /home/admin -m admin # pi ユーザのホームディレクトリ名を admin に変更 sudo groupmod -n admin pi # pi ユーザのグループを admin に変更 exit # ログアウト ### admin ユーザでログインする ### sudo userdel tmp # tmp ユーザを削除 sudo passwd admin # admin ユーザのパスワードを変更 sudo rm /etc/sudoers.d/010_pi-nopasswd # パスワードなしで root 権限を取得で気ないようにするため,指定のファイルを削除
これで,自分の中では,初期設定は完了である.早速,本題の VPN 環境を構築していく.
SoftEther を利用した VPN 環境の構築
ここでは,VPN サーバの環境構築を行う.構築手順は,以下のようになる.
- bridge アダプタを利用可能にするため,bridge-utils をインストールする.
- softether のデータを Web からダウンロードして,インストールする.
- vpnserver をサービスへ登録し,自動起動する.
- Windows 側で VPN Server の設定を行う.
- ネットワーク環境の設定を行う.ここか一番ハマッた部分である.
- ルータ側でアドレス変換の設定を行い,外部から VPN サーバにアクセスできるようにする.
この順に処理を進める.
bridge-utils のインストール
vim のインストールと同様に,インストールするだけである.
sudo apt-get install -y bridge-utils
SoftEther のインストール
以下のサイトから,SoftEther をダウンロードしてくる.
それぞれ,選択肢を以下のように設定する.
- ダウンロードするソフトウェアを選択
- コンポーネントを選択
- プラットフォームを選択
- CPU を選択
- ARM EABI (32bit)
すべて選択すると,ダウンロード可能なファイルの一覧が表示される.今回は,
SoftEther VPN Server (Ver 4.24, Build 9651, beta) softether-vpnserver-v4.24-9651-beta-2017.10.23-linux-arm_eabi-32bit.tar.gz (5.40 MB)
をダウンロードした.wget コマンドを用いて,tar.gz ファイルをダウンロードする.
wget http://jp.softether-download.com/files/softether/v4.24-9651-beta-2017.10.23-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.24-9651-beta-2017.10.23-linux-arm_eabi-32bit.tar.gz
展開し,インストールを行う.
tar zxvf softether-vpnserver-v4.24-9651-beta-2017.10.23-linux-arm_eabi-32bit.tar.gz pushd vpnserver/ echo -e "1\n1\n1\n" | make popd sudo mv vpnserver/ /usr/local/ pushd /usr/local/vpnserver/ sudo chmod 600 * sudo chmod 700 vpncmd vpnserver popd
これでインストールは完了である.
サービスへの登録・自動起動の設定
次に,vpnserver をサービスに登録する.好みのエディタで「/etc/systemd/system/vpnserver.service」を新規に開く.そして,以下を記述し,保存する.
sudo vim /etc/systemd/system/vpnserver.service ### 以下を /etc/systemd/system/vpnserver.service に記述し保存する ### [Unit] Description=SoftEther VPN Server After=network.target network-online.target [Service] ExecStart=/usr/local/vpnserver/vpnserver start ExecStop=/usr/local/vpnserver/vpnserver stop Type=forking RestartSec=3s [Install] WantedBy=multi-user.target
その後,以下のコマンドでサービスを有効にし,自動起動の設定もする.
sudo systemctl daemon-reload sudo systemctl enable vpnserver.service sudo systemctl start vpnserver.service
Windows 側での設定
再び,以下のサイトから Windows 用のマネージャファイルをダウンロードし,インストールする.CPU が AMD の場合はよく分からない. SoftEther ダウンロード センター
それぞれ,選択肢を以下のように設定する.
- ダウンロードするソフトウェアを選択
- コンポーネントを選択
- プラットフォームを選択
- CPU を選択
マネージャを開き,順に設定する.この辺りの設定は,以下のサイトに図付で説明があるので,そちらを参考にする.
- 新しい接続設定から,接続先を設定する.ここでは,DHCP で割り当てられた IP アドレス 192.168.33.31 を設定した.
- 管理者パスワードを設定する.
- リモートアクセス VPN サーバーを選択する.
- 仮想 HUB 名を決める.ここでは,vpn とした.
- DDNS 名を決める.重複しないようにする必要があるため,自分が使いたいものが既に設定されている場合,使えない.
- 「L2TP サーバ機能を有効にする」にチェックを入れる.IPsec 事前共有鍵も設定する.
- 「VPN Azure を有効にする」にチェックを入れる.
- ユーザーを作成する.ログイン時に使用する.
- ローカルブリッジの設定は,ここでは行わない.(ブリッジ接続する~のまま置いておく)
すべて設定すると,VPN サーバ管理画面が表示される.次に,以下の手順で,tap デバイスの設定を行う.
- VPN サーバの管理画面において,左下にある「ローカルブリッジ設定」を選択する.
- 「仮想 HUB」として,先ほど決めた「vpn」を選択する.
- 「新しい tap デバイスとのブリッジ接続」を選択する.
- 新しい tap デバイス名に任意の名前を入力する.ここでは,softether とした.
- 「ローカルブリッジを追加」を選択する.
これで,Windows 側の設定は完了である.
ネットワーク環境の設定
一番ハマッたネットワークの設定である.最近の Raspberry Pi では,「/etc/dhcpcd.conf」にネットワークインタフェースの設定を記述するらしいが,ここでは,「/etc/network/interfaces」に記述する. 固定 IP を振りたかったが,どうしてもうまくできなかったため,dhcp として処理した.「/etc/network/interfaces」に以下を記述する.
# interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet manual auto wlan0 iface wlan0 inet static address 192.168.33.8 netmask 255.255.255.0 gateway 192.168.33.1 wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf auto br0 iface br0 inet dhcp ### 固定 IP でも設定可能なはずであるが,うまく動作しなかったため,DHCP とした. ### # eth0 を tap_softether に割り当てる.この時,softether の部分は,先程の「tap デバイスの設定」で設定した名前にする. bridge_ports eth0 tap_softether bridge_maxwait 10
ここで,ちゃっかり,無線 LAN の設定をしている.「/etc/wpa_supplicant/wpa_supplicant.conf」の設定方法は,以下を参照のこと.
workspacememory.hatenablog.com
設定完了後,reboot をかける.問題がなければ,正常に起動するはずである.この時から,eth0 に割り当てられていた IP アドレスではログインできなくなっていた. そのため,予め設定しておいた無線 LAN 側の IP アドレスで,リモートアクセスする.また,マネージャツールも無線 LAN の IP アドレスを設定することで,管理画面に移行できる.
ssh -X admin@192.168.33.8
リモートログイン後,以下のコマンドで eth0 に tap デバイスが割り当てられているか確認する.
brctl show bridge name bridge id STP enabled interfaces br0 xyz.abcdefghijk012345 no eth0 tap_softether
ルータの設定
最後に,ルータの設定を行う.筆者は,「WHR-1166DHP3」を使用しているので,型番で調べて設定した.忘れそうなので,やり方を示しておく.ここでのソフトウェアのバージョンは,2.9 である. 「詳細設定」の画面に移動し,「セキュリティー」の「ポート変換」に移動する.以下のように IP アドレスとポートの対応付けを登録する.IP アドレスは,無線 LAN 側に割り当てたものを利用する.
- プロトコル TCPポート: 443, LAN 側の IP アドレス:192.168.33.8
- プロトコル TCPポート: 5555, LAN 側の IP アドレス:192.168.33.8
- プロトコル UDPポート: 500, LAN 側の IP アドレス:192.168.33.8
- プロトコル UDPポート: 4500, LAN 側の IP アドレス:192.168.33.8
以上で,すべての設定は完了である.疲れた.