[メモ] 11 March 2011 はてなブックマーク - 例のVPNがブロックされたので自前でlinodeにVPN立てた。 Twitterでつぶやく

例のVPNがブロックされたので自前でlinodeにVPN立てた。

上海界隈では有名なVPNが中国からブロックされたので自前でVPN立てたので、その設定メモ。オリジナルはlinodeのドキュメント(一番下の参考を参照)、消失時様にメモしておく。
ちなみに、サーバ環境、クライアント環境ともにUbuntu10.04 LTS 64bit、あとCyanogenMod6.1.1のAndroidでも確認済み。

▽ サーバ側openvpnの設定方法(rootで作業)
必要なソフトを入れる。
apt-get install openvpn udev dnsmasq
cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn
設定ファイル /etc/openvpn/easy-rsa/2.0/vars を適宜修正
export KEY_COUNTRY="US"
export KEY_PROVINCE="JP"
export KEY_CITY="Tokyo"
export KEY_ORG="makino-style.org"
export KEY_EMAIL="******@example.com"
サーバ証明書、鍵の構築
cd /etc/openvpn/easy-rsa/2.0/
. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/clean-all
. /etc/openvpn/easy-rsa/2.0/build-ca
. /etc/openvpn/easy-rsa/2.0/build-key-server server
クライアント証明書、鍵の構築
. /etc/openvpn/easy-rsa/2.0/build-key client1
client1は適当な名前を設定してOK
次に、"Diffie Hellman Parameters"を生成(意味は知らない)
. /etc/openvpn/easy-rsa/2.0/build-dh
後でクライアントへDLしておくべきファイルは以下3つ
ca.crt
client1.crt
client1.key
openvpnサーバ起動に必要な証明書、鍵を移動
cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn
サンプル設定ファイルをコピー
cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
以下は、一部linodeドキュメントとは異なる設定。 /etc/openvpn/server.conf の設定を編集、ポートの変更、pushのコメントアウト。
port 1199
push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"
※ ちなみにdhcp-optionは最初のdnsmasqのインストールが必須なので注意。
ここまで終わったら、openvpnを再起動
/etc/init.d/openvpn restart
先程のクライアント用のファイルをローカルで取得して接続テストする。接続ができたらいったん切断して下記のルーティングの設定にうつる。

この後の続きで、大事なルーティングの設定。

▽ サーバのNAT設定
/etc/sysctl.conf を編集、ip4の転送許可を記述
net.ipv4.ip_forward=1
あと、今すぐ使えるようにするためにはprocへ設定を流す
echo 1 > /proc/sys/net/ipv4/ip_forward
自分はこれを忘れてちょっとハマった。
次にiptablesでNATを設定する。 /etc/rc.local に下記を記述する。
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
内容は10.8.0.*で入ってきた奴を全部IPマスカレードでeth0へ転送する。ちなみにこれも、今すぐ使えるようにするためには、コンソールで以下を実行、まあ同じ内容なんだけどね。
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

ここまでで、一応VPNが利用できるようになる。あとクライアント側の設定でLZO圧縮を忘れないこと。

▽ Androidから接続の件
通常の方法ではAndroidはOpenVPNをつかえないので、自分で入れるか、OS自体をCyanogenModなどに入れ替えるかする必要がある。
で、CyanogenModのOpenVPNではアクセスポイントを設定する前にサーバ証明書、クライアント証明書、クライアント鍵の3ファイルを1つにパックしたp12ファイルを"Location & security settings"にてインポートしておく必要がある。
以下、p12ファイルの作成方法。なお作成時に聞かれるExportPasswordはAndroid側でImportするときに入力を要求される。
openssl pkcs12 -export -in [PathToClientCert] -inkey [PathToClientKey] -certfile [PathToCACert] -name [FriendlyName] -out certs.p12


参考:

Deploy VPN Services with OpenVPN - Secure Communications with OpenVPN on Ubuntu 10.04 (Lucid) - Linode Library
http://library.linode.com/networking/openvpn/ubuntu-10.04-lucid

CyanogenMod OpenVPN GUI – how to load keys&certs Personal devlog
http://olorin.info/blog/2010/03/cyanogenmod-openvpn-gui-how-to-load-keyscerts

▽ linodeについて
いわゆるVPSの会社で、サポートも良いです。私が申し込んでいるのは月$19.95のLinode 512プランで、RAM 512MB/HDD 16GB/転送量 200GBというスペックです。サイトはいくつかありますがfremont(西海岸)がお薦めです。

あ、もしlinode申し込んでも良いと思ったら、下記で申し込んでもらえると私に紹介料(利用料の支払いにあてられるのかな)入るらしいので是非よろしくです。
紹介コード: 62d6035909920012e35594efcd001525dc58be78
紹介URL: http://www.linode.com/?r=62d6035909920012e35594efcd001525dc58be78

Comments

No comments yet

Add Comment

このアイテムは閲覧専用です。コメントの投稿、投票はできません。