CentOS5.0でOpenVPNを構築してみる。
最近家でLinuxをいじってるので、リモートからGUIで安全にアクセスするためVPNを構築することにしました。
■SSHじゃない理由。
だってSSHってコマンドベースだからVNC(GUI)使えないじゃないですか?そりゃlinuxいじるならCUIでやるのが普通ですが、諸所の事情でフルアクセスしたい時もあるわけです。
(追記)SSH port forwading使ってVNCの経路をセキュアにする手もあるらしい…。
■ということでVPN
いろいろ調べた結果、OpenVPNというのがメジャーらしいのでそれを使ってみることにしました。参考にしたのはこのサイト。
VPNサーバー構築(OpenVPN) – CentOSで自宅サーバー構築
基本的にはこのサイトだけ見ればOKです。が、ちょっと追記。
- (3)OpenVPN設定※クライアント側作業
client.ovpnにOpenVPNサーバの名前を指定するとなっていますが、ここはpingが通る名前(つまりIPアドレスかDNSで解決できる名前)を書いてください。「(1)CA証明書・秘密鍵作成 」でvarsの中に書いた名前ではないので注意。
- (4)証明書廃止リスト作成
- (6)VPNインタフェース用ファイアウォール自動設定
- (7)VPNインタフェース用ファイアウォール自動設定解除
- (8)OpenVPNログローテート設定
ここらへんは設定しなくても大丈夫。その他各種セキュリティ関係の設定もスキップしても取りあえず繋がります。最初に全部設定するのは大変なのでスキルに合わせてハードルを下げましょう。
また次のサイトも参考にするといいかも。
最初のサイトはコマンドメインで何をやっているか分かりづらいけど、2つ目のサイトは操作の意味もちゃんとフォローしています。ただし最初のサイトと作業の順番が違うので注意。やってることは同じなんですけど。
■実際の作業結果
上記サイトの通りにやったつもりでも、自分のミスで詰まる場合もあるわけで。
1.サーバで生成した証明書をクライアントにコピーする部分
サーバでクライアント用の証明書と鍵を生成してそれをクライアントPCにコピーするのですが、コピーするファイルを間違えてしまいました(汗 ただOpenVPNクライアントが「client1.keyねぇぞボケェェェ!」という分かりやすいログ出してくれたんで助かりました。
2.クライアント→サーバへのアクセス部分。
全部設定してさぁ接続→案の定失敗しました。こういうのって絶対一発で成功しないんだよなぁ。こんなエラー。
Fri Jun 15 00:12:47 2007 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) Fri Jun 15 00:12:47 2007 TLS Error: TLS handshake failed
メジャーなエラーメッセージらしく検索するとたくさん情報が出てきました
Re: [Openvpn-users] TLS key nego failed to occur within 60 secs
IT Department – HY-VPN troubleshooting on Windows
どうやらサーバ側に認証蹴られちゃったみたいですね。まんまやん!
このメッセージだけでは原因が分からなかったためもう一度設定を見直し→ルータ側でUDPパケットの転送を行っていなかったことが判明。いやTCPは転送かけてたんですけど…。UDPパケット転送設定を行うと接続に成功。ちなみに成功時はこんなログが出ます。
Fri Jun 15 00:15:02 2007 Local Options hash (VER=V4): 'xxx' Fri Jun 15 00:15:02 2007 Expected Remote Options hash (VER=V4): 'xxx' Fri Jun 15 00:15:02 2007 UDPv4 link local: [undef] Fri Jun 15 00:15:02 2007 UDPv4 link remote: xxx.xxx.xxx.xxx:1194 Fri Jun 15 00:15:04 2007 TLS: Initial packet from xxx.xxx.xxx.xxx, sid=xxxxxx xxxxxx Fri Jun 15 00:15:06 2007 VERIFY OK: depth=1, /C=JP/ST=Tokyo/L=xxxxxx/O=xxxxxx/CN=OpenVPN-CA/emailAddress=xxxxxx@test.jp Fri Jun 15 00:15:06 2007 VERIFY OK: nsCertType=SERVER Fri Jun 15 00:15:06 2007 VERIFY OK: depth=0, /C=JP/ST=Tokyo/L=xxxxxx/O=xxxxxx/CN=OpenVPN-CA/emailAddress=xxxxxx@test.jp Fri Jun 15 00:15:08 2007 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Jun 15 00:15:08 2007 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Jun 15 00:15:08 2007 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Jun 15 00:15:08 2007 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Jun 15 00:15:08 2007 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Fri Jun 15 00:15:08 2007 [server] Peer Connection Initiated with xxx.xxx.xxx.xxx:1194 Fri Jun 15 00:15:09 2007 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1) Fri Jun 15 00:15:10 2007 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' Fri Jun 15 00:15:10 2007 OPTIONS IMPORT: timers and/or timeouts modified Fri Jun 15 00:15:10 2007 OPTIONS IMPORT: --ifconfig/up options modified Fri Jun 15 00:15:10 2007 OPTIONS IMPORT: route options modified Fri Jun 15 00:15:10 2007 TAP-WIN32 device [ローカル エリア接続 4] opened: \.\Global\{%SID%}.tap Fri Jun 15 00:15:10 2007 TAP-Win32 Driver Version 8.4 Fri Jun 15 00:15:10 2007 TAP-Win32 MTU=1500 Fri Jun 15 00:15:10 2007 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.6/255.255.255.252 on interface {%SID%} [DHCP-serv: 10.8.0.5, lease-time: 31536000] Fri Jun 15 00:15:10 2007 Successful ARP Flush on interface [65541] {%SID%} # %SID% : ローカルエリア接続4のSID # xxx.xxx.xxx.xxx :グローバルIP
■余談。
うちの環境はCentOS5.0/WindowsXPPro。所要時間は2時間半くらい。参考Webサイトの手順を忠実に守れば誰でも設定できるけど、横道にそれた時はPKI・ネットワークの知識がモノをいいます。その点今回は詰まってもすぐ原因を見つけて解決できたのが良かったなぁと(自慢か)。真面目に設定すると穴空けやらめんどいので、ネットワークに苦手意識のある人はクロスケーブルでクラ/サバ繋いでテストするのがいいかもしれない。
あと新しい事に取り組むときは心に余裕を持つ事が大切ですねぇ。いらいらしてトライ&エラーモードになると正しい方法が目に入らなくなるし、はまったら取りあえずコンビニ行くなり風呂入るなりで気分転換してと。
■補助的なサイト達
参考にはしてないけど、今回検索してて使えそうな情報が掲載されていたページをリストアップ。
ディスカッション
コメント一覧
まだ、コメントがありません