【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