雨と涙とOpenVPN
たんなる愚痴と、最近のOpenVPNでちょっと前とかわっていたので、私のメモです。
先日…
「では、今日からこのWindowsサーバー管理してくださいね。でもFirewallによって守られているので、通常は接続はできません」
「了解です、では私のIPは…」
「いや、それにはおよびません!「ほげほげびゅーわー』というアプリがありますので!それで踏み台になる私のPC経由で接続してください!」
「エッ…是非FWの設定かえてほしいのですが」
「色々(略)な(略)理由(略)で、FWだけは変えられません!」
「そうですか…でも作業が正直できないです。FWを変更しなければ良いですか?VPNとかを使うとか…」
「それはかまいません」
まったくもってよくある話
書くと長くなるしまずいから書かないけど、こういう状況は二度や三度や片手や両手ではないですね。*1
踏み台と称されたVNCなどでつながるサーバーだけを渡されて、隔靴掻痒、苦肉の策、二回から目薬、管中窺天、井の中の蛙(いくつかおかしい)という感じはたまによくあります(エッ)
Windowsという時点で管理したくないのに、なんかよくわからないソフトを使って、よくわからない感じで接続しなきゃいけない、死ぬ。
所で、思うにVPNは決定版がまだない…。
今回は、私は普段Macをつかっていて、VPNの連携サーバーはワンコイン的なVPSで、客先はWindows Server 2008です。
昔、Hamachiというやつがあって(今もあるにはあるが)あれはGUIもよくできていて、安定していて、サーバーもいらない、というかなりの決定版なりえたのだが…有料化&Windows専用化っぽいのでつかわなくなった。
業界標準とかいわれているIPSecやPPTPは「一部の環境を除き」スゴイ使いづらい*2、相性やらなんやら、いまどきNATを超えるのもためらうのはどうなのか。商用のSSL-VPNはわりと使いやすいけど、当然高い。
候補を消していくと、結局OpenVPNしかない。
(あ、SoftEtherもある。最近またフリーになったらしいですね。でも話題を聞かないのでつかってないですね…、今みたらよさそうではあります)
これしかないんだ!
まあ、結局これしかないので、これを使いましょう。
1,Linuxサーバーの設定
EPELをいれるなりして、yum install openvpnしてください。もちろんソースからBuildしてもよいでしょう。
あとは設定ファイルを書くのですが、rpmで入れると
/usr/share/doc/openvpn-2.2.2/sample-config-files
ここらへんにサンプルファイルがあります。
/etc/openvpn/server.confとかにコピーして修正しましょう。
port 1194 proto udp dev tun server 10.99.99.0 255.255.255.0 client-to-client keepalive 10 120 comp-lzo persist-key persist-tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh2048.pem ifconfig-pool-persist ipp.txt status /var/log/openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log verb 3 mute 20
まあ、理由もなければいじるべき所はあんまりないんですけど
server 10.99.99.0 255.255.255.0
ここらへんは趣味や宗教上の理由で変えてください(VPNで使われる、ネットワークになります)
ところで、easy-rsaが無い
OpenVPNは大量に証明書やらをつくらないといけないのですが、easy_rsaというオレオレ証明書をつくったりの手間をはぶくツールがついてきます…ついてくるはずなんですけど、昔は同梱されてた記憶があるんですけど、今は同梱して無いみたいですね?
https://github.com/OpenVPN/easy-rsa
easy-rsa/easy-rsa/2.0/
の中にある
vars
を適当に書き直して
source vars ./build-ca ./build-key-server server ./build-dh
とかして、keys/ の中にある必要そうなファイル
ca.crt server.crt server.key dh2048.pem
ここらを/etc/openvpnとかにコピーします。
(easy-rsaは今後もつかうので、削除したらダメです)
ここまでで確かopenvpn自体は起動まではするはずなので
openvpn server.conf
とかやってみて、確認しましょう。
(コンフィグに指定したログファイルに、起動完了的なことが出ているはず)
あとは必要に応じて/etc/sysctl.confの net.ipv4.ip_forward = 1 と書き換えて、/sbin/sysctl -p で反映し、
iptablesに、適当にこんな感じのルールを追記すると。
[0:0] -A INPUT -p udp -m udp --dport 1194 -j ACCEPT [0:0] -A OUTPUT -o tun+ -j ACCEPT [0:0] -A FORWARD -o tun+ -j ACCEPT [0:0] -A INPUT -i tun+ -j ACCEPT
後は/etc/init.d/openvpn start であげておけば、サーバー側の設定完了です。
WindowsにClientを入れる
OpenvpnはOpenだけあって実装が沢山有ります。本家のやつを使うと非常に面倒なので、手軽に使いたいならGUIのクライアント使いましょう。
http://www.vpnux.jp/
たとえばこれは単純でわかりやすいですね(ログオフできないけど)、絶対これがいいとは言わないですけど。
Windowsにクライアントインストールした後、サーバーにログインするために証明書作ります。
サーバーのeasy_rsaで、
./build-key client-01
とかやりましょう。
keys/の中にclient-01.crtとkey、ca.crtがありますので、これらをWindowsにコピーして、適当に設定すれば動くはず。
もしつながりそうでつながらない時は、大抵設定でTunかTapかの指定を間違えていると思います。Linuxサーバー側の設定をTunにしたら、Tunにしておきましょう。
MacにClientを入れる
Windows同様ですが、
http://code.google.com/p/tunnelblick/
がいいんじゃないですかね、これまた絶対これがいいとは言わないですけど。
インストールして起動すると、ダイアログでああしろこうしろといわれるので、適当にやりましょう。英語が読めれば迷う所ないと思います。
注意として、Windowsの時に作った証明書は使い回しできないので、
./build-key client-02
とかやりましょう。
ということで、出来ました。
簡単ですね、ネットワークまわりって失敗したら一発で通信途絶で首くくるしかないんですが、比較的OpenVPNは安全かなと思います(凝ったことしなければ、ルーティングテーブルを自分で書かなくて良いので)
そしてさすがudpのVPNですね、レイテンシ低くて満足です…。TCPにすればフォワードとの相性も抜群です。
適当なVPNにサーバーを立てる事で、気楽にVPNつくれてたのしいのでみんなもVPN作りましょう。
おわり。