ゲーム機などにはVPNを使う機能がないので、VPN接続できるアクセスポイント作りたいなと思って試してみました。
実際は、家のネットワークが少し不自由だから、VPN経由だとSplatoon快適にできるんじゃねと思ったのがきっかけ
外出先とかで、ネットワークが信頼出来ない時とかにも使えるんじゃないでしょうか。
概要
RaspberryPiからSoftEther VPNのVPNサーバーにブリッジ接続して、USB無線LAN子機から直接接続するようにします。
簡単な流れを言うと、以下の様な感じです。
- SoftEther VPN BridgeでVPNサーバーに繋ぐ
- SoftEther VPN Bridgeのtapデバイスを作成する
- USB無線LAN子機をAPモードでセットアップ
- 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
ssid
とwpa_passphrase
は適宜変えてください。
今回はブリッジを行うのでbridge
の項目も記入します。(もしかしたらあまり意味ない?)
ブリッジ設定
まずは/etc/network/interfaces
にwlan0
とbr0
の設定を加えます。
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_ap
がbr0
に追加されるようにします。
#!/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
ポイントとは、brctl
でtap_ap
をbr0
に登録しているところなので、自分のスクリプトに合わせて調整するといいと思います。
このスクリプトでは、念のため5秒waitを入れています。
動作確認
各サービスを再起動して設定を反映させます。
Wi-Fiに接続して、VPN先のIPアドレスが割り当てられていれば成功です。