はじめに
GoolgeCloudPlatformで作成した仮想マシンには「内部IPアドレス」と「外部IPアドレス」が割り当てられます。
仮想マシンA | 仮想マシンB | |
Internal Address | 10.X.X.X | 10.X.X.Y |
External Address | 35.X.X.X | 35.X.X.Y |
一方、仮想マシンAから仮想マシンBに対してpingを打つと、外部IPアドレスでは疎通ができますが内部IPアドレスに対しては疎通不可です。
内部宛て
$ ping 10.X.X.Y PING 10.X.X.Y (10.X.X.Y) 56(84) bytes of data. ^C --- 10.X.X.Y ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 3065ms
外部宛て
$ ping 35.X.X.Y PING 35.X.X.Y (35.X.X.Y) 56(84) bytes of data. 64 bytes from 35.X.X.Y: icmp_seq=1 ttl=61 time=2.44 ms 64 bytes from 35.X.X.Y: icmp_seq=2 ttl=61 time=1.73 ms 64 bytes from 35.X.X.Y: icmp_seq=3 ttl=61 time=1.42 ms ^C --- 35.X.X.Y ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 1.422/1.868/2.448/0.432 ms
この状態でVPNの設定を入れることで、
あたかもローカルネットワークで繋がっている機器の用に内部IPアドレスでping接続するまでの流れについて記載しました。
VPN NetworkのIPアドレスをアサインする
以下が公式の文書から抜粋したVPNの概要です。
要は各拠点にVPNゲートウェイとして外部IPアドレスを持つ必要があります。
そのために
VPC network > External IP addresses.
にて「Reserve static address」を行います。
リージョンを仮想マシンが存在するものを選択し、それぞれ用意します。
画面には
Name | External Address | Region | Type | Version |
vpnnet-1 | 34.X.X.X | us-central1 | Static | IPv4 |
vpnnet-2 | 34.X.X.Y | us-west1 | Static | IPv4 |
と表示されます。今回は34始まりのIPアドレスがアサインされました。
VPN情報を設定する
Hybrid Connectivity > VPN
にて「Create VPN Connection.」をクリックします。
ここで先ほど採番されたアドレスを利用してトンネルを作成します。
その際に「Classic VPN」と「High-availability (HA) VPN」が選択できますが、冗長性が不要であれば「Classic VPN」を選択します。
設定項目は以下です。
Name | vpn-1 |
Network | vpnnet-1 |
Region | us-central1 |
IP address | 34.X.X.X |
先ほど採番したIPアドレスを入れます。
そしてトンネル(Tunnels)設定として対向の情報を入れます。
Name | tunneltAtoB |
Remote peer IP address | 34.X.X.Y |
IKE pre-shared key | gcprocks |
Routing options | Route-based |
Remote network IP ranges | 10.X.X.0/24 |
最後のIPアドレスである リモートネットワークのアドレス範囲 は対向の仮想マシンの内部ネットワークアドレスのネットワークアドレスを入れます。
こちらを作成すると
仮想マシンAから仮想マシンBに対して
$ ping 10.X.X.Y
が通るようになります。内部のIPアドレスがカプセル化してトンネルを通るイメージですね。
ただし、VPN設定前後で仮想マシンから見えるネットワークインターフェースは変わらない点も併せて覚えておきたいです。
$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff inet 10.X.X.X/32 brd 10.X.X.X scope global eth0 valid_lft forever preferred_lft forever inet6 ... scope link valid_lft forever preferred_lft forever
ネットワークでこの辺りを吸収するのはSSLを利用したVPN設定との違いです。
参考
終わりに
仮想マシンAから仮想マシンBに対するトンネルを作成しましたが、逆方向も同じように設定することで接続できます。
今回は離れた拠点の仮想マシンを接続しましたがリージョンが同じでも内部IPアドレスで接続する場合は同対応が必要です。
以上、ご参考になれば幸いです。