{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/comments/190097343","pull_request_review_id":122403627,"id":190097343,"diff_hunk":"@@ -0,0 +1,1003 @@\n+---\n+title: Interoperability Guide Template for Cloud VPN\n+description: Enable third-party vendors to create an Interop guide for Cloud VPN.\n+author: ashishverm\n+tags: Cloud Networking, Cloud VPN\n+date_published: 2018-05-18\n+---\n+\n+# Google Cloud VPN Interop Guide\n+\n+Using Cloud VPN with <vendor name><product name>Learn how to build site-to-site IPSEC VPN between Cloud VPN and `<vendor name/>/<product name>`.\n+\n+\\<NOTE: Options or instructions are shown in angle brackets throughout this template. Change or remove these items as needed.\\>\n+\n+<Place vendor logo or equipment photo here>\n+\n+<Put trademark statements here>: <vendor terminology> and the <vendor> logo are trademarks of <vendor company name> or its affiliates in the United States and/or other countries.\n+\n+_Disclaimer: This interoperability guide is intended to be informational in nature and shows examples only. Customers should verify this information by testing it. _ \n+\n+Author: <author name and email address>  \n+\n+# Contents\n+\n+- [Google Cloud VPN Interop Guide](#google-cloud-vpn-interop-guide)\n+- [Contents](#contents)\n+- [Introduction](#introduction)\n+- [Product environment](#product-environment)\n+- [Before you begin](#before-you-begin)\n+   - [Terminology](#terminology)\n+   - [Configuration overview](#configuration-overview)\n+      - [GCP-side configuration](#gcp-side-configuration)\n+      - [/<vendor name/>/<vendor product/>-side configuration](#vendor-namevendor-product-side-configuration)]\n+      - [Final steps](#final-steps)\n+   - [Licenses and modules <if required>](#licenses-and-modules-if-required)\n+   - [Configuration parameters and values](#configuration-parameters-and-values)\n+      - [GCP parameter reference](#gcp-parameter-reference)\n+      - [IPsec parameters](#ipsec-parameters)\n+- [GCP-side configuration](#gcp-side-configuration)\n+   - [IPsec VPN using dynamic routing with the BGP protocol](#ipsec-vpn-using-dynamic-routing-with-the-bgp-protocol)\n+      - [Using the Cloud Platform Console](#using-the-cloud-platform-console)\n+      - [Using the gcloud command line tool](#using-the-gcloud-command-line-tool)\n+   - [IPsec VPN using \"route based\" static routing](#ipsec-vpn-using-\"route-based\"-static-routing)\n+      - [Using the Google Cloud Platform Console](#using-the-google-cloud-platform-console)\n+      - [Using the gcloud command-line tool](#using-the-gcloud-command-line-tool)\n+- [<Vendor name><vendor product> configuration](#vendor-namevendor-product-configuration)\n+   - [Creating the base network configuration](#creating-the-base-network-configuration)\n+   - [Creating the base VPN gateway configuration](#creating-the-base-vpn-gateway-configuration)\n+      - [Configure the IKEv2 proposal and policy](#configure-the-ikev2-proposal-and-policy)\n+      - [Configure the IKEv2 keyring](#configure-the-ikev2-keyring)\n+      - [Configure the IKEv2 profile](#configure-the-ikev2-profile)\n+      - [Configure the IPsec Security Association (SA)](#configure-the-ipsec-security-association-sa)\n+      - [Configure the IPsec transform set](#configure-the-ipsec-transform-set)\n+      - [Configure the IPsec profile](#configure-the-ipsec-profile)\n+      - [Configure the IPsec static virtual tunnel interface (SVTI)](#configure-the-ipsec-static-virtual-tunnel-interface-svti)\n+   - [Configuring the dynamic routing protocol (preferred)](#configuring-the-dynamic-routing-protocol-preferred)\n+   - [Configuring static routing](#configuring-static-routing)\n+   - [Saving the configuration](#saving-the-configuration)\n+   - [Testing the configuration](#testing-the-configuration)\n+- [Advanced VPN configurations](#advanced-vpn-configurations)\n+   - [Configuring VPN redundancy](#configuring-vpn-redundancy)\n+      - [Configuring <product name> Dynamic route priority settings](#configuring-product-name-dynamic-route-priority-settings)\n+      - [Configuring <product name> Static route metrics](#configuring-product-name-static-route-metrics)\n+      - [Configuring GCP BGP route priority (optional)](#configuring-gcp-bgp-route-priority-optional)\n+      - [Configuring GCP Static route metrics (optional)](#configuring-gcp-static-route-metrics-optional)\n+      - [Testing VPN Redundancy on <vendor name><device name>](#testing-vpn-redundancy-on-vendor-namedevice-name)\n+   - [Getting higher throughput](#getting-higher-throughput)\n+      - [Configuring <vendor name><product name>](#configuring-vendor-nameproduct-name)\n+      - [Configuring GCP](#configuring-gcp)\n+      - [Testing the higher-throughput configuration](#testing-the-higher-throughput-configuration)\n+- [Troubleshooting IPsec on <vendor name><product name>](#troubleshooting-ipsec-on-vendor-nameproduct-name)\n+- [Reference documentation](#reference-documentation)\n+   - [<vendor name><product name> documentation](#vendor-nameproduct-name-documentation)\n+   - [GCP documentation](#gcp-documentation)\n+\n+# Introduction\n+\n+This guide walks you through the process of configuring the `<vendor name><product name>` for integration with the [Google Cloud VPN service](https://cloud.google.com/vpn/docs).  This information is provided as an example only. Please note that this guide is not meant to be a comprehensive overview of IPsec and assumes basic familiarity with the IPsec protocol.  \n+  \n+If you are using this guide to configure your <product name> implementation, be sure to substitute the correct IP information for your environment.\n+\n+For more information about Cloud VPN see [the Cloud VPN Overview](https://cloud.google.com/compute/docs/vpn/overview).  \n+  \n+## Topology\n+\n+This guide describes two Cloud VPN topologies in the preferred order:   \n+<If needed, describe how the topology operates here.>\n+\n+-  A site-to-site IPsec VPN tunnel configuration using Google Cloud Router and providing dynamic routing with the BGP protocol.\n+-  A site-to-site Route based IPsec VPN tunnel configuration using static routes.\n+\n+The topology of each VPN topology can be configured with no redundancy, or, as an advanced solution, with redundancy on the GCP side, the on-premises side, or both. \"On-premises\" refers to the <vendor name><product name> side of the topology diagram.\n+\n+![image](googlecloudvpn--9gird3c1ka5.jpg)\n+\n+Cloud VPN to <Example: `<vendor name><product name>` VPN solution without redundancy \n+\n+![image](googlecloudvpn--am22bv08xgj.jpg)\n+\n+Cloud VPN to <Example: `<vendor name><product name>` VPN solution with redundant Cloud VPN gateways \n+\n+![image](googlecloudvpn--lq8w2zqzrgd.jpg)\n+\n+Cloud VPN to <Example: `<vendor name><product name>` VPN solution with redundant   \n+on premises gateways \n+\n+![image](googlecloudvpn--n88re2fjlu.jpg)\n+\n+Cloud VPN to <Example: `<vendor name><product name>` VPN solution with redundant   \n+GCP and redundant on-premises gateways \n+\n+# Product environment\n+\n+The `<vendor name><product name>` equipment used in this guide is as follows:  \n+\n+-  Vendor: <vendor name>\n+-  Model: <model name>\n+-  Software Release: <full software release name>\n+\n+<This section is optional, as some vendors might only have one platform>  \n+Although the steps in this guide use  <model name>, this guide also applies to the following <product name> platforms:\n+\n+-  <vendor model 1>\n+-  <vendor model 2>\n+-  <vendor model 3>\n+\n+# Before you begin\n+\n+Follow the steps in this section to prepare for VPN configuration.\n+\n+## Terminology\n+\n+Below are definitions of common terms used throughout this guide.\n+\n+<Below is some sample terminology. Add additional terminology that needs explanation in this section.>\n+\n+-  **GCP VPC network** – A single virtual network within a single GCP project.\n+-  **On-premises gateway, tunnel endpoint, or IP addresses** – The VPN device on the non-GCP side of the connection, which is usually a device in a physical data center or other cloud provider's network. GCP instructions are written from the point of view of the GCP VPC network, so the \"on-premises gateway\" is the gateway connecting to GCP.\n+-  **GCP peer address** –  A single static IP address within a GCP project that exists at the edge of the GCP network. Also known as a Cloud IP address.\n+-  **Static routing** – Manually specifying the route to subnets on the GCP-side and the on-premises side of the VPN gateway.\n+-  **Dynamic routing** – GCP Dynamic routing for VPN using the BGP protocol\n+-  `<vendor name><product name>` term\n+-  `<vendor name><product name>` term\n+\n+## Configuration overview\n+\n+The following is a high level overview of the configuration process covered in this guide:  \n+<Modify this sample overview and remove the steps that don't apply to the configuration for this VPN device or service.>\n+\n+### GCP-side configuration\n+\n+1. Configure a GCP IPsec VPN that uses either dynamic routing or static routing.\n+1. For dynamic routing (preferred):\n+   1. Configure a custom GCP network and subnet.\n+   1. Create an external IP address for the VPN gateway.\n+   1. Configure the VPN gateway, at least one tunnel, and Cloud Router.\n+   1. If using the `gcloud` command line, configure forwarding rules to the on-premises gateway.\n+   1. Configure firewall rules.\n+\n+1. For static routing repeat the steps above except, in the tunnel configuration panel under Routing options, choose **route based** and configure the Remote network IP ranges for the on-premises network.\n+\n+### <vendor name><vendor product>-side configuration\n+\n+1. Configure the base <vendor name><vendor product> network configuration to establish L3 connectivity.\n+1. Configure the <vendor name><vendor product> VPN Gateway.\n+1. Set up the Base <vendor name><vendor product> VPN configuration <which may include the following steps>:\n+   1. Configure IKEv2 Proposal and Policy.\n+   1. Configure IKEv2 keyring.\n+   1. Configure IKEv2 profile.\n+   1. Configure IPsec Security Association (SA).\n+   1. Configure IPsec transform set.\n+   1. Configure IPsec profile.\n+   1. Configure IPsec Static Virtual Tunnel Interface (SVTI).\n+   1. Configure the dynamic routing protocol (preferred) or static routing protocol to route traffic into the IPsec tunnel.\n+\n+### Final steps\n+\n+1. Test the IPsec connection through the VPN tunnel(s).\n+1. Set up Advanced VPN configurations.\n+\n+## Licenses and modules <if required>\n+\n+<This section is optional, as some VPN vendors can be open source or cloud providers that don't require licensing>\n+\n+The first step in configuring your `<vendor name><product name>` for use with the Google Cloud VPN service is to make sure that the following licenses are available:  \n+  \n+<Below are some examples. Replace with information that applies to the product.>\n+\n+-  Advanced Enterprise Services(SLASR1-AES) or Advanced IP Services Technology Package License (SLASR1-AIS  \n+-  IPsec RTU license (FLASR1-IPsec-RTU)\n+-  Encryption HW module (ASR1002HX-IPsecHW(=) and ASR1001HX-IPsecW(=)) and Tiered Crypto throughput license which applies to ASR1002-HX and ASR1001-HX chassis only.  \n+  \n+For a detailed <vendor name><product name> license information, refer to the  <Vendor Guide link>.\n+\n+## Configuration parameters and values\n+\n+The configuration samples in this guide include numerous value substitutions provided only as examples.  When following this guide, replace any of the following references with the appropriate values for your environment:\n+\n+-  Account information\n+-  Project names\n+-  Device IDs\n+-  IP addresses\n+-  Shared secrets\n+-  Keys\n+\n+### GCP parameter reference\n+\n+The following parameters are used when setting up the GCP side of the IPsec VPN  \n+configuration.\n+\n+<table>\n+<thead>\n+<tr>\n+<th><strong>GCP parameter</strong></th>\n+<th><strong>Value</strong></th>\n+<th><strong>Description</strong></th>\n+</tr>\n+</thead>\n+<tbody>\n+<tr>\n+<td>Name (project)</td>\n+<td><p><pre>\n+vpn-guide\n+</pre></p>\n+\n+</td>\n+<td>GCP project name </td>\n+</tr>\n+<tr>\n+<td>Name (VPC network)</td>\n+<td><p><pre>\n+vpn-vendor-test-network\n+</pre></p>\n+\n+</td>\n+<td>VPC network name</td>\n+</tr>\n+<tr>\n+<td>VPC subnet</td>\n+<td><p><pre>\n+vpn-scale-subnet-1\n+</pre></p>\n+\n+</td>\n+<td>Subnet on <code>vpn-vendor-test-network</code></td>\n+</tr>\n+<tr>\n+<td>Region</td>\n+<td><p><pre>\n+us-east1\n+</pre></p>\n+\n+</td>\n+<td>GCP region. Can be any region, but should be close to the on-premises gateway.</td>\n+</tr>\n+<tr>\n+<td>(Static external) IP address</td>\n+<td><p><pre>\n+vpn-scale-test-static-ip\n+</pre></p>\n+\n+</td>\n+<td>Pre-existing external static IP address that you configure for the Internet side of the Cloud VPN gateway.</td>\n+</tr>\n+<tr>\n+<td>Subnet IP address range<br>\n+or local-traffic-selector value</td>\n+<td><p><pre>\n+172.16.100.0/24\n+</pre></p>\n+\n+</td>\n+<td>IP address range for <code>subnet-1</code></td>\n+</tr>\n+<tr>\n+<td>Remote IP address range<br>\n+or destination range</td>\n+<td><p><pre>\n+10.0.0.0/8\n+</pre></p>\n+\n+</td>\n+<td>IP address range for the on-premises subnet.</td>\n+</tr>\n+<tr>\n+<td>Name (Cloud Router)</td>\n+<td><p><pre>\n+vpn-scale-test-vendor-rtr\n+</pre></p>\n+\n+</td>\n+<td>For dynamic routing: Cloud Router name</td>\n+</tr>\n+<tr>\n+<td>Name (BGP session)</td>\n+<td><p><pre>\n+bgp-peer1\n+</pre></p>\n+\n+</td>\n+<td>For dynamic routing: BGP session name.</td>\n+</tr>\n+<tr>\n+<td>Name (gateway 1)</td>\n+<td><p><pre>\n+vpn-scale-test-<vendor-name>-gw-1\n+</pre></p>\n+\n+</td>\n+<td>The name for the first GCP VPN gateway.</td>\n+</tr>\n+<tr>\n+<td>Name (tunnel 1)</td>\n+<td><p><pre>\n+vpn-scale-test-tunnel1\n+</pre></p>\n+\n+</td>\n+<td>The name for the first VPN tunnel for <code>vpn-scale-test-<vendor-name>-gw-1</code></td>\n+</tr>\n+<tr>\n+<td>Forwarding rule</td>\n+<td><p><pre>\n+fr-esp\n+</pre></p>\n+\n+</td>\n+<td>For the ESP protocol</td>\n+</tr>\n+<tr>\n+<td>Forwarding rule</td>\n+<td><p><pre>\n+fr-udp500\n+</pre></p>\n+\n+</td>\n+<td>For the UDP protocol, port 500</td>\n+</tr>\n+<tr>\n+<td>Forwarding rule</td>\n+<td><p><pre>\n+fr-udp4500\n+</pre></p>\n+\n+</td>\n+<td>For the UDP protocol, port 4500</td>\n+</tr>\n+</tbody>\n+</table>\n+\n+### IPsec parameters\n+\n+<vendor name><product name> supports the following IPsec parameters and ciphers for configuring the VPN gateways and tunnels as described in this document._  _For Cloud VPN, see the detailed list of [GCP-supported IKEv2 and IKEv1 ciphers](https://cloud.google.com/vpn/docs/concepts/advanced#supported_ike_ciphers).\n+\n+<This is a sample table. Use supported parameters and values>\n+\n+<table>\n+<thead>\n+<tr>\n+<th><strong>Parameter</strong></th>\n+<th><strong>Value</strong></th>\n+</tr>\n+</thead>\n+<tbody>\n+<tr>\n+<td>IPsec Mode</td>\n+<td>ESP+Auth Tunnel mode (Site-to-Site)</td>\n+</tr>\n+<tr>\n+<td>Authentication protocol</td>\n+<td>Pre-shared key</td>\n+</tr>\n+<tr>\n+<td>Key exchange version</td>\n+<td>IKEv2</td>\n+</tr>\n+<tr>\n+<td>Start</td>\n+<td>Auto</td>\n+</tr>\n+<tr>\n+<td>Perfect Forward Secrecy (PFS)</td>\n+<td>Group 16</td>\n+</tr>\n+<tr>\n+<td>Dead Peer Detection (DPD)</td>\n+<td>60 5 periodic</td>\n+</tr>\n+</tbody>\n+</table>\n+\n+<This is a sample table. Use supported parameters and values for IKE phase 1 and phase 2>\n+\n+<table>\n+<thead>\n+<tr>\n+<th><strong>Cipher Role</strong></th>\n+<th><strong>Cipher</strong></th>\n+</tr>\n+</thead>\n+<tbody>\n+<tr>\n+<td>Encryption (IPsec) Mode</td>\n+<td>esp-aes 256 esp-sha-hmac</td>\n+</tr>\n+<tr>\n+<td>Integrity</td>\n+<td>sha256</td>\n+</tr>\n+<tr>\n+<td>Diffie-Hellman (DH)</td>\n+<td>Group 16</td>\n+</tr>\n+<tr>\n+<td>Lifetime</td>\n+<td>36,000 seconds (10 hours)</td>\n+</tr>\n+</tbody>\n+</table>\n+\n+# GCP-side configuration\n+\n+This section covers configuring Cloud VPN using either dynamic routing with the BGP protocol (recommended) or static routing.\n+\n+There are two ways to create VPN gateways on GCP, using the Google Cloud Platform Console and the `[gcloud `command-line tool.](https://cloud.google.com/sdk/) This section provides instructions for both.\n+\n+## IPsec VPN using dynamic routing with the BGP protocol\n+\n+For dynamic routing you use [Cloud Router](https://cloud.google.com/router/docs/concepts/overview)) to establish BGP sessions between GCP and the on-premises <vendor name><vendor product> equipment.\n+\n+### Using the Cloud Platform Console\n+\n+**Select a GCP project name**  \n+Before performing the tasks in this section, select the GCP project name in the drop-down menu at the top of the console screen. The sample name for use in with this guide is `vpn-guide.`\n+\n+**Create a custom VPC network and subnet**\n+\n+1. [GO TO THE VPC NETWORKS PAGE](https://console.cloud.google.com//networking/networks/list) in the Google Cloud Platform Console. \n+1. Click **Create VPC network**.\n+1. Enter a **Name** of `vpn-vendor-test-network`.\n+1. Under **Subnets, Subnet creation mode**, select the **Custom** tab.\n+   1. Enter a **Name** of `vpn-scale-subnet-1`.\n+   1. Select a **Region** of `us-east1.`\n+   1. Enter an **IP address range** of `172.16.100.0/24`.\n+   1. In the **Subnets** window, click **Done**.\n+\n+1. Click **Create**.\n+1. You're returned to the VPC Networks screen, where it takes about a minute for this network and its subnet to appear.\n+\n+**Create the external IP address**\n+\n+1. Go to the VPC Networks [EXTERNAL IP ADDRESS PAGE](https://console.cloud.google.com//networking/addresses/list) in the Google Cloud Platform Console. \n+1. Click **Reserve Static Address**.\n+1. Populate the following fields for the Cloud VPN address:\n+   -  **Name** — The name of the address. Use `vpn-scale-test-static-ip`.\n+   -  **Region** — The region where you want to locate the VPN gateway. Normally, this is the region that contains the instances you wish to reach. In this case, use `us-east1`.\n+\n+1. Click **Reserve**.\n+1. Make note of this IP address so that you can use it to configure the VPN gateway in the next section.\n+\n+**Configure the VPN gateway**\n+\n+1. [GO TO THE VPN PAGE](https://console.cloud.google.com/networking/vpn/list) in the Google Cloud Platform Console. \n+1. Make sure to use the same Google Cloud Platform project that you used when creating the VPC network and subnets.\n+1. Click **Create VPN connection**.\n+1. **Populate the following fields for the gateway:**\n+   -  **Name** — The name of the VPN gateway. This name is displayed in the console and used in by the gcloud tool to reference the gateway. Use `vpn-scale-test-<vendor-name>-gw-1`.\n+   -  **Network** — The VPC network containing the instances the VPN gateway will serve. Use `vpn-vendor-test-network`.\n+   -  **Region** — The region where you want to locate the VPN gateway. Normally, this is the region that contains the instances you wish to reach. Use `us-east1`.\n+   -  **IP address** — Select the pre-existing [static external IP address](https://cloud.google.com/compute/docs/ip-addresses#reservedaddress), `vpn-scale-test-static-ip`, that you created for this gateway in the previous section.\n+\n+1. **Populate the fields for at least one tunnel:**\n+   -  **Name** — The name of the VPN tunnel. Use `vpn-scale-test-tunnel1`.\n+   -  **Remote peer IP address**— The public, external IP address of the on-premises VPN gateway. \n+   -  **IKE version** — IKEv2 or IKEv1. IKEv2 is preferred, but IKEv1 is supported if it is the only supported IKE version that the on-premises gateway can use.\n+   -  **Shared secret** — Character string used in establishing encryption for that tunnel. You must enter the same shared secret into both VPN gateways. If the VPN gateway device on the on-premises side of the tunnel doesn't generate one automatically, you can make one up.\n+   -  **Routing options** —  Select **Dynamic (BGP)**.\n+      -  **Cloud router** — Select **Create cloud router**, then populate the following fields. When you are done, click **Save and continue**.\n+      -  **Name** — The name of the Cloud Router. This name is displayed in the console and used by the `gcloud` command-line tool to reference the router. Example: `vpn-scale-test-<vendor-name>-rtr.\n+`      -  **Google ASN** — The [private ASN](https://tools.ietf.org/html/rfc6996) (64512- 65534, 4200000000 - 4294967294) for the router you are configuring. It can be any private ASN you are not already using. Example: `65002.`\n+      -  **BGP session** — Click the pencil icon, then populate the following fields. When you are done, click **Save and continue**.\n+      -  **Name** — `bgp-peer1`.\n+      -  **Peer ASN** — The [private ASN](https://tools.ietf.org/html/rfc6996) (64512 - 65534, 4200000000 - 4294967294) for the on-premises VPN device you are configuring. It can be any private ASN you are not already using. Example: `65001`.\n+      -  **Google BGP IP address** — The two BGP interface IP addresses must be  \n+(https://wikipedia.org/wiki/Link-local_address)** IP addresses belonging to the same /30 subnet in `169.254.0.0/16`. Example: `169.254.1.1`.\n+      -  **Peer BGP IP address** — See [the explanation](https://cloud.google.com/router/docs/concepts/overview#dynamic_routing_for_vpn_tunnels_in_vpc_networks) for the **Google BGP IP address**. (link local address) IP address for the On-premises peer. Example: `169.254.1.2`. \n+\n+   -  **Remote network IP range** — The range of the \"on-premises\" subnet on the other side of the tunnel from this gateway. Configure as `10.0.0.0/8`.\n+\n+1. Click **Create** to create the GCP VPN gateway, the Cloud Router, and initiate the tunnel, although the VPN gateways will not connect until you've configured the on-premises gateway and created firewall rules in GCP to allow traffic through the tunnel between the Cloud VPN  gateway and the on-premises gateway. This step automatically creates a static route to 10.0.2.0/24 as well as forwarding rules for udp:500, udp:4500, and esp traffic.\n+\n+1. [Configure GCP firewall rules](https://cloud.google.com/compute/docs/vpn/creating-vpns#configuring_firewall_rules) to allow inbound traffic from the on-premises network subnets. You must also configure the on-premises network firewall to allow inbound traffic from your VPC subnet prefixes.\n+   1. Go to the [GCP Firewall rules](https://console.cloud.google.com/networking/firewalls) page\n+   1. Click **Create firewall rule**.\n+   1. Populate the following fields:\n+      -  **Name:** `vpnrule1`.\n+      -  **VPC network**: `vpn-vendor-test-network`\n+      -  **Source filter:** IP ranges.\n+      -  **Source IP ranges:** The on-premises IP ranges to accept from the on-premises VPN gateway.\n+      -  **Allowed protocols and ports:** `tcp;udp;icmp`\n+\n+   1. Click **Create**.\n+\n+### Using the gcloud command line tool\n+\n+1. Create a custom VPC network (recommended). Make sure there is no conflict with your local network IP address range or any other configured subnets.   \n+`gcloud compute --project vpn-guide networks create vpn-vendor-test-network \\`\n+\n+\n+`        --mode custom`  \n+1. Create a subnet on that network.\n+```\n+gcloud compute --project vpn-guide networks subnets create vpn-scale-subnet-1 \\ \n+        --network vpn-vendor-test-network \\\n+        --region us-east1 --range 172.16.100.0/24\n+```\n+\n+1. Create a GCP VPN gateway in the desired region. Normally, this is the region that contains the instances you want to reach. This step creates an unconfigured VPN gateway named `vpn-scale-test-<vendor-name>-gw-1` in your VPC network.  \n+  \n+`gcloud compute --project vpn-guide target-vpn-gateways create vpn-scale-test-<vendor-name>-gw-1 \\`\n+\n+```\n+        --network vpn-vendor-test-network \\ \n+        --region us-east1\n+```\n+\n+1. Reserve a static IP address in the VPC network and region where you created the VPN gateway. Make a note of the created address for use in future steps.  \n+  \n+`gcloud compute --project vpn-guide addresses create \\ `\n+\n+`        --region us-east1 vpn-scale-test-static-ip`  \n+\n+1. Create a forwarding rule that forwards ESP, IKE and NAT-T traffic toward the Cloud VPN gateway. Use the static IP address `vpn-scale-test-static-ip` you reserved earlier. This step generates a forwarding rule named `fr-esp,` `fr-udp500`, `fr-udp4500` resp.  \n+  \n+ `gcloud compute --project vpn-guide forwarding-rules create fr-esp \\`\n+\n+```\n+        --region us-east1 --ip-protocol ESP --address 35.185.3.177\n+          --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1\n+\n+            gcloud compute --project vpn-guide forwarding-rules create fr-udp500 \\ \n+        --region us-east1 \\\n+        --ip-protocol UDP --ports 500 --address 35.185.3.177 \\\n+        --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1\n+\n+      gcloud compute --project vpn-guide forwarding-rules create fr-udp4500 \\ \n+        --region us-east1 \\\n+        --ip-protocol UDP --ports 4500 --address 35.185.3.177 \\ \n+```\n+\n+`        --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1`  \n+\n+1. Create [Cloud Router](https://cloud.google.com/compute/docs/cloudrouter) with the following command:\n+```\n+gcloud compute --project vpn-guide routers create vpn-scale-test-<vendor-name>-rtr --region us-east1 \\\n+  --network vpn-vendor-test-network --asn 65002\n+```\n+\n+1. Create a VPN tunnel on the Cloud VPN Gateway that points toward the external  \n+    IP address `[CUST_GW_EXT_IP]` of your on-premises VPN gateway. \n+   1. Supply the shared secret. \n+   1. Set the IKE version. The following example sets the IKE version to 2, which is the default, preferred IKE version. If you need to set it to 1, use `--ike_version 1`. \n+   1. After you run this command, resources are allocated for this VPN tunnel, but it is not yet passing traffic.\n+\n+        `gcloud compute --project vpn-guide vpn-tunnels create vpn-scale-test-tunnel1 \\`\n+\n+```\n+      --peer-address 204.237.220.4 \\\n+      --region us-east1 --ike-version 2 \\\n+      --shared-secret MySharedSecret \\\n+      --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1 \\ \n+```\n+\n+`      --router vpn-scale-test-<vendor-name>-rtr`  \n+\n+1. Update the Cloud Router config to add a virtual interface (`--interface-name`) for the BGP peer. \n+-  The BGP interface IP address must be a (https://wikipedia.org/wiki/Link-local_address)** IP address belonging to the IP address range `169.254.0.0/16` and it must belong to same subnet as the interface address of the peer router. The recommended netmask length is `30`. \n+-  Make sure each tunnel has a unique pair of IP addresses. Alternatively, you can leave `--ip-address` and `--mask-length blank, and leave `--peer-ip-address` blank in the next step, and the addresses will be automatically generated for you.  \n+\n+```\n+gcloud compute --project vpn-guide routers add-interface vpn-scale-test-<vendor-name>-rtr \\\n+  --interface-name if-1 --ip-address 169.254.1.1 --mask-length 30 \\\n+        --vpn-tunnel tunnel1 --region us-east1\n+```\n+\n+1. Update the Cloud Router config to add the BGP peer to the interface. \n+-  This example uses ASN 65001 for the peer ASN. You can use your public ASN or  \n+ [private ASN](https://tools.ietf.org/html/rfc6996) (64512 - 65534, 4200000000 - 4294967294) that you are not already using in the peer network. \n+-  The BGP peer interface IP address must be a **[link-local](https://wikipedia.org/wiki/Link-local_address)** IP address belonging to the IP address range `169.254.0.0/16`. It must belong to same subnet as the GCP-side interface. Make sure each tunnel has a unique pair of IPs.\n+```\n+gcloud compute --project vpn-guide routers add-bgp-peer vpn-scale-test-<vendor-name>-rtr \\ \n+        --peer-name bgp-peer1 --interface if-1 \\ \n+        --peer-ip-address 169.254.1.2  --peer-asn 65001 \\ \n+        --region us-east1\n+```\n+\n+1. View details of the configured Cloud Router and confirm your settings.  \n+  \n+`gcloud compute --project vpn-guide routers describe vpn-scale-test-<vendor-name>-rtr --region us-east1`  \n+\n+1. Create firewall rules to allow traffic between the on-premises network and the GCP VPC networks.  \n+  \n+`gcloud compute --project vpn-guide firewall-rules create vpnrule1`\n+\n+```\n+        --network vpn-vendor-test-network \\\n+        --allow tcp,udp,icmp --source-ranges 10.0.0.0/8\n+## IPsec VPN using \"route based\" static routing\n+\n+This section covers the steps for creating a GCP IPsec VPN using static routing. This configuration is also known as \"route based VPN.\" With route based VPN, traffic from all subnets in the same region as the GCP VPN gateway are forwarded through the VPN tunnel. For more information, see the Cloud VPN Overview.\n+```\n+\n+### Using the Google Cloud Platform Console\n+\n+1. Repeat the same steps as listed for setting up a GCP gateway for dynamic routing, except,  in the configuration for a tunnel under **Routing options**, choose **\"route based\"**  and configure the following settings:\n+   1. **Remote network IP ranges** — The range, or ranges, of the on-premises network, which is the network on the other side of the tunnel from the Cloud VPN gateway you are currently configuring. Use `10.0.0.0/8`.   \n+\n+1. Click **Create** to create the gateway and initiate all tunnels. This step automatically creates a network-wide route and necessary forwarding rules for the tunnel. The tunnels will not pass traffic until you've configured the firewall rules.   \n+\n+1. [Configure firewall rules](https://cloud.google.com/compute/docs/vpn/creating-vpns#configuring_firewall_rules) to allow inbound traffic from the on-premises network subnets. You must also configure the on-premises network firewall to allow inbound traffic from your VPC subnet prefixes.\n+   1. Go to the [Firewall rules page](https://console.cloud.google.com/networking/firewalls).\n+   1. Click **Create firewall rule**.\n+   1. Populate the following fields:\n+      -  **Name:** `vpnrule1\n+`      -  **VPC network:** `vpn-vendor-test-network`\n+      -  **Source filter:** IP ranges.\n+      -  **Source IP ranges:** The peer ranges to accept from the peer VPN gateway.\n+      -  **Allowed protocols and ports:** `tcp;udp;icmp`\n+\n+   1. Click **Create**.\n+\n+### Using the gcloud command-line tool\n+\n+1. Create a custom VPC network (preferred). Make sure there is no conflict with your local network IP address range.  \n+  \n+` gcloud compute --project vpn-guide networks create vpn-scale-test-<vendor-name> --mode custom`\n+```\n+      gcloud compute --project vpn-guide networks subnets create subnet-1 \\ \n+        --network vpn-vendor-test-network \\\n+        --region us-east1 --range 172.16.100.0/24\n+```\n+\n+1. Create a VPN gateway in the desired region. Normally, this is the region that contains the instances you wish to reach. This step creates an unconfigured VPN gateway named `vpn-scale-test-<vendor-name>-gw-1` in your GCP VPC network.  \n+  \n+` gcloud compute --project vpn-guide target-vpn-gateways create vpn-scale-test-<vendor-name>-gw-1 \\  \n+   --network vpn-vendor-test-network --region us-east1`\n+\n+1. Reserve a static IP address in the VPC network and region where you created the VPN gateway. Make a note of the address that was created for use in future steps.  \n+  \n+   `gcloud compute --project vpn-guide addresses create `\n+\n+`         --region us-east1 vpn-scale-test-static-ip`  \n+\n+1. Create a forwarding rule that forwards ESP, IKE, and, optionally, NAT-T traffic toward the Cloud VPN gateway. This step generates three forwarding rules named fr-esp, fr-udp500, and fr-udp450.  \n+\n+1. Use the static IP address `vpn-scale-test-static-ip` that you reserved earlier. 35.185.3.177 address is a sample external IP address. Use the address that was generated for  `vpn-scale-test-static-ip.`\n+\n+```\n+ \n+ gcloud compute --project vpn-guide forwarding-rules create fr-esp\n+        --region us-east1 \\\n+        --ip-protocol ESP --address 35.185.3.177 \\ \n+        --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1\n+\n+       gcloud compute --project vpn-guide forwarding-rules create fr-udp500 \n+         --region us-east1 \\\n+         --ip-protocol=UDP --address 35.185.3.177 \\ \n+         --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1 --ports 500\n+\n+       gcloud compute --project vpn-guide forwarding-rules create fr-udp4500\n+         --region us-east1 \\\n+         --ip-protocol=UDP --ports 4500 --address 35.185.3.177 \\ \n+```\n+\n+`         --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1`   \n+  \n+6. Create a VPN tunnel on the Cloud VPN Gateway that points toward the external IP address `[CUST_GW_EXT_IP]` of your on-premises VPN gateway. \n+\n+   1. Supply the shared secret. \n+   1. Set the IKE version. The following example sets the IKE version to 2, which is the default, preferred IKE version. If you need to set it to 1, use `--ike_version 1`. \n+   1. After you run this command, resources are allocated for this VPN tunnel, but it is not yet passing traffic.  \n+  \n+`gcloud compute --project vpn-guide vpn-tunnels create tunnel1 \\`\n+```\n+        --peer-address 204.237.220.4 \\\n+        --region us-east1 --ike-version 2 \\ \n+        --shared-secret MySharedSecret \\ \n+        --target-vpn-gateway vpn-scale-test-<vendor-name>-gw-1 \\\n+```\n+\n+`        --local-traffic-selector=172.16.100.0/24`  \n+  \n+7. Use a [static route](https://cloud.google.com/sdk/gcloud/reference/compute/routes/create) to forward traffic to the destination range of IP addresses,  \n+`[CIDR_DEST_RANGE]`, in your local on-premises network. You can repeat this  \n+ command to add multiple IP address ranges to the VPN tunnel. The region must be the  \n+ same region as for the VPN tunnel.  \n+  \n+ `gcloud compute --project vpn-guide routes create route`\n+```\n+        --network [NETWORK] --next-hop-vpn-tunnel vpn-scale-test-tunnel1\n+        --next-hop-vpn-tunnel-region us-east1 \n+```\n+\n+`        --destination-range 10.0.0.0/8`  \n+  \n+8. Create firewall rules to allow traffic between on-premises network and GCP VPC networks.  \n+  \n+`gcloud compute --project vpn-guide firewall-rules create vpnrule1`  \n+`  --network vpn-vendor-test-network \\  \n+  --allow tcp,udp,icmp --source-ranges 10.0.0.0/8`  \n+\n+# <Vendor name><vendor product> configuration\n+\n+<Below are some sample tasks to configure the on-premises side of the VPN gateway configuration using <vendor name> equipment.>\n+\n+<For an example of how to fill in the instructions and parameters, see the [Cisco ASR1000 section ](https://cloud.google.com/community/tutorials/using-cloud-vpn-with-cisco-asr#configuration--cisco-asr-1000)of  [the VPN Interop guide for Cisco ASR](https://cloud.google.com/community/tutorials/using-cloud-vpn-with-cisco-asr#top_of_page). For each set of instructions, explain what purpose the configuration setting serves.> \n+\n+## Creating the base network configuration\n+\n+Follow this procedure to create the base Layer 3 network configuration of <vendor name>. \n+\n+-  At least one internal-facing network interface is required to connect to your on-premises network, and one external-facing interface is required to connect to GCP. \n+-  A sample interface configuration is provided below  \n+for reference:  \n+\n+```\n+<insert configuration code snippet here>\n+## Creating the base VPN gateway configuration\n+\n+Follow this multi-step procedure to create the base VPN configuration. \n+```\n+\n+<Eliminate any steps that are not required by the `<vendor name><product name>` device.>    \n+\n+### Configure the IKEv2 proposal and policy\n+\n+<Insert the instructions for creating the IKEv2 proposal and policy here. Below are some examples of IKE algorithms to specify as part of the instructions.>\n+\n+-  **Encryption algorithm** – <list required algorithms here>\n+-  **Integrity algorithm** – <list required algorithms here>\n+-  **Diffie-Hellman group **– <list required group here>\n+```\n+<insert configuration code snippet here>\n+### Configure the IKEv2 keyring\n+\n+<Insert the instructions for creating the IKEv2 keyring here.>\n+\n+<insert configuration code snippet here>\n+```\n+\n+### Configure the IKEv2 profile\n+\n+<Insert the instructions for creating the IKEv2 profile here. Below are some examples of parameters to set.>  \n+\n+-  `IKEv2 Lifetime` - Set the lifetime of the security associations, after which a reconnection occurs. Set to 36,000 seconds as recommended configuration on a <product name> router.\n+-  `DPD`** **– Set the dead peer detection interval and retry interval, if there are no response from the peer, the SA created for that peer is deleted. Set to 60 seconds keepalive interval and 5 seconds retry interval as recommended configuration on a <product name>router.  \n+\n+```\n+<insert configuration code snippet here>\n+### Configure the IPsec Security Association (SA)\n+\n+<Insert the instructions for creating the IPsec SA here. Below are some examples of parameters to set.>\n+```\n+\n+-  `IPsec SA lifetime` – 1 hour is the recommended value on ASR 1000 router.\n+-  `IPsec SA replay window-size` – 1024 is the recommended value on ASR 1000 router.\n+```\n+<insert configuration code snippet here>\n+### Configure the IPsec transform set\n+\n+<Insert the instructions for creating the IPsec transform set here.>\n+```\n+\n+`<insert configuration code snippet here>`  \n+\n+### Configure the IPsec profile\n+\n+<Insert the instructions for creating the IPsec profile here. Below are some examples of parameters to set.>  \n+\n+-  Perfect Forward Secrecy (PFS) - PFS ensures that the same key will not be generated again, so forces a new diffie-hellman key exchange. Set to group16 as recommended configuration on ASR 1000 router.\n+-  SA Lifetime - set the lifetime of the security associations (after which a  \n+  reconnection will occur). Set to `3600 seconds` as recommended configuration  \n+  on ASR 1000 router.\n+```\n+<insert configuration code snippet here>\n+### Configure the IPsec static virtual tunnel interface (SVTI)\n+\n+<Insert the instructions for creating the IPsec SVTI here. Below are some examples of parameters to set.>\n+```\n+\n+-  Adjust the maximum segment size (MSS) value of TCP packets going through a  \n+router. The recommended value is 1360 when the number of IP MTU bytes is set to  \n+1400. With these recommended settings, TCP sessions quickly scale back to  \n+1400-byte IP packets so the packets will \"fit\" in the tunnel.\n+```\n+<insert configuration code snippet here>\n+## Configuring the dynamic routing protocol (preferred)\n+\n+To configure dynamic routing of traffic through the VPN tunnel(s) using the BGP routing protocol.  <Insert the instructions for configuring dynamic routing here. Below are some examples of parameters to set.>\n+\n+BGP timers are adjusted to provide more rapid detection of outages.\n+\n+To advertise additional prefixes to GCP, <insert instructions here>.\n+\n+<insert configuration code snippet here>\n+```\n+\n+## Configuring static routing\n+\n+To configure static routing of traffic toward the GCP network through the VPN tunnel interface, enter the following command. Check [GCP Best Practices](https://cloud.google.com/router/docs/resources/best-practices) for further recommendations regarding on-premises routing configurations.\n+```\n+<insert configuration code snippet here>\n+## Saving the configuration","path":"tutorials/vpn-interop-guides/interop-guide-template/index.md","position":813,"original_position":813,"commit_id":"23adff63b6d3e2e8bb3c3722ef411adc73776257","original_commit_id":"23adff63b6d3e2e8bb3c3722ef411adc73776257","user":{"login":"parkjam4","id":11820506,"avatar_url":"https://avatars2.githubusercontent.com/u/11820506?v=4","gravatar_id":"","url":"https://api.github.com/users/parkjam4","html_url":"https://github.com/parkjam4","followers_url":"https://api.github.com/users/parkjam4/followers","following_url":"https://api.github.com/users/parkjam4/following{/other_user}","gists_url":"https://api.github.com/users/parkjam4/gists{/gist_id}","starred_url":"https://api.github.com/users/parkjam4/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/parkjam4/subscriptions","organizations_url":"https://api.github.com/users/parkjam4/orgs","repos_url":"https://api.github.com/users/parkjam4/repos","events_url":"https://api.github.com/users/parkjam4/events{/privacy}","received_events_url":"https://api.github.com/users/parkjam4/received_events","type":"User","site_admin":false},"body":"Line break","created_at":"2018-05-23T01:01:21Z","updated_at":"2018-05-23T01:01:21Z","html_url":"https://github.com/GoogleCloudPlatform/community/pull/434#discussion_r190097343","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/comments/190097343"},"html":{"href":"https://github.com/GoogleCloudPlatform/community/pull/434#discussion_r190097343"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434","id":187982195,"html_url":"https://github.com/GoogleCloudPlatform/community/pull/434","diff_url":"https://github.com/GoogleCloudPlatform/community/pull/434.diff","patch_url":"https://github.com/GoogleCloudPlatform/community/pull/434.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/community/issues/434","number":434,"state":"open","locked":false,"title":"Updated AWS guide, new directory structure, and new template","user":{"login":"jschneider11","id":38144056,"avatar_url":"https://avatars2.githubusercontent.com/u/38144056?v=4","gravatar_id":"","url":"https://api.github.com/users/jschneider11","html_url":"https://github.com/jschneider11","followers_url":"https://api.github.com/users/jschneider11/followers","following_url":"https://api.github.com/users/jschneider11/following{/other_user}","gists_url":"https://api.github.com/users/jschneider11/gists{/gist_id}","starred_url":"https://api.github.com/users/jschneider11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jschneider11/subscriptions","organizations_url":"https://api.github.com/users/jschneider11/orgs","repos_url":"https://api.github.com/users/jschneider11/repos","events_url":"https://api.github.com/users/jschneider11/events{/privacy}","received_events_url":"https://api.github.com/users/jschneider11/received_events","type":"User","site_admin":false},"body":"@jmdobry \r\n\r\nNote that Jason is helping me handle this request.\r\n\r\nI've made the following changes:\r\n\r\n- Moved existing VPN Interop Guides to a new folder called vpn-interop-guides.\r\n- Updated the AWS guide.\r\n- Created an interop-guide-templates directory with a new Markdown template for VPN Interop guides.\r\n\r\nThe files need some light Markdown cleanup.","created_at":"2018-05-15T00:05:01Z","updated_at":"2018-05-23T01:01:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e1fdd1c12fa45b5d1c7a542ef6ec51569f5ff67d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/community/issues/434/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/community/statuses/23adff63b6d3e2e8bb3c3722ef411adc73776257","head":{"label":"jschneider11:AWS-guide","ref":"AWS-guide","sha":"23adff63b6d3e2e8bb3c3722ef411adc73776257","user":{"login":"jschneider11","id":38144056,"avatar_url":"https://avatars2.githubusercontent.com/u/38144056?v=4","gravatar_id":"","url":"https://api.github.com/users/jschneider11","html_url":"https://github.com/jschneider11","followers_url":"https://api.github.com/users/jschneider11/followers","following_url":"https://api.github.com/users/jschneider11/following{/other_user}","gists_url":"https://api.github.com/users/jschneider11/gists{/gist_id}","starred_url":"https://api.github.com/users/jschneider11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jschneider11/subscriptions","organizations_url":"https://api.github.com/users/jschneider11/orgs","repos_url":"https://api.github.com/users/jschneider11/repos","events_url":"https://api.github.com/users/jschneider11/events{/privacy}","received_events_url":"https://api.github.com/users/jschneider11/received_events","type":"User","site_admin":false},"repo":{"id":131341581,"name":"community","full_name":"jschneider11/community","owner":{"login":"jschneider11","id":38144056,"avatar_url":"https://avatars2.githubusercontent.com/u/38144056?v=4","gravatar_id":"","url":"https://api.github.com/users/jschneider11","html_url":"https://github.com/jschneider11","followers_url":"https://api.github.com/users/jschneider11/followers","following_url":"https://api.github.com/users/jschneider11/following{/other_user}","gists_url":"https://api.github.com/users/jschneider11/gists{/gist_id}","starred_url":"https://api.github.com/users/jschneider11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jschneider11/subscriptions","organizations_url":"https://api.github.com/users/jschneider11/orgs","repos_url":"https://api.github.com/users/jschneider11/repos","events_url":"https://api.github.com/users/jschneider11/events{/privacy}","received_events_url":"https://api.github.com/users/jschneider11/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jschneider11/community","description":"This repository holds the content submitted to https://cloud.google.com/community. Files added to the tutorials/ will appear at https://cloud.google.com/community/tutorials.","fork":true,"url":"https://api.github.com/repos/jschneider11/community","forks_url":"https://api.github.com/repos/jschneider11/community/forks","keys_url":"https://api.github.com/repos/jschneider11/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jschneider11/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jschneider11/community/teams","hooks_url":"https://api.github.com/repos/jschneider11/community/hooks","issue_events_url":"https://api.github.com/repos/jschneider11/community/issues/events{/number}","events_url":"https://api.github.com/repos/jschneider11/community/events","assignees_url":"https://api.github.com/repos/jschneider11/community/assignees{/user}","branches_url":"https://api.github.com/repos/jschneider11/community/branches{/branch}","tags_url":"https://api.github.com/repos/jschneider11/community/tags","blobs_url":"https://api.github.com/repos/jschneider11/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jschneider11/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jschneider11/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/jschneider11/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jschneider11/community/statuses/{sha}","languages_url":"https://api.github.com/repos/jschneider11/community/languages","stargazers_url":"https://api.github.com/repos/jschneider11/community/stargazers","contributors_url":"https://api.github.com/repos/jschneider11/community/contributors","subscribers_url":"https://api.github.com/repos/jschneider11/community/subscribers","subscription_url":"https://api.github.com/repos/jschneider11/community/subscription","commits_url":"https://api.github.com/repos/jschneider11/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/jschneider11/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/jschneider11/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/jschneider11/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/jschneider11/community/contents/{+path}","compare_url":"https://api.github.com/repos/jschneider11/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jschneider11/community/merges","archive_url":"https://api.github.com/repos/jschneider11/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jschneider11/community/downloads","issues_url":"https://api.github.com/repos/jschneider11/community/issues{/number}","pulls_url":"https://api.github.com/repos/jschneider11/community/pulls{/number}","milestones_url":"https://api.github.com/repos/jschneider11/community/milestones{/number}","notifications_url":"https://api.github.com/repos/jschneider11/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jschneider11/community/labels{/name}","releases_url":"https://api.github.com/repos/jschneider11/community/releases{/id}","deployments_url":"https://api.github.com/repos/jschneider11/community/deployments","created_at":"2018-04-27T20:24:14Z","updated_at":"2018-05-01T23:05:44Z","pushed_at":"2018-05-21T23:21:48Z","git_url":"git://github.com/jschneider11/community.git","ssh_url":"git@github.com:jschneider11/community.git","clone_url":"https://github.com/jschneider11/community.git","svn_url":"https://github.com/jschneider11/community","homepage":"https://cloud.google.com/community","size":30691,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"0a8200533b9fd870acfc430516324ecba75a2878","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":50372538,"name":"community","full_name":"GoogleCloudPlatform/community","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/community","description":"This repository holds the content submitted to https://cloud.google.com/community. Files added to the tutorials/ will appear at https://cloud.google.com/community/tutorials.","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/community","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/community/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/community/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/community/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/community/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/community/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/community/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/community/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/community/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/community/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/community/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/community/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/community/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/community/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/community/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/community/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/community/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/community/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/community/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/community/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/community/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/community/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/community/deployments","created_at":"2016-01-25T18:46:16Z","updated_at":"2018-05-21T10:04:06Z","pushed_at":"2018-05-23T00:01:44Z","git_url":"git://github.com/GoogleCloudPlatform/community.git","ssh_url":"git@github.com:GoogleCloudPlatform/community.git","clone_url":"https://github.com/GoogleCloudPlatform/community.git","svn_url":"https://github.com/GoogleCloudPlatform/community","homepage":"https://cloud.google.com/community","size":26414,"stargazers_count":218,"watchers_count":218,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":282,"mirror_url":null,"archived":false,"open_issues_count":143,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":282,"open_issues":143,"watchers":218,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434"},"html":{"href":"https://github.com/GoogleCloudPlatform/community/pull/434"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/issues/434"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/issues/434/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/pulls/434/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/community/statuses/23adff63b6d3e2e8bb3c3722ef411adc73776257"}},"author_association":"NONE"}}
{"actor":{"display_login":"parkjam4"}}