前回までで、OpenVPN自体の設定まで終わらせた。
今回は、ブリッジの設定からおこなっていく。
ブリッジ設定
bridge-startの変更・追加点
sudo apt-get install bridge-utils
sudo cp /usr/share/doc/openvpn/examples/sample-scripts/bridge-st* /etc/openvpn/
bridge-stopがそのままだとダメだったので、末尾に追加
eth_ip="192.168.1.2" #eth0のIPアドレス
eth_broadcast="192.168.1.255"
gw="192.168.1.1"
route add default gw $gw #最終行に追加
/etc/init.d/networking reload
IP forwardを有効にするために、/etc/sysctl.confに
net.ipv4.ip_forward=1
を追記する。
起動時にブリッジの設定が有効になるようにするため、/etc/init.d/ にスクリプトを作成
/etc/init.d/bridge
#!/bin/sh
### BEGIN INIT INFO
# Provides: bridge
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Bridge for OpenVPN
### END INIT INFO
START_BRIDGE="/etc/openvpn/bridge-start"
STOP_BRIDGE="/etc/openvpn/bridge-stop"
case "$1" in
start)
echo -n "Starting Bridge"
$START_BRIDGE
;;
stop)
echo -n "Stopping Bridge"
$STOP_BRIDGE
;;
restart)
$STOP_BRIDGE
sleep 2
$START_BRIDGE
;;
*)
echo "Usage: $0 {start|stop|restart}" > 2
exit 1
;;
esac
また、今作ったbridgeを実行後にOpenVPNを起動したいので、/etc/init.d/openvpnのINIT INFO部分を書き換える。
# Required-Start: bridge $network $remote_fs $syslog
# Required-Stop: bridge $network $remote_fs $syslog
書き換えたら、rc-updateを実行する。
sudo update-rc.d bridge defaults
sudo update-rc.d openvpn defaults
クライアントの鍵作成と証明書発行
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
./build-key client
これも引数がCommon nameのデフォルト値となるため、今まで入れてきたCommon nameと被らない名前を入力する。
ファイアウォールの設定
ルータのファイアウォールでserver.confで指定したプロトコル(TCP/UDP)とポートをVPNのサーバになるマシンのIPへポートマッピング設定する。
クライアントの設定ファイル
/usr/share/doc/openvpn/examples/sample-config-files/client.conf
にある、設定ファイル例をコピーし、変更する。
dev tap0
;dev tun
remote my-server-1 1234 # VPNサーバのホスト名とポート番号
user nobody
group nogroup
ca ca.crt
cert client.crt
key client.key
my-server-1の部分は自分のホスト名かIPアドレスに書き換える。
caは認証局の作成で作った認証局の証明書。
cert,keyはクライアントの鍵作成と証明書発行で作った証明書ファイルと鍵ファイルのファイル名を指定する。
と、ここまで設定をしてクライアントとなるAndroid側の準備に取り掛かろうとすると、とても悲しいこと気にがついた。
現在のところAndroidではroot化しないとTAPでのOpenVPN接続はできないとい事がわかった。
Androidのフレームワークが対応していないということだ。
そうなると、AndroidのフレームワークがTAPのAPIをサポートし、そのサポートされたバージョンのファームがリリースされないといけない・・・
これはちょっと期待できなそうなので、そっとコマンドを叩いて終了した。
sudo /etc/init.d/openvpn stops
sudo /etc/init.d/bridge stop
sudo update-rc.d openvpn remove
sudo update-rc.d bridge remove
あと、/etc/sysctl.confのip forwardの設定もoffにした。
参考
Howto setup openvpn in bridge mode on debian