作業中のメモ

よく「計算機」を使って作業をする.知らなかったことを中心にまとめるつもり.

SoftEther を利用した VPN サーバの構築

どうも,筆者です.今回は,前回セットアップした Raspberry Pi 3 Model B を利用して,VPN サーバを立てた.何度か試してみた結果,ようやくうまくいったので,ここに記録しておく.

VPN に関しては以下のサイトを参考にした.

qiita.com

システムのアップデート

まずは,おなじみのシステムのアップデートを行う.

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 切り替えを無効にする設定を行う.これは,以下のサイトを参考にした.

jyn.jp

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 サーバの環境構築を行う.構築手順は,以下のようになる.

  1. bridge アダプタを利用可能にするため,bridge-utils をインストールする.
  2. softether のデータを Web からダウンロードして,インストールする.
  3. vpnserver をサービスへ登録し,自動起動する.
  4. Windows 側で VPN Server の設定を行う.
  5. ネットワーク環境の設定を行う.ここか一番ハマッた部分である.
  6. ルータ側でアドレス変換の設定を行い,外部から VPN サーバにアクセスできるようにする.

この順に処理を進める.

bridge-utils のインストール

vim のインストールと同様に,インストールするだけである.

sudo apt-get install -y bridge-utils

SoftEther のインストール

以下のサイトから,SoftEther をダウンロードしてくる.

SoftEther ダウンロード センター

それぞれ,選択肢を以下のように設定する.

すべて選択すると,ダウンロード可能なファイルの一覧が表示される.今回は,

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 ダウンロード センター

それぞれ,選択肢を以下のように設定する.

マネージャを開き,順に設定する.この辺りの設定は,以下のサイトに図付で説明があるので,そちらを参考にする.

www.jifu-labo.net

  1. 新しい接続設定から,接続先を設定する.ここでは,DHCP で割り当てられた IP アドレス 192.168.33.31 を設定した.
  2. 管理者パスワードを設定する.
  3. リモートアクセス VPN サーバーを選択する.
  4. 仮想 HUB 名を決める.ここでは,vpn とした.
  5. DDNS 名を決める.重複しないようにする必要があるため,自分が使いたいものが既に設定されている場合,使えない.
  6. L2TP サーバ機能を有効にする」にチェックを入れる.IPsec 事前共有鍵も設定する.
  7. VPN Azure を有効にする」にチェックを入れる.
  8. ユーザーを作成する.ログイン時に使用する.
  9. ローカルブリッジの設定は,ここでは行わない.(ブリッジ接続する~のまま置いておく)

すべて設定すると,VPN サーバ管理画面が表示される.次に,以下の手順で,tap デバイスの設定を行う.

  1. VPN サーバの管理画面において,左下にある「ローカルブリッジ設定」を選択する.
  2. 「仮想 HUB」として,先ほど決めた「vpn」を選択する.
  3. 「新しい tap デバイスとのブリッジ接続」を選択する.
  4. 新しい tap デバイス名に任意の名前を入力する.ここでは,softether とした.
  5. 「ローカルブリッジを追加」を選択する.

これで,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 側に割り当てたものを利用する.

以上で,すべての設定は完了である.疲れた.