Google oneのVPNサービスが終了してしまったので、公衆Wi-FiへiPhoneで接続する場合にある程度の通信経路の安全性を確保する手段が無くなってしまった・・・
仕方ないので自宅用メールサーバでリソースを余らせていた、さくらインターネットのVPSサーバでopenvpnサーバを立ち上げてみました。色々とググりながらだったので作業時間は3時間ほど。
完全に自分用の備忘録なので検索から訪れた方向けの詳細解説が皆無なのはご容赦。その代わりubuntuでopenvpnサーバを起動してiPhoneで接続するための情報は一通り揃っているはず。必要な情報だけをピックアップして作業する人向けです。
コマンド毎にsudoしろ!はごもっともですが面倒なので全てのコマンドはsudo /bin/bash後のroot権限で実行していますw
openvpnのインストール
apt -y install openvpn
cd /etc/openvpn
Easy RSAのインストール
私は独自ドメイン持ちなのでLet’s Encryptで発行したSSL証明書を持っているけれども、Webサービスと違って不特定多数が接続することは無くVPNサーバとVPNクライアントの間だけで信頼関係が確立できていれば良いのでオレオレ証明書の方が作業の手間が掛かりませんでした。
cd /etc/openvpn
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
初期設定値の変更
cp vars.example vars
vi vars
証明書の有効期限を3,650日に延長
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
サーバ証明書のインストール
./easyrsa init-pki
./easyrsa build-ca
cp pki/ca.crt /etc/openvpn
./easyrsa build-server-full server nopass
cp pki/issued/server.crt /etc/openvpn
cp pki/private/server.key /etc/openvpn
./easyrsa gen-dh
cp pki/dh.pem /etc/openvpn
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn
chmod o+r /etc/openvpn/crl.pem
openvpnサーバの設定
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf .
exampleのserver.confからの変更点
# crlで証明書のrevokeを確認する。所詮オレオレだし無くても良いけど。
crl-verify crl.pem
#DNSサーバのアドレスをVPNクライアントへ配布
push "dhcp-option DNS 8.8.8.8"
#VPNクライアント全てのトラフィックをopenvpn側へ流すようにするためコメントアウト
push "redirect-gateway def1 bypass-dhcp"
#自分しか使わないから最大クライアント数は 100→5へ減らす
max-clients 5
#openvpn@server のサービス起動後はrootからnobodyへ。ubuntuではnogroupなので注意
user nobody
group nogroup
ufwの設定を変更
FirewallへVPN通信の穴開け
「いい串」番ポートなので覚えやすいよねw
ufw allow 1194/udp
ポートフォワーディングの許可
VPNクライアントからの通信をインターネット側に流すようにします
vi /etc/default/ufw
#DEFAULT_FORWARD_POLICY="DROP"
DEFAULT_FORWARD_POLICY="ACCEPT"
vi /etc/ufw/sysctl.conf
#フォワーディングを許可するためにアンコメントする
net/ipv4/ip_forward=1
#一番最後の行にある COMMIT の次行以降に 以下 *nat からの4行を追記する。さくらインターネットのVPSサーバでは ens3 だけど、インターネットと通信するインタフェース名を ifconfig で要確認
vi /etc/ufw/before.rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE
COMMIT
ufwを再起動、openvpnサーバを起動
ufw reload
systemctl start openvpn@server
systemctl start openvpnだとsystemctl status openvpn では起動しているように表示されるのだけど、ps -ef | grep openvpn すると実際のプロセスとしては動作しないんだよなぁ。openvpnクライアントも動作させようとしてエラー終了してる??(未確認)
なので、openvpnサーバだけを明示的に起動させています。
openvpnサーバを自動起動させるようにする
systemctl disable openvpn
systemctl enable openvpn@server
systemctl is-enabled openvpn openvpn@server
disabled
enabled
上記赤文字で記載した部分のようにopenvpnがdisable、openvpn@serverがenableで表示されていればOK
iPhoneでopenvpnサーバに繋げる
クライアント用の秘密鍵を作成
usernameは自分の好きなユーザ名でOK。この後コピペするのでcatしておく
cd /etc/openvpn/easy-rsa/easyrsa3
./easyrsa build-client-full username
cat pki/issued/username.crt pki/private/username.key
ここからの作業はopenvpnサーバでは無く、手元のMac端末で作業します
Finderから「ターミナル」をもうひとつ起動
cd Documents
vi openvpn.opvn
テキストファイル(openvpn.opvn)の内容
client
dev tun
remote VPNサーバのIPアドレス 1194
persist-key
persist-tun
<ca>
-----BEGIN CERTIFICATE-----
ここにca.crtの内容をコピペ
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
ここにクライアント用 username.crt の内容をコピペ
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN ENCRYPTED PRIVATE KEY-----
ここにクライアント用 username.key の内容をコピペ
-----END ENCRYPTED PRIVATE KEY-----
</key>
iCloudで自動同期できていれば「書類」フォルダにopenvpn.ovpnファイルが作成されているはず。
ここからの作業はiPhoneで実施します
- iPhoneに OpenVPN Connect をインストールする
- iPhoneの「ファイル」アプリを起動
- 書類フォルダに移動
- openvpn.ovpnをクリック
- 画面左下の「共有」アイコンをクリック
- openvpnをクリックしてopenvpnクライアントアプリに設定をインポートする
完成!
参考にしたサイト
コメント