Alibaba Cloudを使ってShadowsocks接続を加速する

owner203は今中国国内からブログを書いています。既に有名な話ですが、中国国内からのインターネット接続は通常いろいろ規制がかかっています。そこで、規制を突破するための手段を用意しないといけません。owner203の世界ではShadowsocksが導入されています。しかし、今回新しい規制がかかったことを、owner203が気づきました。

一部のインターネットプロバイダでは、海外への通信スピードが意図的に制限されています。Shadowsocksは使えないというわけではないが、スピードが1Mbpsぐらいに制限されます。場合によっては重く感じることもあります。何か解決策がないでしょうか?

いろいろ検索してみたら、Alibaba Cloudの香港サーバーを踏み台として、ConoHaからのパケットをAlibaba Cloudを経由させて使ったら、スピードが改善されるらしいです。早速やてみましょう。Alibaba Cloud国際版の最小構成を契約します。OSはUbuntuを選択して、初期設定をやります。初期設定が済んだら、次の操作をやります。

サーバーの設定

パケット転送機能の有効化

まずip_forwardを有効にします。コマンドは簡単です。

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p #確認する

iptablesの設定

iptablesのパケット転送機能を使って、特定ポートのパケットをConoHaに転送します。owner203の世界ではShadowsocksが443番ポートを使っています。Alibaba CloudはパブリックIPアドレスではなくプライベートIPアドレス(内部IPアドレス)を使います。

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination ConoHa_ip_address:443
iptables -t nat -A PREROUTING -p udp --dport 443 -j DNAT --to-destination ConoHa_ip_address:443
iptables -t nat -A POSTROUTING -p tcp -d ConoHa_ip_address --dport 443 -j SNAT --to-source Alibaba_private_ip
iptables -t nat -A POSTROUTING -p udp -d ConoHa_ip_address --dport 443 -j SNAT --to-source Alibaba_private_ip

iptablesの設定は一時的なものなので、それを保存するためには他の手段を使う必要があります。owner203はiptables-persistentを使っています。

apt install iptables-persistent
netfilter-persistent save

クライアントの設定

Shadowsocksクライアントでは、サーバーIPアドレスをAlibaba CloudのパブリックIPアドレスに変更すればOKです。他の設定はそのままにします。