LoginSignup
0

More than 3 years have passed since last update.

GCE(Goole Compute Engine) CoreOS インスタンスで OpenVPN サーバを立てる

Last updated at Posted at 2018-01-24

漢なら 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 にします.

Screen Shot 2018-01-24 at 19.51.19.png

その後, インスタンスの設定で, network tags に上記で設定した rule 名 vpn を追加します.

Screen Shot 2018-01-24 at 19.52.07.png

もしくは, 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 を動かすことのセキュリティを考える旅に出たい

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0