OpenVPNを使ったVPNの構築

概要

大阪本社と京都支社で個別に構築されていたLANを、インターネットVPNを使って 接続し、利便性を向上させることにします。大まかな要件は以下の通り。

新規に必要なものをそろえるのであれば、 PersolのBSR14 とか、 LinksysのBEFSR41C-JP あたりを2台買ってきてIPSecで接続するのが簡単ですが、それでは味気ない ので、既存のLinuxマシンを使ってVPNを構築します。 VPN技術の比較から、両端が動的IPでも接続できるOpenVPNを使うことにします。

ネットワーク仕様

大阪本社
LAN 1
192.168.110.0/255.255.255.0
ルーター 1 (Linux)
eth0 : 192.168.110.254
eth1 : DHCP (ADSL)
ppp0 : PPPoE
tun0 : 172.16.0.1
京都支社
LAN 2
192.168.120.0/255.255.255.0
ルーター 2 (Linux)
eth0 : 192.168.120.254
eth1 : DHCP (Cable TV)
tun0 : 172.16.0.2

VPN接続ができた暁には、ルーター1のtun0とルーター2のtun0が(仮想的な)線で つながっているように見えます。

インストール

ライブラリの用意

まず、OpenSSLライブラリをインストー ルしてください。最近のLinuxディストリビューションであれば、たぶん標準で インストールされていると思います。

また、LZO圧縮を使う場合、 LZO data compression libraryから、LZOライブラリをインストールします。

TUN/TAPデバイスの用意

続いて、Linux カーネルのTUN/TAPデバイスを有効にします。TUN/TAPデバイスが カーネルモジュールとしてインストールされていれば、わざわざカーネルを作り 直す必要はありません。

# modprobe tun

として、エラーが出なければカーネルモジュールが入っているので、それを使え ばよいでしょう。

モジュールが無いようなら、カーネル設定の"Network device support"の中に"Universal TUN/TAP device driver support"が あるので、これを有効にしてカーネルを作り直します。

続いてtunデバイスが無ければ次のようにして作ります。

# mknod /dev/net/tun c 10 200

OpenVPNのインストール

最後に、OpenVPNをインストールします。
OpenVPNのダウンロードペー ジからtar-ballをダウンロードするか、 自家製のSRPM(ただしLZO圧縮 無し)をダウンロードしてインストールします。

tar-ballからコンパイルする場合は

# tar xfvz openvpn-1.4.3.tar.gz
# cd openvpn-1.4.3
# ./configure --disable-lzo
# make
# make install

SRPMからコンパイルする場合、

# rpm --rebuild openvpn-1.4.3-nolzo.src.rpm
# rpm -i openvpn-1.4.3-nolzo.i386.rpm

OpenVPNの設定

ひとまず、簡単な事前共有鍵方式での接続を試してみましょう。まず、共有鍵を 作ります。

# openvpn --genkey --secret osaka-kyoto.key

作った共有鍵を、ルーター1とルーター2の/etc/openvpn/にコピーします。この 鍵があれば暗号を解くことができるので、他人に見られないように注意してくだ さい。ファイルの転送には、sshを使うか、フロッピーなどで手運びするように しましょう。また、ファイルのパーミッションも、

# chmod 600 osaka-kyoto.key

として、root以外のユーザーが読めないようにしましょう。

続いて、ルート設定スクリプトを書きます。ルーター1(大阪本社側)の/etc/openvpn/kyoto.up に、次のようなスクリプトを書きます。

#!/bin/sh

/sbin/route add -net 192.168.120.0 netmask 255.255.255.0 dev $1

同様に、ルーター2(京都支社側)の/etc/openvpn/osaka.upにも以下を書き込みます。

#!/bin/sh

/sbin/route add -net 192.168.110.0 netmask 255.255.255.0 dev $1

最後に、設定ファイルを書きましょう。ルーター1(大阪本社側)の/etc/openvpn/kyoto.confに、 以下の内容を書いてください。

#
# OpenVPN Config for osaka-honsya.ddns.org <=> kyoto-sisya.ddns.org
#
dev tun
remote kyoto-sisya.dyndns.org

ifconfig 172.16.0.1 172.16.0.2
up /etc/openvpn/kyoto.up
port 5000

secret /etc/openvpn/osaka-kyoto.key

user nobody
group nobody
persist-key

# dynamic-ip
ping 60
ping-restart 1800
persist-tun
float

# debug
verb 1

ルーター2(京都支社)の/etc/openvpn/osaka.confにも以下の内容を書き込みます。

#
# OpenVPN Config for kyoto-sisya.ddns.org <=> osaka-honsya.dyndns.org
#
dev tun
remote osaka-honsya.ddns.org

ifconfig 172.16.0.2 172.16.0.1
up /etc/openvpn/osaka.up
port 5000

secret /etc/openvpn/osaka-kyoto.key

user nobody
group nobody
persist-key

# dynamic-ip
ping 60
ping-restart 1800
persist-tun
float

# debug
verb 1

remoteのホスト名、upのスクリプトファイル名、ifconfigのIPがルーター1のものと異なります。

接続とテスト

ここまでちゃんと設定したら、ルーター1とルーター2で、以下の起動スクリプト を呼ぶだけです。

# /etc/rc.d/init.d/openvpn start

あとは、pingなどで互いに接続できるかテストしてみてください。うまくいかな いようなら、routeの確認や、openvpnのデバッグモード(verb 9にする)を試して みましょう。

Windowsネットワークの設定

ここまでで、要件だった4項目のうち、以下の3つは実現できているはずです。

しかし、Windowsのファイル共有をしようとすると、ネットワークコンピューター に相手側のコンピューターが表示されないと思います。これを解決するために、 VPN環境でのWindows Networkを参照 して、SambaやWINSサーバーの設定などを行ってください。


ご意見、ご感想は、小本 真広 <[email protected]>まで。メールする前にtop pageの注意書を読んでください。