VPNのセットアップ

VPNサーバを立てますよ。
出先から自宅にアクセスできるようにするんです。

最初PPTPDをセットアップしたけど、出先のネットワークがGREポートを通してくれないから、OpenVPNもセットアップした。

ここでは、OpenVPNのセットアップをまとめておくです。

UbuntuのVPNサーバにWindowsクライアントから接続できるように設定するよ。

  • OpenVPNとbridge-utilsのインストール
まずはインストール。
bridge-utilsは、一つのEtherポート仮想化して(br0)、VPN(tap0)とその他(eth0ポート)から使えるようにするもの(らしい)。
apt-get install openvpn bridge-utils
※sudoが面倒なので、私はrootで実行しちゃいますw

  • 鍵ファイルの作成
OpenVPNは鍵ファイルを使った認証なのでその辺の作業をしていく。
鍵ファイルを作るスクリプトがインストールされているので、そこに移動。
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0

ここに vars というファイルがあるので、その一番下の方を編集して、鍵を作るときの情報を入力。
export KEY_COUNTRY="JP"
export KEY_PROVINCE="Kanagawa"
export KEY_CITY="Yokohama"
export KEY_ORG="recitativo-fant.asia"
export KEY_EMAIL="メールアドレス"

あとは、下記手順でCA、サーバ鍵、クライアント鍵を作っていく。
source vars
./clean-all
./build-dh
./build-ca

# サーバ鍵を作成 : 鍵の名前は "server"
./build-key-server server

# クライアント鍵をパスワード付きで作成 : 鍵の名前は "client01"
./build-key-pass client01
ここで作成するクライアント鍵1個に対して、IPアドレスが1個割り振られる模様。
なので、同時接続するクライアントの数だけ鍵ファイルを作成すること。

すると、keysというディレクトリの中に鍵ファイルが作られるので、このうち必要なものをコピーする。
cd keys
mkdir /etc/openvpn/keys
cp ca.crt /etc/openvpn/keys
cp dh1024.pem /etc/openvpn/keys
cp server.crt /etc/openvpn/keys
cp server.csr /etc/openvpn/keys
cp server.key /etc/openvpn/keys

クライアント側には下記ファイルをコピーする。
ca.crt
client01.crt
client01.key

  • サーバの設定
★この設定途中でOpenVPNを再起動してはいけない!
★途中で再起動すると、ネットワークが全部とまったりするorz。

まずは、OpenVPNの設定。
/etc/openvpn/server.conf を作成します。
内容は下記の通り。
proto tcp
port 1194

# デバイスのインターフェースは tap0 を使う
dev tap0

# 鍵ファイルの設定
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem

# サーバブリッジの設定
# 192.168.1.10 はサーバのIPアドレス
# ネットマスクは 255.255.255.0
# 192.168.1.210 から 192.168.1.219 の範囲でIPアドレスを割り振る
server-bridge 192.168.1.10 255.255.255.0 192.168.1.210 192.168.1.219

# 経路の設定
# 192.168.1.0/24 をクライアントに追加する。
route 192.168.1.0 255.255.255.0

# TLS-Server にする
tls-server

# 圧縮を有効にする
comp-lzo
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz に設定ファイルのサンプルがあるので、これを解凍して /etc/openvpn/ の下にコピー、編集しても良し。
#UDPでも良いが、出先のネットワークがUDPを通してくれないのでここではTCPを使う。

次に、ブリッジの起動、停止スクリプトを設定する。
/usr/share/doc/openvpn/examples/sample-scripts に bridge-start、bridge-stopがあるので、/etc/openvpn/ の下にコピーして、bridge-startの下記を編集。
(~省略~)
eth="eth0"
eth_ip="192.168.1.10"    ←br0に設定するIPアドレス
eth_netmask="255.255.255.0"    ←br0に設定するネットワークアドレス
eth_broadcast="192.168.1.255"    ←br0に設定するブロードキャストアドレス
(~省略~)

VPNの起動、停止には下記の順番になる必要がある。
起動手順
ネットワーク機能   →   ブリッジ機能   →   OpenVPNサーバ

停止手順
OpenVPNサーバ   →   ブリッジ機能   →   ネットワーク機能
なので、bridge-startとbridge-stopを/etc/init.d/openvpn に適当に組み込んじゃうw

さらに、Ethernet関連ファイルを編集する。
まずは、/etc/network/interfaces
(~省略~)
#eth0からbr0に変更
#auto eth0
#iface eth0 inet static
auto br0
iface br0 inet static
(~省略~)
#ファイルの最後に追加
bridge_ports eth0 tap0 iface eth0 inet manual
iface tap0 inet manual

次に、/etc/sysctl.conf
net.ipv4.ip_forward = 1

ここまでやって、ようやくサーバを再起動。
マシンごと再起動しないと、/etc/sysctl.confが設定されないっぽい。

  • クライアントの設定
Windows側には OpenVPN GUI for Windows をインストールする。
http://openvpn.se/download.htmlからインストールパッケージをダウンロードしてインストールする。

インストールすると、Windowsの「ネットワーク接続」に「ローカル接続 n」が追加される。
デバイス名が「TAP-Win32 Adapter」のやつである。
これの名前を右クリックで「tap0」に変更する。

C:\Program Files\OpenVPN\config\client.ovpn を編集する。
client
dev tap
dev-node tap0
proto tcp
remote recitativo-fant.asia 1194
resolv-retry infinite
nobind
ca "D:\\keys\\ca.crt"
cert "D:\\keys\\client01.crt"
key "D:\\keys\\client01.key"
comp-lzo
verb 3
鍵ファイルのパス指定では、エンサイン(\)を2個ずつ書く。

  • ルータの設定
外部からのTCP 1194ポートでの接続をVPNサーバに転送するよう設定します。