さくらのVPSで構築する簡易VPNサーバー
中国に旅行に行く時にやっておくと安心なのがグレートファイアウォール対策です。
スマホにはグレートファイアウォールをかわせるSIMを入れれば大丈夫ですが、パソコンを使いたい時やホテルにいる時はWifiを使いたくなります。
そういう時はVPNが欠かせないですが、数日旅行のためだけにわざわざ契約して使わなくなったら解約するのも手間ですし、そこで悩むぐらいなら手で動かせるわけなので自前のサーバーを立てようと思うわけです。
でAWSで立てようとしましたが、普通にグレートファイアウォールに引っかかりそうだしどこかいいところないか探していたら、中国で見れるサイトならさくらのVPSという記事を見つけ、これならいけそうと確信しました。
というわけで前置きが長くなりましたが、今回はさくらのVPSを使って個人が使う簡易的なVPNサーバーを構築する方法を紹介します。
サーバーを立ち上げる
まずはさくらのVPSでサーバーを立ち上げます。
「サーバーの追加→VPS」から新規サーバーの設定画面を開いたらOSは「Ubuntu 24.04 amd64」を選択します。

プランは何でも結構です。今回は1Gプランを選択しました。

サーバーに接続するための情報を設定します。パスワードは必ず設定し、手元のターミナルからSSHで接続したい時は公開鍵を追加しておくと便利です。

あとは支払い情報を登録してサーバーを立ち上げます。
OpenVPNのインストール
続いてOpenVPNをインストールして、VPNサーバーを構築します。
構築するサーバーは以下のスクリプトを使用します。
サーバーが立ち上がったら、SSH、またはサーバー管理画面のコンソールからサーバーに接続します。
接続をしたら、以下のコマンドでセットアップ用のスクリプトをダウンロードします。
sudo apt update && sudo apt upgrade -y
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
以下のコマンドでスクリプトに実行権限をあたえ、実行します。
chmod +x openvpn-install.sh
sudo ./openvpn-install.sh
実行するといくつか質問をされるので、以下の通りで答えます。基本的にはデフォルトの値が掲載されているので、最低限接続したい場合はそのままEnterキーを押して進めば問題ないです。
I need to know the IPv4 address of the network interface you want OpenVPN listening to.
Unless your server is behind NAT, it should be your public IPv4 address.
IP address: 【サーバーに設定されているIPv4アドレス】
Checking for IPv6 connectivity...
Your host does not appear to have IPv6 connectivity.
Do you want to enable IPv6 support (NAT)? [y/n]: n
What port do you want OpenVPN to listen to?
1) Default: 1194
2) Custom
3) Random [49152-65535]
Port choice [1-3]: 1
What protocol do you want OpenVPN to use?
UDP is faster. Unless it is not available, you shouldn't use TCP.
1) UDP
2) TCP
Protocol [1-2]: 1
What DNS resolvers do you want to use with the VPN?
1) Current system resolvers (from /etc/resolv.conf)
2) Self-hosted DNS Resolver (Unbound)
3) Cloudflare (Anycast: worldwide)
4) Quad9 (Anycast: worldwide)
5) Quad9 uncensored (Anycast: worldwide)
6) FDN (France)
7) DNS.WATCH (Germany)
8) OpenDNS (Anycast: worldwide)
9) Google (Anycast: worldwide)
10) Yandex Basic (Russia)
11) AdGuard DNS (Anycast: worldwide)
12) NextDNS (Anycast: worldwide)
13) Custom
DNS [1-12]: 11
Do you want to use compression? It is not recommended since the VORACLE attack makes use of it.
Enable compression? [y/n]: n
Do you want to customize encryption settings?
Unless you know what you're doing, you should stick with the default parameters provided by the script.
Note that whatever you choose, all the choices presented in the script are safe (unlike OpenVPN's defaults).
See https://github.com/angristan/openvpn-install#security-and-encryption to learn more.
Customize encryption settings? [y/n]: n
この後、任意のキーを入力するとインストールが実行されます。
途中で以下の質問が入力されるので、任意のVPNクライアント名を入力します。
Tell me a name for the client.
The name must consist of alphanumeric character. It may also include an underscore or a dash.
Client name: 【任意のクライアント名を入力】
続けて、以下の質問が表示されるので、必要に応じてパスワードを設定します。
Do you want to protect the configuration file with a password?
(e.g. encrypt the private key with a password)
1) Add a passwordless client
2) Use a password for the client
Select an option [1-2]: 1
以上で質問は終了し、最終的には以下の通りovpnファイルのパスが表示されたら、インストールは完了です。(表示されるパスはお手元の実行結果を確認してください)
The configuration file has been written to /home/ubuntu/sakura.ovpn.
パスを確確したら、ovpnファイルを手元にダウンロードします。SSHで接続している場合は、scpコマンドでダウンロードします。
scp ubuntu@【サーバーのIPアドレス】:/home/ubuntu/sakura.ovpn .
パケットフィルターの設定
いよいよ接続、といきたいところですが現状の設定だと接続しても接続エラーになるかと思います。それは、パケットフィルターの設定で、OpenVPNのポートが開放されていないためです。
OpenVPNのポートはデフォルトで設定していれば 1194/UDP なので、さくらのVPSの管理画面からパケットフィルターの設定を行います。
サーバー管理画面の「パケットフィルター設定」からプロトコル「UDP」、ポート番号「1194」を解放するように設定します。なお、わかりやすくするため、フィルター名を VPN としていますが、任意の名前で問題ありません。

VPNクライアントから接続する
以上でVPNサーバーの構築は完了です。
あとは手元のPCやスマホにOpenVPNクライアントをインストールして、先ほどダウンロードしたovpnファイルをインポートするとVPNに接続できるようになります。
インポートした接続情報で接続操作を行い、以下のようにネットワーク通信量が表示されたらVPNは正常に起動しています。

まとめ
今回はさくらのVPSを使ってグレートファイアウォールを回避できるVPNを簡易的に構築してみました。
使い慣れたAWSだと中国ではアクセスが難しいので、日本にデータセンターのあるさくらのクラウドは中国からアクセスできるのは安心しました。
そしてスクリプトをつかうだけでサーバー構築も簡単にできるので、中国渡航する前に時間作ってVPN用意しておくのはおすすめです!(ただし、やる場合は自己責任で…)
Discussion