IBM Cloud: Client VPN for VPC利用時のSplit Tunnel/Full Tunnelにおけるネットワーク構成

#1. はじめに
Client VPN for VPCの概要や接続方法については、[こちらの記事](https://qiita.com/y_tama/items/16987e07842262cd9068)が参考になる。本稿では、落ち葉拾い的に、Client VPN for VPCのSplit Tunnel/Full Tunnelについて紹介したいと思う。

#2. Split Tunnel/Full Tunnelとは

- Split Tunnelは、VPNの先にあるサーバーに対して接続する時はtunnel inferface経由でVPN接続するが、それ以外のアクセスは、デフォルトのインターフェース経由で(VPNを利用しない時の経路を使って）アクセスする方法。
**イメージ的には、「default gatewayはVPNを張る前と同じで変わらない。VPN経由の通信だけtunnel interfaceを使ってstatic routeで構成される」と考えておけば良い。**
- Full tunnelは、(static routeなどの優先経路がない限りは）全ての通信はデフォルトでVPN経由にする方法。**イメージ的には、「default gatewayがVPN Gatewayになる」と考えておけば良い。**

以下、クライアント側（今回はMac)のルーティングテーブルを実際に確認してみる。

#3. VPNに接続していない状態

- 本環境では、`192.168.1.1`がdefault gatewayである。


```
syasuda@MacBook-Pro ~ % netstat -nr -f inet
Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.1        UGScg          en0 
127                127.0.0.1          UCS            lo0
127.0.0.1          127.0.0.1          UH             lo0
169.254            link#10            UCS            en0      !
192.168.1          link#10            UCS            en0      !
192.168.1.1/32     link#10            UCS            en0      !
192.168.1.1        0:25:36:d3:c9:5d   UHLWIir        en0   1190
192.168.1.4/32     link#10            UCS            en0      !
192.168.1.4        3c:22:fb:53:77:45  UHLWI          lo0
192.168.1.255      ff:ff:ff:ff:ff:ff  UHLWbI         en0      !
224.0.0/4          link#10            UmCS           en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI         en0
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI         en0
255.255.255.255/32 link#10            UCS            en0      !
255.255.255.255    ff:ff:ff:ff:ff:ff  UHLWbI         en0      !
```

#4. Split Tunnel構成

- default gatewayは`192.168.1.1`のままである。
- utun5というトンネルインターフェースが作成されている。VPN接続はこのトンネルインターフェース経由で行われる。
- utun5には、10/24(10.0.0.0/24)と10.1/24(10.1.0.0/24)への経路がVPN Serverからpushされている。そのため、10.0.0.0/24宛および10.1.0.0/24宛のパケットはVPNを経由してVPCにアクセスする。


:::note warn
以下のVPN server routesの画面にて、VPN経由で接続したい対象のsubnetを構成しておく必要がある（構成が完了したら、VPNは再接続する必要がある）。たとえVPC上にsubnetが存在していたとしても、VPN server routesで何も設定しなければそのsubnet宛の経路はVPN Server上には構成されないため、VPN Clientにもその経路情報がpushされてこない。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/96365ccd-39b9-3cfc-3672-086af7086610.png)

```
syasuda@MacBook-Pro ~ % netstat -nr -f inet
Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.1        UGScg          en0
10/24              192.168.252.1      UGSc         utun5
10.1/24            192.168.252.1      UGSc         utun5
127                127.0.0.1          UCS            lo0
127.0.0.1          127.0.0.1          UH             lo0
169.254            link#10            UCS            en0      !
192.168.1          link#10            UCS            en0      !
192.168.1.1/32     link#10            UCS            en0      !
192.168.1.1        0:25:36:d3:c9:5d   UHLWIir        en0   1200
192.168.1.4/32     link#10            UCS            en0      !
192.168.1.255      ff:ff:ff:ff:ff:ff  UHLWbI         en0      !
192.168.252/23     192.168.252.2      UGSc         utun5
192.168.252/22     192.168.252.1      UGSc         utun5
192.168.252.2      192.168.252.2      UH           utun5
224.0.0/4          link#10            UmCS           en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI         en0
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI         en0
255.255.255.255/32 link#10            UCS            en0      !
255.255.255.255    ff:ff:ff:ff:ff:ff  UHLWbI         en0      !
```

#5. Full Tunnel構成

- default gatewayは`192.168.1.1`のままである。しかし、
    - `0/1`(=`0.0.0.0/1`=`0.0.0.0-127.255.255.255`)への経路はutun5を利用する。
    - `128.0/1`(=`128.0.0.0/1`=`128.0.0.0-255.255.255.255`)への経路もutun5を利用する。
    - つまり、**`0/1`と`128.0./1`で、全ての経路を網羅しているのだが、default gatewayよりlongest matching（最長プレフィックス一致）とみなされてutun5が使われているのである。つまり、実質上のdefault gatewayはVPN Serverになっている。**
- VPN server routesで設定した経路は、Clientにはpushされてこない(実質上のdefault gatewayがVPN Serverになるように構成されているので不要）。ただし、VPN Serverからどのように転送するかという情報はFull Tunnelを利用していても依然として必要になるため、VPN server routesの構成が要らなくなるわけではない。
- VPN ServerのPublic IP(この場合は`162.133.xxx.xx/32`)への接続までトンネルインターフェース経由になる訳には行かないので、その経路に対してのみ元のdefault gatewayが使用されるように明示的にstatic routeが追加されている。


```
syasuda@MacBook-Pro ~ % netstat -nr -f inet
Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
0/1                192.168.252.1      UGScg        utun5
default            192.168.1.1        UGScg          en0
127                127.0.0.1          UCS            lo0
127.0.0.1          127.0.0.1          UH             lo0
128.0/1            192.168.252.1      UGSc         utun5
162.133.xxx.xx/32  192.168.1.1        UGSc           en0
169.254            link#10            UCS            en0      !
192.168.1          link#10            UCS            en0      !
192.168.1.1/32     link#10            UCS            en0      !
192.168.1.1        0:25:36:d3:c9:5d   UHLWIir        en0   1200
192.168.1.4/32     link#10            UCS            en0      !
192.168.1.4        3c:22:fb:53:77:45  UHLWI          lo0
192.168.252/23     192.168.252.2      UGSc         utun5
192.168.252.2      192.168.252.2      UH           utun5
224.0.0/4          link#10            UmCS           en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI         en0
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI         en0
255.255.255.255/32 link#10            UCS            en0      !
```