(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【GCP】VPNを用いた内部IPアドレスによる仮想マシンの接続方法

スポンサーリンク

はじめに

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アドレスで接続する場合は同対応が必要です。

以上、ご参考になれば幸いです。