LoginSignup
9
7

More than 5 years have passed since last update.

Raspberry Pi3(Ubuntu18.04LTS)でSoftEther VPN

Last updated at Posted at 2018-09-01

はじめに

Raspberry Pi 2とSoftEther VPNを使ってVPNサーバーを構築しよう!
のRaspberry Pi 3(Ubuntu18.04版)です。

まずはここまで

Raspberry Pi3にUbuntu18.04LTSをインストール

複数ネットワークをブリッジさせるためのパッケージをインストール

$sudo apt-get install bridge-utils

/etc/netplan/*.yamlを編集する

デフォルトは50-cloud-init.yamlというファイルですが、ファイル名が気に食わないのでnetwork.yamlに変更しています。50-cloud-init.yamlでも全然かまいません。
ここでは192.168.1.253の固定ipをブリッジ(br0)に振り、物理NIC:eth0はsoftEtherで割り当てるようにします。
[Netplanの使い方]を参考にブリッジインターフェイスの設定をします。

/etc/netplan/network.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
#eth0はラズパイに接続されている物理NIC
    ethernets:
        eth0:
           dhcp4: no
#br0が新しく追加したブリッジ、こっちに固定でIPを振る
    bridges:
        br0:
            interfaces:
                - eth0 
            addresses:
            - 192.168.1.253/24
            gateway4: 192.168.1.1
            nameservers:
                addresses: 
                - 192.168.1.1
            dhcp4: no

SoftEtherVPNのダウンロードとインストール

ダウンロード

こちらのSoftEtherダウンロードセンター
コンポーネント「SoftEther VPN Server」
プラットフォーム「Linux」
CPU「ARM EABI (32bit)」
で出てきたダウンロードURLをwgetでダウンロードする。
(2018/08/21 現在)

$wget https://jp.softether-download.com/files/softether/v4.27-9668-beta-2018.05.29-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.27-9668-beta-2018.05.29-linux-arm_eabi-32bit.tar.gz
softether-vpnserver 100%[===================>]   5.40M  3.06MB/s    in 1.8s    

2018-08-21 09:46:12 (3.06 MB/s) - ‘softether-vpnserver-v4.27-9668-beta-2018.05.29-linux-arm_eabi-32bit.tar.gz’ saved [5664923/5664923]

インストール(解凍してmake、パーミッション変更)

初期のままだとコンパイルに必要なものが色々が入っていないのでインストールする。

$sudo apt install gcc make make-guile libssl-dev
カーネルを調べる。
$uname -r
linux-hedersにシンボリックリンクを張る。
$sudo ln -s /usr/src/linux-headers-$(uname -r)/ /lib/modules/$(uname -r)/build
解凍
$tar -xzvf softether-vpnserver-v4.27-9668-beta-2018.05.29-linux-arm_eabi-32bit.tar.gz
make
~/
$cd ~/vpnserver/
$make
(色々同意を求められるので1を選択しておけばOK)
解凍してできたvpnserverフォルダを/usr/local/に移動
~/
$sudo mv vpnserver/ /usr/local/
パーミッションを変更
$cd /usr/local/vpnserver/
$sudo chmod 600 *
$sudo chmod 700 vpncmd
$sudo chmod 700 vpnserver
起動スクリプトを/etc/init.dに作成

"こちら"の「起動スクリプトを用意する」まんまです。

/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 1.0 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
スクリプトに実行権限を与えてinit.dに登録
$sudo chmod +x /etc/init.d/vpnserver
$sudo update-rc.d vpnserver defaults
$sudo reboot
リブート後ちゃんと起動しているか確認。
$sudo service vpnserver status
● vpnserver.service - LSB: SoftEther VPN RTM
   Loaded: loaded (/etc/init.d/vpnserver; generated)
   Active: active (running) since Tue 2018-08-21 10:43:16 JST; 1min 17s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1201 ExecStart=/etc/init.d/vpnserver start (code=exited, status=0/SUC
    Tasks: 31 (limit: 2142)
   CGroup: /system.slice/vpnserver.service
           ├─1307 /usr/local/vpnserver/vpnserver execsvc
           └─1308 /usr/local/vpnserver/vpnserver execsvc

tapデバイスの理解

実はここまででも動くのですが、vpn接続を確立し、LAN内のPCに接続できたりします。
ですが、vpn server自体で動いているサービス(apacheなど)やsshにさえ接続できません。

vpn serverの起動スクリプトにある

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

とか

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

の部分がよくわかっていませんでした。

ここを参照して、やっとブリッジとtapデバイスの仕組みが理解できた(気がします)。
RaspberryPiでSoftetherで必須なtapデバイス

SoftEther VPN Server Manager for Windowsで設定

softether VPNをwindowsから設定します。vpncmdでlinuxから設定することもできなくもないですが、訳がわからなくなるためLAN上のwindowsで設定したほうがいいです。

手順としては
1)仮想HUB(名称は適当に「VPN」などとする)を作成し、ログインユーザーの設定を行う。
2)ローカルブリッジ設定で新しいローカルブリッジの定義をする。
このとき、仮想HUBは1で定義した「VPN」を選択。
 新しいtapデバイス名を例えば「vlan」と名付けると、「tap_vlan」という仮想NICが作成される。
※この部分は慎重に設定を行ってください。間違えると、ネットワークがループしたりします。僕の場合は無線LANのルータを殺してしまい、家中がインターネットに接続できなくなりました。

sudo brctl show br0
bridge name bridge id       STP enabled interfaces
br0     8000.96ced9138987   no      eth0
                                    tap_vlan

とすると作成したブリッジとして定義したbr0が、eth0とtap_vlanとつながっていることがわかります。

この設定をすることによって、vpn serverにも接続できるようになります。

参考

SoftEther VPN Server Manager for Windows
TUN/TAPドライバ
RaspberryPiでSoftetherで必須なtapデバイス

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7