Interconnectのリンクローカルアドレスを指定する

GCPの専用線接続時にリンクローカルアドレスを指定する方法について調べたのでまとめました。

#Interconnectの種類
GCPには2種類の専用線接続があります。

##Dedicated Interconnect
データセンターからGCPのロケーションまで専用線を引く方法。
東京だとEquinixのTY2にロケーションがあります。10Gbpsの通信が可能です。

##Partner Interconnect
データセンターからGCPのパートナー経由で専用線を引く方法です。こちら契約するパートナーごとに要件が違うので、直接問い合わせましょう。
Partner InterconnectではLayer2とLayer3の接続方式があるので、パートナーがどちらの接続方法かどうかも調査が必要です。
またパートナーにもよりますが、50,100,1G,10Gと契約帯域を選べるところが多いです。

#リンクローカルアドレスの設定方法
データセンターとGCP間を繋ぐ際に使うリンクローカルアドレスを設定します。
制限としては169.254.0.0/16の範囲からという形になります。

##Dedicated Interconnectのリンクローカルアドレスの設定方法
下記サイトを参考に、CloudShellのコマンドでUpdateできるとの事です。
https://cloud.google.com/sdk/gcloud/reference/compute/routers/update-bgp-peer?hl=ja

##Partner Interconnectのリンクローカルアドレスの設定方法
調べても出てこなかったのでGCPのサポートに問い合せた結果｢リンクローカルアドレスはDedicated Interconnectでしか指定出来ません。｣とのこと。
こりゃ辛い...
Partner Interconnectでは169.254.xx.xx/29でGCP側から自動的に払い出されたものを使います。
被らないようにしてくれるとのことですが、被ったら1度VLANアタッチメントを削除し、再度作成し繋げるしか方法はなさそうです。

#Partner Interconnect接続時の挙動
では事前に手動でCloudRouterにBGPセッションを設定しておくとどうなるのか試してみました。

CloudRouter：test-router01
Region：asia-northeast1
VPC：default
CloudRouterのIP：169.254.1.1/29
DC側のIP：169.254.1.2/29
Interface：test-if01
BGP：test-bgp01
PeerASN：64995
GoogleASN：16550(Google側の仕様により変更不可)

##リージョンの指定
```
gcloud config set compute/region asia-northeast1
``` 


##CloudRouterの作成 
```
gcloud compute routers create test-router01 --region=asia-northeast1 --network=default --advertisement-mode=DEFAULT --asn=65000

Creating router [test-router01]...done.
NAME           REGION           NETWORK
test-router01  asia-northeast1  default
```

##Interfaceの作成
```
gcloud compute routers add-interface test-router01 --interface-name=test-if01 --interconnect-attachment-region=asia-northeast1 --ip-address=169.254.1.1 --mask-length=29 --region=asia-northeast1

Updated [https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/asia-northeast1/routers/test-router01].
``` 

##BGPの作成とアタッチ

```
gcloud compute routers add-bgp-peer test-router01 --interface=test-if01 --interface=test-if01 --peer-asn=64995 --peer-name=test-bgp01 --peer-ip-address=169.254.1.2 --region=asia-northeast1

Creating peer [test-bgp01] in router [test-router01]...done.
```


##CloudRouterの詳細

```
gcloud compute routers describe test-router01

bgp:
  advertiseMode: DEFAULT
  asn: 65000
bgpPeers:
- interfaceName: test-if01
  ipAddress: 169.254.1.1
  name: test-bgp01
  peerAsn: 64995
  peerIpAddress: 169.254.1.2
creationTimestamp: '2019-08-13T04:24:57.911-07:00'
id: 'xxxxxxxxxxxxx'
interfaces:
- ipRange: 169.254.1.1/29
  name: test-if01
kind: compute#router
name: test-router01
network: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/global/networks/default
region: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/asia-northeast1
selfLink: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/asia-northeast1/routers/test-router01
``` 

この状態でPartner Interconnectを接続します。
パートナー側のルータにVLANアタッチメントから払い出されたペアリングキーを設定します。

接続後コンソールを見てみると、GCP側から払い出されたリンクローカルアドレスになっています。

この時時ルータ側をdescribeしてみたところ、作成したインターフェースとBGPセッションが消えていました。
挙動としては、Partner Interconnect接続時にCloudRouterが初期化されるような感じでしょうか。

#まとめ
GCPを始める1番最初の時にしか設定しない部分なので需要的には薄いですが、個人的には大事だと思ったのでまとめさせていただきました。