【2024年5月版】オンプレミスからVPCのsite-to-site VPN経由でPowerVSに接続する（NAT不要）

# はじめに
VPCで使える[site-to-site VPN](https://cloud.ibm.com/docs/vpc?topic=vpc-using-vpn)を使って、PowerVSにアクセスする方法です。
以前に似た記事を書いていますが、2024年5月にVPCのネットワーク周りで新機能がリリースされ、これまでより更に容易に接続可能になったので、その方法を書きたいと思います。

なお、今回はPER（Power Edge Router）環境を前提として書きますが、Cloud Connection(Direct Link 2.0)で接続している環境でも同様に可能と思います。

最初にポイントを書くと下記となります。

- 特別なこと（今回の記事に書く内容）を考えずに構成すると、PowerVSはオンプレミスのIPアドレス範囲へのルーティング情報を知らないのでPowerVSからオンプレミスにパケットを送ることができない。　
- VPN for VPCに設定したpolicyに基づくルーティング情報をVPN GatewayからVPCのrouting tableに渡し（これは前からできた）、さらにそれをTransit Gatewayに伝搬させる事ができるようになった（2024年5月の新機能）。この機能により、オンプレミスのIPアドレス範囲へのルーティング情報がVPCからPowerVS側に広告され、PowerVSがオンプレミスのIP範囲へのパケットをVPCに送ることができる。
- VPN GatewayはVPNトンネル経由でオンプレミスにパケットを渡し、end-to-endで通信が可能となる。

:::note info
この機能が登場する前は、VPCにオンプレミスのIPアドレス範囲のprefixを作成する必要がありましたが、2024年5月の新機能により不要になりました。prefixを使ってVPN接続する方法は下記に書きました。
https://qiita.com/y_tama/items/59a5b9d4848ad8315701
:::

概要イメージは下記となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/c2f299c0-5eb2-eaeb-b06a-52ab81528f9f.png)

# オンプレミスとVPCをsite-to-site VPNで接続
オンプレミスとVPCをsite-to-site VPNで接続します。留意点として、policy based VPNで接続してください。

:::note info
route based VPNだと今回の構成はうまく動きません。
:::

Local IBM CIDRsには、VPCのサブネットでなく、PowerVSのサブネットを指定します。
Peer CIDRsは普通にオンプレミスのサブネットを書けばOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/bb64a4ad-7716-0fbc-bd61-906c36d59764.png)

なお、対向となるオンプレミスのVPNルータでも、Peer CIDRにはVPCのサブネットでなく、PowerVSのサブネットを指定してください。

# PowerVSをTransit Gatewayに接続
[こちら](https://qiita.com/y_tama/items/fc4828d747984747e86d#transit-gateway%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A)を参考に、PER環境のPowerVSをTransit Gatewayに接続します。

もし、PowerVSのLPARでパブリックIPアドレスを有効にしていると、デフォルトゲートウェイがパブリック側を向いています。オンプレミス宛の通信がプライベート側ゲートウェイにルーティングされるようAIXに静的経路を設定します。

```
# netstat -r
Routing tables
Destination        Gateway           Flags   Refs     Use  If   Exp  Groups

Route tree for Protocol Family 2 (Internet):
default            192.168.179.25    UG        6   6207270 en0      -      -   
10.50.50/24        172.16.42.1       UGS       0      1184 en1      -      -   
127/8              localhost         U         4    945769 lo0      -      -   
...
```

# Transit GatewayにVPCを接続

Transit GatewayにVPCを接続します。

Transit GatewayでBGPレポートを作成してルートを確認すると、PowerVSとVPCから、経路情報が広告されていることが確認できます。
この段階では、VPCから広告されている経路情報は、VPCのprefixに定義した10.40.40.0/24のみです。
この後の手順でオンプレミスの10.50.50.0/24への経路情報がVPCからTransit Gatewayに広告される状態にします。

# VPCのingress routing tableを作成
VPCにingress routing tableを新規作成します。
`Accepts routes from`でVPN gatewayを選択し、VPN Gatewayで設定した経路情報が自動的にroute tableに反映されるようにします。

`Traffic source`としてTransit Gatewayを有効にし、さらに、それを展開した中にある`Advertise to`をOnにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/3a1de1e0-033c-942e-27bf-1e94474ce699.png)

route tableが作成され、VPN gatewayから経路情報が自動で伝搬されます。
VPN設定でPeer CIDRとして設定した10.50.50.0/24宛のパケットについて、next hopが、VPN GatewayのIPアドレス（10.40.40.4）になっています。
また、Advertiseの列がOnになっており、この情報がTransit Gatewayに広告されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/22398724-41c7-d23e-21a6-e8b4aa832d6c.png)

Transit GatewayのBGPレポートを再度作成し、オンプレミスのIPアドレス範囲への経路情報がVPCからTransit Gatewayに広告されていることを確認します。

PowerVSからVPN Gatewayまでパケットが届けば、VPN Gatewayはその先のオンプレミスまでのルートを知っていますので、VPNトンネルを通してオンプレミスにパケットを届けることができます。

これで、オンプレミスからPowerVSまでの通信が可能となります。

下記はオンプレミスのサーバー（10.50.50.6）からPowerVSのAIX（172.16.42.123）へのpingです。

```
[root@tamavsi01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:00:06:11:ef:41 brd ff:ff:ff:ff:ff:ff
    inet 10.50.50.6/26 brd 10.50.50.63 scope global noprefixroute dynamic eth0
       valid_lft 235sec preferred_lft 235sec
    inet6 fe80::6ff:fe11:ef41/64 scope link 
       valid_lft forever preferred_lft forever
[root@tamavsi01 ~]# ping 172.16.42.123
PING 172.16.42.123 (172.16.42.123) 56(84) bytes of data.
64 bytes from 172.16.42.123: icmp_seq=1 ttl=241 time=143 ms
64 bytes from 172.16.42.123: icmp_seq=2 ttl=241 time=155 ms
64 bytes from 172.16.42.123: icmp_seq=3 ttl=241 time=146 ms
64 bytes from 172.16.42.123: icmp_seq=4 ttl=241 time=143 ms
^C
--- 172.16.42.123 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 143.775/147.450/155.514/4.778 ms
[root@tamavsi01 ~]# 
```

以上