RaspberryPi
SoftEther

RaspberryPiでVPNアクセスポイントを作る

More than 3 years have passed since last update.

ゲーム機などにはVPNを使う機能がないので、VPN接続できるアクセスポイント作りたいなと思って試してみました。

実際は、家のネットワークが少し不自由だから、VPN経由だとSplatoon快適にできるんじゃねと思ったのがきっかけ

外出先とかで、ネットワークが信頼出来ない時とかにも使えるんじゃないでしょうか。


概要

RaspberryPiからSoftEther VPNのVPNサーバーにブリッジ接続して、USB無線LAN子機から直接接続するようにします。

簡単な流れを言うと、以下の様な感じです。


  1. SoftEther VPN BridgeでVPNサーバーに繋ぐ

  2. SoftEther VPN Bridgeのtapデバイスを作成する

  3. USB無線LAN子機をAPモードでセットアップ

  4. tapデバイスとUSB無線LAN子機のインタフェースをブリッジ

※SoftEther VPN ServerおよびSoftEther VPN Bridgeのインストール、カスケード接続は割愛します。


準備物


  • RaspberryPi(SoftEther VPN Bridgeインストール済み)

  • USB無線LAN子機(今回はGW-USWExtremeを利用)

  • VPNサーバー(SoftEther VPNを利用)


パッケージのインストール

$ sudo apt-get install bridge-utils hostapd

GW-USWExtremeはapt-getでインストールしたhostapdでは動かないため、対応したものに置き換えます。

$ wget http://www.adafruit.com/downloads/adafruit_hostapd.zip

$ unzip adafruit_hostapd.zip
$ chmod 755 hostapd
$ sudo mv /usr/sbin/hostapd{,.bak}
$ sudo mv hostapd /usr/sbin


hostapdの設定

/etc/hostapd/hostapd.confを開いて以下のように書き換えます。

interface=wlan0

bridge=br0
driver=rtl871xdrv
ssid=えすえすあいでぃー
hw_mode=g
channel=6
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=ぱすわーど
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
macaddr_acl=0
#macaddr_acl=1
#accept_mac_file=/etc/hostpad/accept_macaddress.conf
ieee80211n=1
wmm_enabled=1
#ht_capab=[HT40+][GF][SHORT-GI-40][TX-STBC][RX-STBC1]
logger_syslog_level=3

ssidwpa_passphraseは適宜変えてください。

今回はブリッジを行うのでbridgeの項目も記入します。(もしかしたらあまり意味ない?)


ブリッジ設定

まずは/etc/network/interfaceswlan0br0の設定を加えます。

allow-hotplug wlan0

iface wlan0 inet manual

auto br0
iface br0 inet dhcp
# bridge_ports wlan0

hostapdが自動的にbr0にwlan0を追加してくれるそうですが、うまくいかない人はbridge_portsの行の#を外して最初から追加されるようにしてください。


SoftEther VPN Bridgeの設定

ローカルブリッジ設定からtapデバイスを追加しておいてください。

ここではtap_apという名前のtapデバイスを作ったことにして進めます。

/etc/init.d/vpnbridgeを編集して、起動時にtap_apbr0に追加されるようにします。

#!/bin/sh

# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnbridge/vpnbridge
LOCK=/var/lock/subsys/vpnbridge

test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
sleep 5

# SoftEther VPNで追加した仮想tapデバイス名を調べる
ap=`/sbin/ifconfig -a| awk '$1 ~ /^tap_ap/ {print $1}'`
/sbin/brctl addif br0 $ap
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

ポイントとは、brctltap_apbr0に登録しているところなので、自分のスクリプトに合わせて調整するといいと思います。

このスクリプトでは、念のため5秒waitを入れています。


動作確認

各サービスを再起動して設定を反映させます。

Wi-Fiに接続して、VPN先のIPアドレスが割り当てられていれば成功です。


参考