インターステラの阿形です。
GCPの環境に接続するVPNを設定する必要があり、どうするか検討していました。
GCPで提供されているCloudVPNはIPsecのみ。
IPsecはローカル側環境の問題で扱いづらかったため、OpenVPNのサーバーをCompute Engineの仮想マシンで立ててみました。
OpenVPN自体の設定は特に変わったところもないので割愛して、GCPでの制約というか注意点を。
参考資料
Compute EngineでVPNサーバーを立てる時に参考になるドキュメントは、以下のオフィシャルのものがあります。
このドキュメントではVPNにstrongSwanを使用しています。
https://cloud.google.com/compute/docs/networking#settingupvpn
注意点
上記ドキュメントの中ではさらっと流されていますが、特に注意する点は以下のとおり。
- インスタンスの生成時に、必ず–can-ip-forwardのオプションを設定します。(コンソールの場合、IP転送をオンに設定)
結構これは忘れがちな上、一度作成したインスタンスの設定変更ができません。このため、やり直す場合はインスタンスを新たに作る必要があり、大変面倒です。
- GCP上のネットワークの設定でVPN側ネットワークへのルーティングを追加します。こうすると、インスタンス個別でルーティングを設定する必要がありません。
なお上記ドキュメントではVPNゲートウェイをIPアドレスで指定するようにしていますが、これはインスタンス名でも設定できます。インスタンス名を使用したほうが柔軟性が高いと思います。
- ファイアウォールの設定でVPNクライアント側のネットワークからのアクセスを許可します。
- 同じくファイアウォールの設定で外部からVPNサーバーのVPN使用ポートへのアクセスを許可します。
- VPNサーバー上で、sysctlを使用しnet.ipv4.ip_forward=1に設定します。
/etc/sysctl.confに
net.ipv4.ip_forward=0
を記述しておくと良いと思います。
以前はGCPの仕様で、/etc/sysctl.confが再起動時にデフォルトの状態にリセットされていましたが、今はリセットされなくなったようです。
再びリセットされるようになるとは思いませんが、設定ファイルをクリーンにしておきたい場合や、念には念を入れる場合は、/etc/sysctl.dディレクトリ設定ファイルを作成し、一番最後読み込むようにファイル名を調整したほうがいいかもしれません。/etc/sysctl.dのファイルはOSにより内容が違うので、それぞれ設定時によく確認してください。
以上のような感じで、物理サーバー上でやるのと違ってちょっと独特なところがありました。特に注意なのはインスタンス生成時にIP転送を設定するところですね。
これに気が付かなくて結構時間使ってしまいました。分かってしまえばなんということはないんですが…。