【Raspberry Pi】SoftEtherでVPN

Raspberry Pi Model B+」を買いました。

Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)

 

 

SoftEtherについては、以前LIVAでインストールしたまま放置してましたが、このラズパイに再度インストールした上でVPNを実現します。

 

Raspberry Pi でSoftEther VPN 1.0 RC2を試す | よもやま雑記帳

を参考にさせていただきました。

なお、今回はwgetによるダウンロードではなく、直接HPからダウンロードしています。ラズパイの場合はSofEtherはOS: Linux、CPU: ARM EABI (32bit)を選択します。

 

※セッティング方法を書こうと思いましたが、上記参考サイトとまるっきり同じなので割愛(手抜き)

 

注意点①

VPNサーバにするラズパイはLinuxルータを通したローカルネットワークの中で動作しています。

なので、Linuxルータのiptablesの設定でVPNアクセスを転送してあげなければなりません。というわけで、iptablesを設定するシェルスクリプトの記載を抜粋すると

IPTABLES='/sbin/iptables'

WAN='ppp0' # 外部インタフェース

 

#-------------------------#
# VPN接続からの接続を許可 #
#-------------------------#

$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp --dport 443 -j DNAT --to 192.168.0.81:443
$IPTABLES -t nat -A PREROUTING -i $WAN -p udp --dport 500 -j DNAT --to 192.168.0.81:500
$IPTABLES -t nat -A PREROUTING -i $WAN -p udp --dport 1701 -j DNAT --to 192.168.0.81:1701
$IPTABLES -t nat -A PREROUTING -i $WAN -p udp --dport 4500 -j DNAT --to 192.168.0.81:4500

 

$IPTABLES -A FORWARD -i $WAN -p tcp --dport 443 -d 192.168.0.81 -s xxx.xxx.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $WAN -p udp --dport 500 -d 192.168.0.81 -s xxx.xxx.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $WAN -p udp --dport 1701 -d 192.168.0.81 -s xxx.xxx.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $WAN -p udp --dport 4500 -d 192.168.0.81 -s xxxx.xxx.0.0/16 -j ACCEPT

 PREROUTINGでルータで受け取った443ポート等の通信を192.168.0.81(ラズパイのIPアドレス)に透過させるようにします。

ただし、PREROUTINGの後に動作するFORWARDの記載では、-sオプションで特定のIPアドレス帯域からの通信のみを許容するようにしてアクセス制限をします。

私の場合は格安SIMを入れたAndroidからVPNを貼りたいため、SIMを提供している会社が払い出すIPアドレス帯域を事前に調べ、その帯域のみからアクセスを許容する形にしています。フルオープンは危険なのでやめましょう。

ちなみにiptablesは送信元をドメイン指定することも可能なので、いずれはAndroidでDynamicDNSクライアントでドメイン自動更新→そのドメインのみのアクセスを許容、という形を取る予定です。

 

注意点②

iptablesの設定が完了してもアクセス出来ない場合。

SoftEtherのログ(security_log/VPN/sec_2014xxxx.log)で「VPNクライアントの IP アドレスがまだ決定されていないにもかかわらず、VPNクライアントが通信を行おうとしました」とでていたら、仮想DHCPを設定しないとダメらしいです。

f:id:engetu21:20141122195926j:plain

 

 

f:id:engetu21:20141122195942j:plain

 

警告が出るけど気にしない

f:id:engetu21:20141122195948j:plain

 

SecureNATの設定に入り、仮想DHCPサーバの設定にチェック

f:id:engetu21:20141122195936j:plain

【追記】

ちなみに、この状態だと、ラズパイ自身が自分をネットワーク上で認識する事ができないので、以下のサイトを参考に設定を変更する必要がある。

SoftEther VPN 1.0 RC2でtapデバイスを試す | よもやま雑記帳

 

※2017/7/8追記

上記サイトのtapデバイス設定ですが、Raspbianのバージョンが上がったことでIPアドレスの設定先そのものが変わりました。

/etc/network/interfacesから/etc/dhcpcd.confです。

従来通りに/etc/network/interfacesで設定する必要がある場合は、/etc/dhcpcd.confの設定内容を変更します(コメントアウトするだけ)

$sudo vi /etc/dhcpcd.conf

#interface eth0
#static ip_address=192.168.11.xx/24
#static routers=192.168.11.xx
#static domain_name_servers=xxx.xxx.xxx.xxx

その後、/etc/network/interfacesの設定を変えます。

$sudo vi /etc/network/interfaces

auto eth0

auto br0
iface br0 inet static
address 192.168.11.xx
netmask 255.255.255.0
network 192.168.11.0
broadcast 192.168.11.255
gateway 192.168.11.xx
bridge_ports eth0
bridge_maxwait 10

 

自動実行の設定方法もこちらで

$sudo vi /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

 

 

【LIVA】【Ubuntu server14.04】VPNをやりたい(SoftEtherインストール編)

こちらがとても参考になってので載せておきます。

某模型メーカー中の人のサーバ管理帳: Ubuntu ServerにSoftEther VPN Serverを入れてみる

 

1.SoftEtherの取得とmake

wgetコマンドで取得します。

取得するファイルは各環境に合わせる必要があります。

http://jp.softether-download.com/files/softether/

 

$wget http://jp.softether-download.com/files/softether/v4.10-9473-beta-2014.07.12-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.10-9473-beta-2014.07.12-linux-x64-64bit.tar.gz 

 

jp.softether-download.com (jp.softether-download.com) をDNSに問いあわせています... 130.158.75.49
jp.softether-download.com (jp.softether-download.com)|130.158.75.49|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 5638726 (5.4M) [application/x-gzip]
`softether-vpnserver-v4.10-9473-beta-2014.07.12-linux-x64-64bit.tar.gz' に保存中

100%[======================================>] 5,638,726   2.14MB/s   時間 2.5s

2014-09-28 14:34:59 (2.14 MB/s) - `softether-vpnserver-v4.10-9473-beta-2014.07.12-linux-x64-64bit.tar.gz' へ保存完了 [5638726/5638726]

 

取得したファイルを解凍します。

$sudo tar zxvf ./softether-vpnserver-v4.10-9473-beta-2014.07.12-linux-x64-64bit.tar.gz

 

vpnserver/
vpnserver/Makefile
vpnserver/.install.sh
vpnserver/ReadMeFirst_License.txt
vpnserver/Authors.txt
vpnserver/ReadMeFirst_Important_Notices_ja.txt
vpnserver/ReadMeFirst_Important_Notices_en.txt
vpnserver/ReadMeFirst_Important_Notices_cn.txt
vpnserver/code/
vpnserver/code/vpnserver.a
vpnserver/code/vpncmd.a
vpnserver/lib/
vpnserver/lib/libcharset.a
vpnserver/lib/libcrypto.a
vpnserver/lib/libedit.a
vpnserver/lib/libiconv.a
vpnserver/lib/libintelaes.a
vpnserver/lib/libncurses.a
vpnserver/lib/libssl.a
vpnserver/lib/libz.a
vpnserver/lib/License.txt
vpnserver/hamcore.se2

makeコマンドを実行します。

$ cd vpnserver/
$ ls
Authors.txt                           ReadMeFirst_License.txt
Makefile                              code
ReadMeFirst_Important_Notices_cn.txt  hamcore.se2
ReadMeFirst_Important_Notices_en.txt  lib
ReadMeFirst_Important_Notices_ja.txt
$ sudo make

 

--------------------------------------------------------------------

SoftEther VPN Server (Ver 4.10, Build 9473, Intel x64 / AMD64) for Linux Install Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.

--------------------------------------------------------------------


Do you want to read the License Agreement for this software ?

 1. Yes
 2. No

Please choose one of above number:
1

 

(略)

 

--------------------------------------------------------------------
The preparation of SoftEther VPN Server is completed !


*** How to switch the display language of the SoftEther VPN Server Service ***
SoftEther VPN Server supports the following languages:
  - Japanese
  - English
  - Simplified Chinese

You can choose your prefered language of SoftEther VPN Server at any time.
To switch the current language, open and edit the 'lang.config' file.


*** How to start the SoftEther VPN Server Service ***

Please execute './vpnserver start' to run the SoftEther VPN Server Background Service.
And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure SoftEther VPN Server.
Of course, you can use the VPN Server Manager GUI Application for Windows on the other Windows PC in order to configure the SoftEther VPN Server remotely.
--------------------------------------------------------------------

make[1]: ディレクトリ `/tmp/vpnserver' から出ます

ライセンスとか使用条件とかいろいろ聞かれますが、基本的に1を選択。

※makeがエラーになる場合は、以下で必要なものを取得

sudo apt-get install gcc make binutils chkconfig libc-dev zlib1g-dev openssl libreadline-dev libncurses-dev

2.デーモン動作設定

とりあえずフォルダを移動します。

$sudo mv vpnserver /usr/local

 

デーモン起動させるため、以下のファイル作成します。※参考サイトより

$sudo vi /etc/init.d/vpnserver

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
;;
stop)
$DAEMON stop
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

 

そのままだと実行権限もないため、権限変更を行います。

$sudo chmod 755 /etc/init.d/vpnserver 

 

3.実行

$ sudo  service vpnserver start
The SoftEther VPN Server service has been started. 

 停止、再開は以下になります。

$ sudo  service vpnserver stop
$ sudo  service vpnserver restart