ゼロ円でできるインターネットVPN
OpenVPNで手軽にVPN構築

Shin.鶴長
2008/5/2

OpenVPNのインストール(2)

サーバ側の作業

 続いて、サーバ側だけで必要となる作業を実施します。

 VPNクライアントがサーバ側セグメントのネットワーク機器と通信するには、クライアントに割り当てられたIPアドレスがサーバを越えて通信できるよう、経路制御を行う必要があります。そのためにはOpenVPNサーバのパケット転送を有効にし、IPマスカレードを実装します(注2

注2:iptablesやファイアウォールが有効になっている場合には、OpenVPNのサービスで使用するUDPまたはTCPポート1194番を通過するよう設定するか、iptablesやファイアウォールの起動を無効化する必要があります。

・LinuxでIPマスカレード機能を使用する場合

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

・Linuxのインターフェイス間のIPパケット転送を有効にする場合(ただし、再起動でリセットされます)

# echo 1 > /proc/sys/net/ipv4/ip_forward

・再起動後もIPパケット転送を有効にさせる場合は、さらに「/etc/sysctl.conf」ファイルを修正

...省略...
# Controls IP packet forwarding
net.ipv4.ip_forward = 1      ←「1」に修正
...省略...

 ただし、これだけでは、VPNクライアントからサーバセグメントへの疎通が可能になっても、サーバセグメントからVPNクライアントへの送信はできません。10.8.0.0/24に対するパケットをOpenVPNサーバ(10.0.0.128)に送信するよう、デフォルトルータや各ネットワーク機器に経路情報を設定する必要があります。経路情報の設定方法は各機器で手順が異なるためここでは言及しませんが、各マニュアルに従い設定するようにします。

 次に、CA証明書、サーバ証明書、サーバ秘密鍵、DHパラメータを/etc/openvpn/下にコピーします。続けて秘密鍵ファイルのパーミッションを変更し、鍵自身が盗聴改ざんされないように対策します。

・CA証明書、サーバ証明書、サーバ秘密鍵、DHパラメータの準備

# cd /etc/openvpn/
# cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt .
# cp /etc/openvpn/easy-rsa/2.0/keys/server.crt .
# cp /etc/openvpn/easy-rsa/2.0/keys/server.key .
# cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem .
# chmod og-rx /etc/openvpn/*.key

 最後にserver.confを修正します。

 なおOpenVPN起動時には、/etc/openvpn/○○.confファイルが自動で読み込まれるため、/etc/openvpnディレクトリにはserver.conf以外に○○.confファイルを置かないようにします。前半の「サーバ・クライアントに共通な作業」でclient.confを誤ってコピーしてしまった場合は、削除してください。

・「/etc/openvpn/server.conf」の修正

port 1194          ←サービスポートの指定
proto udp          ←使用プロトコルの指定
dev tun           ←ルーティング方式ではtunを選択
ca /etc/openvpn/ca.crt    ←CA証明書ファイルの指定
cert /etc/openvpn/server.crt ←サーバ証明書ファイルの指定
key /etc/openvpn/server.key ←サーバ秘密鍵ファイルの指定
dh /etc/openvpn/dh1024.pem  ←DHパラメータファイルの指定
server 10.8.0.0 255.255.255.0←VPNクライアントに割り振られるIPアドレス(10.8.0.1はサーバ自身のtanインターフェイスに割り当てられる)
ifconfig-pool-persist ipp.txt←クライアントに割り振られたIPアドレスを管理するファイル
push "route 10.0.0.0 255.255.255.0" ←OpenVPNサーバ側のLANセグメントの経路情報をクライアントに伝達
client-to-client       ←OpenVPNクライアント同士の通信を許可
keepalive 10 120       ←サーバ・クライアント間の死活監視の設定
comp-lzo           ←LZO圧縮の利用
max-clients 10        ←最大同時接続クライアント数
user nobody         ←デーモンプロセスのユーザーを指定
group nobody         ←デーモンプロセスのグループを指定
persist-key         ←不意な切断が発生した後の再接続処理の設定
persist-tun         ←不意な切断が発生した後の再接続処理の設定
status /var/log/openvpn-status.log ←ステータスログの指定
log /var/log/openvpn.log   ←ログファイルの指定
verb 3            ←ログレベルの指定

 server.confファイルの修正が完了したところで、サービスを起動します。サービスが正常に起動しない場合は/var/log/openvpn-status.log、/var/log/openvpn.log、/var/log/messagesファイルに出力されるエラー内容に従い対策を施します。

・OpenVPNサーバの起動

# /etc/init.d/openvpn start
(# /usr/sbin/openvpn /etc/openvpn/server.confでも可能)

・OpenVPNサーバの停止

# /etc/init.d/openvpn stop

・正常に起動した場合には/var/log/openvpn.logに以下のような1行が出力される

Wed Mar 19 09:50:24 2008 Initialization Sequence Completed

クライアント側の作業

 続いて、クライアントの設定を行います(注3)。複数のVPNクライアントがある場合は同様の作業を繰り返し行います。

 サーバで作成したCA証明書、クライアント証明書、クライアント秘密鍵をクライアントの/etc/openvpn/ディレクトリにコピーします。コピー完了後、/etc/openvpn/ディレクトリに次のようなファイルが用意されていることを確認します。ファイル確認後、秘密鍵のパーミッションを変更し、鍵自身が盗聴・改ざんされないよう対策します。

注3:iptablesやファイアウォールが有効になっている場合には、OpenVPNのサービスで使用するUDPまたはTCPポート1194番を通過するよう設定するか、iptablesやファイアウォールの起動を無効化する必要があります。

・「/etc/openvpn/」ディレクトリ下のファイル

ca.crt    ←CA証明書
client.conf  ←設定ファイル(冒頭の「サーバ・クライアント共通に必要な作業」で用意されます)
client01.crt ←クライアント証明書
client01.key ←クライアント秘密鍵(便宜上、VPNクライアントの名前をclient01として証明書・秘密鍵を作成しています。実際のホスト名やDNSの登録名がclient01である必要はありません)

・秘密鍵のパーミッション変更

# chmod og-rx /etc/openvpn/*.key

 client.confファイルを次のように修正し、その後サービスを起動します。

 なお、OpenVPN起動時には/etc/openvpn/○○.confファイルが自動で読み込まれるため、/etc/openvpnディレクトリには、cliet.conf以外に○○.confファイルを置かないようにします。前半の「サーバ・クライアント共通に必要な作業」でserver.confを誤ってコピーしている場合は削除します。

・「/etc/openvpn/client.conf」の修正

client            ←クライアントであることを明示する
dev tun           ←ルーティング方式ではtunを選択
proto udp          ←使用プロトコルの指定
remote vpn.example.jp 1194  ←OpenVPNサーバを指定。疎通可能なIPアドレスとポート番号を指定します
resolv-retry infinite    ←OpenVPNサーバのホスト名→IPアドレス結果を保持
nobind            ←ローカルポート番号をバインドしない
persist-key         ←不意な切断が発生した後の再接続処理の設定
persist-tun         ←不意な切断が発生した後の再接続処理の設定
ca /etc/openvpn/ca.crt    ←CA証明書ファイルの指定
cert /etc/openvpn/client01.crt ←クライアント証明書ファイルの指定。client02.crtなど適宜変更のこと
key /etc/openvpn/client01.key  ←クライアント秘密鍵ファイルの指定。client02.keyなど適宜変更のこと
comp-lzo           ←LZO圧縮の利用
verb 3            ←ログレベルの指定
pull             ←OpenVPNサーバから追加パラメータがあれば受け取る
float            ←OpenVPNサーバからtun仮想インターフェイスのIPアドレスを取得する

 OpenVPNを起動してVPN接続を開始するには、initスクリプトを利用するか、直接openvpnコマンドを実行します。正常に起動しない場合は/var/log/messagesファイルに出力されるエラー内容に従い対策を施します。

・OpenVPN接続と切断(initスクリプトを利用する場合)

# /etc/init.d/openvpn start
(# /usr/sbin/openvpn /etc/openvpn/client.confでも可能)
Enter Private Key Password: ←クライアント証明書を作成した際に使用したパスフレーズを入力する

・OpenVPNサーバの停止

# /etc/init.d/openvpn stop

・VPN接続が確立した場合には/var/log/messagesファイルに以下のような1行が出力される

Mar 19 12:22:57 ○○ openvpn[11905]: Initialization Sequence Completed

疎通はできた? 動作確認

 では、OpenVPNクライアントからサーバやサーバ側セグメントのネットワーク機器にpingを打つなどして、VPN接続が成功していることを確認します。もし疎通ができないようなら、ifconfigやnetstatなどのコマンドで、サーバからIPアドレスが割り当てられ、経路設定が行われているかを確認してください。

・ネットワークインターフェイスを確認する

# /sbin/ifconfig
...省略...
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255 ←(※注)
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
...省略...

※注:tun仮想インターフェイスにOpenVPNサーバからIPアドレスが割り当てられている

・経路情報を確認する

# netstat -er
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.5 * 255.255.255.255 UH 0 0 0 tun0
10.0.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0 ←※1
10.8.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0 ←※2
192.168.232.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.232.2 0.0.0.0 UG 0 0 0 eth0

※注1 サーバ側セグメント(10.0.0.0/24)の経路情報が設定されている
※注2 VPNセグメント(10.8.0.0/24)への経路設定が行われている

 以上、OpenVPNを使ったインターネットVPNの設定方法を解説しました。

 インターネットVPNは、会社にいながら自宅のPCとPeer to Peerで接続できるなど、さまざまな用途に利用できますが、VPNの導入には、Linuxの知識だけでなくネットワークの知識が求められます。

 また、使用する場所やポリシーなどに十分配慮する必要があります。繰り返しになりますが、VPN上のパケットは暗号化されているため、IPSやファイアウォールでパケットの中身を判断することができません。そのため多くの場合、社内での勝手なVPNの使用は禁止されています。OpenVPN導入の際には、ネットワーク管理者に相談するなど、コンプライアンスに違反しないよう注意しながら進めてください。

4/4

Index
ゼロ円でできるインターネットVPN
  OpenVPNで手軽にVPN構築
  Page 1
 元祖仮想化はネットワーク?
 さまざまな種類のVPN
  Page 2
 インターネットVPNの使用例
 多様な環境で利用できるOpenVPN
 ルーティングとブリッジ、2つの通信方式
  Page 3
 OpenVPNのインストール
Page 4
 OpenVPNのインストール(2)
 疎通はできた? 動作確認


 Linux Squareフォーラム 仮想化技術関連記事
連載:実践! Xenで実現するサーバ統合
有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します
特集:サーバの仮想化技術とビジネス展開の可能性
jailからUML/VMwareまで
1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった
特集:仮想化技術のアプローチと実装
VMwareから要注目技術Xenまで

1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう
特集:仮想OS「User Mode Linux」活用法
技術解説からカーネルカスタマイズまで
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
特集:仮想化技術の大本命「Xen」を使ってみよう
インストール & Debian環境構築編

高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう
特集:仮想化技術の大本命「Xen」を使ってみよう
Xen対応カスタムカーネル構築編

Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる
特集:IPv6、UML、セキュリティ機能の統合
全貌を現したLinuxカーネル2.6[第4章]

今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう
Linux Squareプロダクトレビュー VMware Workstation 4
PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう
古くて新しい「サーバ仮想化技術」の行方
サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する
Linux Squareフォーラム全記事インデックス


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間