漢なら GCE で CoreOS で OpenVPN サーバ建てたいですよね!
やりましょう!
(2020 年 4 月 10 日追記): CoreOS は終了しました https://coreos.com/os/eol/
後継は Fefora CoreOS ですが, GCE ですと Fedora CoreOS には現状対応していません. Container optimized OS を選ぶとよさそうです.
前提条件
- OS のアップデート対応が面倒なので CoreOS(stable) の自動アップデートに頼りたい
- 起動中の OpenVPN docker インスタンスも再起動してくれるはず?
- udp 1194 ポートで VPN 通信をする
- GCP ダッシュボードで設定を行う
手順
VPN サーバを CoreOS で立てる大まかな手順は
月 5 ドルくらいで Docker で簡単に OpenVPN 環境を手に入れる
https://qiita.com/jyane/items/95164ba6b3323723eb40
の 5, 6 を参考にしてください.
firewall の設定
上記 URL によりますと, firewall の設定は, iptables ではなくクラウドサービス側での firewall 設定が CoreOS は推奨とのことですので, GCP のダッシュボードで firewall の設定をします.
ネットワークルール default
で CoreOS インスタンスを建てているとしします.
以下のように udp:1194
を許可する firewall rule を default
に追加します. rule の名前を vpn
にします.
その後, インスタンスの設定で, network tags
に上記で設定した rule 名 vpn
を追加します.
もしくは, vpn 専用に network rule を作ってもよいでしょう.
クライアントから接続する
CoreOS インスタンス側では
CONTNER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d5e4800a5c8 kylemanna/openvpn "ovpn_run" 10 days ago Up 10 days 0.0.0.0:1194->1194/udp hopeful_mirzakhani
のような感じで VPN サーバが動いていることを確認し,
クライアント側で
$ sudo openvpn CLIENT.ovpn
とすれば接続が行われます!
繋がらない場合は firewall の設定などを再確認してください.
自動起動する
CoreOS がリブートしたときに, openvpn コンテナが自動で再起動するようにします.
AWS+CoreOS+Dockerでコンテナの自動起動 1
https://qiita.com/aki/items/979b25ff555eb7ab96fc
を参考にし, systemd ベースで設定してみます.
$ sudo vi /etc/systemd/system/docker-ovpn.service
[Unit]
Description=My Service
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/bin/docker run -v $OVPN_NAME:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
[Install]
WantedBy=multi-user.target
$OVPN_NAME
は, 最初のほうで作成したボリュームの名前になります.
今動いている OpenVPN インスタンスがあれば止めておきます.
$ sudo systemctl enable /etc/systemd/system/docker-openvpn.service
$ sudo systemctl start docker-openvpn.service
journalctl などで起動していることを確認し, CoreOS をリブートして openvpn インスタンスが自動起動すれば成功です.
クライアントに静的 ip アドレスを割り当てる
TODO
- cloud init で openvpn インスタンスの自動立ち上げを行う.
- 443 ポートに集約したほうがいいかも?
- https://github.com/kylemanna/docker-openvpn にもあるように, docker で VPN を動かすことのセキュリティを考える旅に出たい