15年くらい前に中国のインターネット検閲の話をすると「本当?」とか言う話になったが、今では当然のようにニュースになる今日この頃。
以前は、Webを見ていると突然切断される、という感じだった。
おそらくはキーワードでサイト内にNGワードが入ると切断されていたように思われる。
今ではもっと巧妙になっているのかもしれないが、Webを遮断するということはどうやら続いているらしい。
その中にFacebookも含まれているので、本当に使えるかどうかは分らないが、いくつか回避方法を準備してゆくことにしました。
■VPNを用意
VPNとは、VIrtual Private Networkのことで自分のパソコンと特定サーバとの間に安全なネットワーク経路を作ることを意味する。
図ではわかりやすさのためにWebアクセスの説明だが、原理的にはVPN経由でどんな通信も可能になる。
検索するといろいろ出てくるのでそういった既存サービ試してみようと思っているが、自分でも作れるようなので、ちょうど5月末で解約予定のサーバ(さくらのVPS)に設定してみた。
■サーバスペック
さくらのVPS
Linux (CentOS)
OpenVPN
■クライアント
標準のOpen VPNクライアント http://www.openvpn.jp/document/openvpn-gui-for-windows/ では何かがうまくいかなかったので Vpnux http://www.vpnux.jp/ を利用。
■サーバ設定メモ
インストール
yum install openvpn
起動
/etc/init.d/openvpn start
Linuxブート時に自動起動
chkconfig openvpn on
最初は以下フォルダは空
ls /etc/openvpn/
サンプル設定をコピーしてひな形にする
cp /usr/share/doc/openvpn-2.3.6/sample/sample-config-files/server.conf /etc/openvpn/
OpenVPNサーバ証明書の作成
yum install easy-rsa
cd /usr/share/easy-rsa/2.0
source ./vars
./clean-all
./build-ca
→証明書の情報を入力。重要なのはコモンネームくらいで後は適当に入力
./build-key-server server
→証明書の情報を入力。重要なのはコモンネームくらいで後は適当に入力
接続ユーザ用の証明書作成
./build-key username
./build-dh
シンボリックリンクを張る
cd /usr/share/easy-rsa/2.0
ln -s /usr/share/easy-rsa/2.0/keys/ca.crt .
ln -s /usr/share/easy-rsa/2.0/keys/server.crt .
ln -s /usr/share/easy-rsa/2.0/keys/server.key .
ln -s /usr/share/easy-rsa/2.0/keys/dh2048.pem .
設定
vi /etc/openvpn/server.conf
以下に設定
ca /usr/share/easy-rsa/2.0/ca.crt
cert /usr/share/easy-rsa/2.0/server.crt
key /usr/share/easy-rsa/2.0/server.key
dh /usr/share/easy-rsa/2.0/dh2048.pem
portがデフォルトだと中国から繋がらない(らしい)ので、一旦接続テスト完了後に変更
OpenVPN再起動
/etc/init.d/openvpn restart
VPNのためのIP Forwardingを設定
vi /etc/sysctl.conf
ip_forwardを1にする
net.ipv4.ip_forward = 1
設定再読込
sysctl -p
クライアント用秘密鍵をクライアント端末(PC, Android)にコピー
/usr/share/easy-rsa/2.0/keysにある以下ファイルが対象
ca.crt
username.crt
username.key
このusername.keyは重要なので、転送する時それを覗き見られると危険なので注意する。
Firewall設定
他の設定に加え、次を設定
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
もちろん、実運用時は1194では中国から繋がらない(らしい)ので適当に変える
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
このあたりは、繋がらなければ後ほど調整するのでとりあえずこんな感じで。