※2017年7月19日追記:こちらの記事は内容をアップデートして会社の技術ブログに転載しました。今後は以下のURLを参照してください。
https://blog.interstellar.co.jp/2017/07/gcp-compute-engine-vpn/
Google Cloud PlatformのCompute Engineでサーバーを立てて、ローカルから操作や管理を行うためにVPNを設定したかったんだけど、Googleで提供されているVPNはIPsecで環境の問題で扱いづらかったため、OpenVPNのサーバーをCompute Engineの仮想マシンで立ててみた。
OpenVPNの設定は通常の設定でよかったんだけど、Google Compute Engine上での制約というか注意点としてメモ。
参考になるドキュメントは以下のオフィシャルのもの。
https://cloud.google.com/compute/docs/networking#settingupvpn
上記ドキュメントの中から、特に注意する点は以下のとおり。
- instanceの生成時に、必ず–can-ip-forwardのオプションを設定する。(コンソールの場合、canIpForwardあるいはIP転送をオンに設定)
結構これは忘れがちな上、後から変更ができないため、やり直すにはinstanceを新たに作る必要があるのでちょっと面倒。
- インスタンス個別ではなく、GCP上のネットワークの設定でVPN側ネットワークへのルーティングを追加する。これにより、インスタンス個別でルーティングを設定する必要がない。
なお上記ドキュメントではVPNゲートウェイをIPアドレスで指定するようにしているが、これはインスタンス名でも設定できたので、この方が柔軟性が高いと思う。
- ファイアウォールの設定でVPN側のネットワークからのアクセスを許可。まあこれは当たり前ですね。
必要最低限の通信を許可するならそれぞれ個別設定、全て通すならtcp:1-65535;udp:1-65535;icmpで指定
- 同じくファイアウォールの設定でVPNサーバーへのOpenVPNの使用ポートの外部からのアクセスを許可。まあこれも当たり前。
- VPNサーバー上で、sysctlを使用しnet.ipv4.ip_forward=1に設定。まあこれも当たり前ですが、/etc/sysctl.confにnet.ipv4.ip_forward=1を記述しておいても再起動時に反映されないことがあって困ってます。まだ詳しく調べてないのでもしかしたら勘違いかもしれませんが…。
以上のような感じで、物理サーバー上でやるのと違ってちょっと独特なところがありました。特に注意なのはinstance生成時にcanIpForwardを設定することですね。
これに気が付かなくて結構時間使ってしまいました。分かってしまえばなんということはないんですが、気がつかないと無駄に時間使ってしまいますね。
2015.8.28追記
/etc/sysctl.confに書いた記述が反映されない問題ですが、実際には反映はされていて、それが/etc/sysctl.d/以下にある別の設定ファイルで上書きされているのがわかりました。
詳しくは以下の記事。
[GCP] /etc/sysctl.confの設定が反映されないというか、上書きされていた件
吉積礼敏 KADOKAWA/アスキー・メディアワークス 2014-07-30