1. はじめに
Client VPN for VPCの概要や接続方法については、こちらの記事が参考になる。本稿では、落ち葉拾い的に、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にアクセスする。
以下のVPN server routesの画面にて、VPN経由で接続したい対象のsubnetを構成しておく必要がある(構成が完了したら、VPNは再接続する必要がある)。たとえVPC上にsubnetが存在していたとしても、VPN server routesで何も設定しなければそのsubnet宛の経路はVPN Server上には構成されないため、VPN Clientにもその経路情報がpushされてこない。
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 !