中国からFacebook等が使えない(らしい)ので回避方法(VPN)を用意

2015-04-02 記載
トピック世界一周2015-16

最近は有名になってきた中国のインターネット事情。
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


このあたりは、繋がらなければ後ほど調整するのでとりあえずこんな感じで。