This repository and lab guide are intended to be used with a specific QwikLabs scenario, and some steps are specific to Qwiklabs. It contains deployment code and a lab guide for learning GWLB traffic flows with VM-Series. Some configurations and resources are intentionally omitted to be left as troubleshooting exercises.
Do not use this for a production deployment or an easy demo environment!
You can find the regularly maintained terraform modules and example deployments for your production deployments at pan.dev. These modules are also published on the HashiCorp Registry.
The Combined Design example closely matches the design from this learning lab.
Manual Last Updated: 2024-07-18
Lab Last Tested: 2024-07-11
This lab will involve deploying Palo Alto Networks VM-Series in AWS with a Gateway Load Balancer (GWLB) topology. You will first deploy a Panorama and then the rest of the AWS resources and VM-Series with bootstrapping. It is a challenge lab that will require you to troubleshoot and fix some issues.
Example Code block following an action item
ℹ Items with info icon are additional context or details around actions performed in the lab
❓ Items with question mark icon are questions that should be answered on the quiz
Use the corresponding quiz that relates to the questions you will see inside this guide to test your knowledge!
Reference these diagrams for a visual of traffic flows through this topology.
aws-gwlb-lab-secrets.txt
File from Qwiklabs interface for later referenceqwikLABS-L17939-10286
ℹ Any EC2 Instance must be associated with a SSH key pair, which is the default method of initial interactive login to EC2 instances. With successful bootstrapping, there should not be any need to connect to the VM-Series instances directly with this key, but it is usually good to keep this key securely stored for any emergency backdoor access.
For this lab, we will use the key pair automatically generated by Qwiklabs. The key will also be used for connecting to the test web server instances.
ℹ Qwiklabs has an explicit Deny for some actions we need to use for this lab. However, we have permission to remove this policy. Take a look at the other Deny statements while you are here.
ℹ It is important to be familiar with IAM concepts for VM-Series deployments. Several features (such as bootstrap, custom metrics, cloudwatch logs, HA, and VM Monitoring) require IAM permissions. You also need to consider IAM permissions in order to deploy with IaC or if using lambda for custom automation.
IAM
in the top search bar (IAM is global)awsstudent
default_policy
and then click "Remove Policy" to remove it.ℹ Before you can launch VM-Series or Panorama images in an account, the account must first have accepted the Marketplace License agreement for that product.
ℹ The QwikLabs accounts should already be subscribed to these offers, but we will need to verify and correct if required.
AWS Marketplace Subscriptions
in top search barVM-Series Next-Generation Firewall (BYOL)
Palo Alto Networks Panorama
Discover Products
and search for palo alto
VM-Series Next-Generation Firewall (BYOL)
or Palo Alto Networks Panorama
as neededcloudshell
in the top search barℹ This lab will use Cloudshell for access to AWS CLI and as a runtime environment to provision your lab resources in AWS using Terraform. Cloudshell will have the same IAM role as your authenticated user and has some utilities (git, aws cli, etc) pre-installed. It is only available in limited regions currently.
Anything saved in the home directory
/home/cloudshell-user
will remain persistent if you close and relaunch CloudShell
ℹ We will use us-west-2 for example of using this search and answering the questions, but your actual deployment for this lab may be in a different region.
aws ec2 describe-images --filters "Name=owner-alias,Values=aws-marketplace" --filters Name=name,Values=PA-VM-AWS-11* Name=product-code,Values=6njl1pau431dv1qxipg63mvah --region us-west-2
Press space a few times to page down
Try using the following query to control what data is returned
aws ec2 describe-images --filters "Name=owner-alias,Values=aws-marketplace" --filters Name=name,Values=PA-VM-AWS-11* Name=product-code,Values=6njl1pau431dv1qxipg63mvah --region us-west-2 --query 'Images[].[ImageId,Name]'
11.2.0
AMI is available, which is what we are targeting for this deployment❓ What is the BYOL Marketplace AMI ID for 10.1.8 in the us-east-1 region?
❓ What are some options if there is no AMI available for your targeted version?
ℹ This terraform deployment will look up the AMI ID to use for the deployment based on the variable
fw_version
. New AMIs are not always published for each minor release. Therefore, it is a good idea to verify what version AMI most closely matches your target version.ℹ product-code is a global value that correlates with Palo Alto Networks marketplace offerings This is global and the same across all regions.
"byol" = "6njl1pau431dv1qxipg63mvah" "payg1" = "e9yfvyj3uag5uo5j2hjikv74n" "payg2" = "hd44w1chf26uv4p52cdynb2o"
byol will be the most common. You will need to obtain Software Firewall Flex Credits to license these after deployment.
The other image types are "Pay as you go" and come pre-licensed and are billed by AWS. These will generally be more costly to run over long periods than BYOL. PAYG is good for certain scenarios such as autoscaling or when you need to add capacity for a short period.
payg1 is
VM-Series Next-Gen Virtual Firewall w/Advanced Threat Prevention (PAYG)
in the marketplace and only has advanced threat subscription.payg2 is
VM-Series Next-Gen Virtual Firewall w/ Advanced Security Subs (PAYG)
in the marketplace and has additional security subscriptions enabled (Adv URL, Adv Wildfire, DNS, GlobalProtect)You can also use the EC2 web console to search for available images based on product code or AMI name.
ℹ The name tag of the image should be standard and can be used for the filter. For example
PA-VM-AWS-10.1*
,PA-VM-AWS-9.1.3*
,PA-VM-AWS-10*
. This is the same logic the terraform will use to lookup the AMI based on thefw_version
variable.ℹ Not needed for this lab, but when deploying VM-Series from EC2 console, it will default to the latest version. You can instead go to the AWS Marketplace to subscribe to the offering and select previous versions to deploy the desired AMI
rm -rf ~/bin && rm -rf ~/lab-aws-gwlb-vmseries/
cd ~ && git clone https://github.com/PaloAltoNetworks/lab-aws-gwlb-vmseries.git && chmod +x ~/lab-aws-gwlb-vmseries/terraform/install_terraform.sh && ~/lab-aws-gwlb-vmseries/terraform/install_terraform.sh && source ~/.bashrc
terraform version
ℹ Terraform projects often have version constraints in the code to protect against potentially breaking syntax changes when new version is released. For this project, the version constraint is:
terraform { required_version = ">=0.12.29, <2.0" }
Terraform is distributed as a single binary so isn't usually managed by OS package managers. It simply needs to be downloaded and put into a system
$PATH
location. For Cloudshell, we are using the/home/cloud-shell-user/bin/
so it will be persistent if the sessions times out.
ℹ One of the complications with fully automating VM-Series deployments is the need to have a Panorama already running and configured for the VM-Series to bootstrap to. There isn't a built in bootstrap method for Panorama itself. There are ways to orchestrate it, but it is complex. In addition the Panorama takes a long time to initialize. So typically you need to bring up the Panorama as a separate terraform deployment before launching the VM-Series.
cd ~/lab-aws-gwlb-vmseries/terraform/panorama
terraform init
terraform apply
When Prompted for confirmation, type yes
It should take a few minutes for Terraform to finish deploying all resources
When complete, you will see an output containing the Panorama URL. Copy these locally so you can reference them in later steps
ℹ You can also come back to this directory in CloudShell later and run
terraform output
to view this information
❓ What AWS resources were created from this terraform execution?
ℹ The Panorama was deployed from a partially prepped image that is licensed and has a baseline Template/Device Group. However, additional steps will be completed here to prepare the Panorama for logging and bootstrapping.
Copy the panorama_url
from the Terraform output and access it in a browser.
Authenticate using the credentials from aws-gwlb-lab-secrets.txt
Navigate to Panorama > Setup > Interfaces, and click on the Management Interface
Navigate to Panorama > Collector Groups and delete the existing collector group
Navigate to Panorama > Managed Collectors and delete the existing log-collector, then commit to Panorama
From the dashboard, copy the serial number of Panorama (Found under the general information)
Configure a new log collector by navigating to Panorama > Managed Collectors > Add
Click on the newly configured log collector (Will have the S/N as its name), then navigate to the Disks Tab
Navigate to Panorama > Collector Groups, then click Add
Navigate to Panorama > Plugins > Check Now
sw_fw_license-1.1.2
. Then download and install the pluginNavigate to Panorama > SW Fireall License
Configure a SW Firewall License Bootstrap Definition
aws-gwlb-lab
aws-gwlb-lab-secrets.txt
Configure a SW Firewall License Manager
aws-gwlb-lab
AWS-GWLB-LAB
stack-aws-gwlb-lab
Never
aws-gwlb-lab
ℹ Auto Deactive is handy for automating the cleanup of devices that have been terminated, for example in an autoscaling VM-Series deployment. Caution should be used as there is a possibility for false positives. For example, if there is an unrelated connectivity issue, Panorama could perceive that the devices are no longer active and initiate the deactivation based on the timer. This plugin can also be used for manually deactivating devices, or creating an event-driven workflow to make an API call to Panorama for deactivation. For any deactivation functions to work, the Panorama must be configured with a Licensing API Key that is generated from the Customer Support Portal.
stack-aws-gwlb-lab
Automatically push content....
ℹ This feature was added in 10.2 and is very useful for automated deployments, especially autoscaling. It ensures that as devices bootstrap, the Panorama will push down the current dynamic content before committing the configuration.
Commit to Panorama and verify it completes successfully.
Return to Panorama -> SW Firewall Licenses -> License Manager
Select Show Bootstrap Parameters
Copy the bootstrap parameters for use in the next step
Most of the bootstrap parameters and environment-specific variable values have already been prepped in the Terraform code for this deployment. You will only need to update the auth-key
value for your Panorama.
When bootstrapping, be very careful to ensure all of the parameters are set correctly. These values will be passed in as User Data for the VM-Series launch. If values are incorrect, the bootstrap will likely fail and you will need to redeploy!
Make sure you are in the appropriate directory
cd ~/lab-aws-gwlb-vmseries/terraform/vmseries
Edit the file student.auto.tfvars
to update the value of the auth-key
variable that you copied from the bootstrap parameters in Panorama aws-gwlb-lab-secrets.txt
Set the value inside of the empty quotes
auth-key = "_AQ__xxxxxxxxxxxxxxxxxxx"
cat ~/lab-aws-gwlb-vmseries/terraform/vmseries/student.auto.tfvars
ℹ This deployment is using a basic bootstrapping that does not require S3 buckets. Any parameters normally specified in init-cfg can now be passed directly to the instance via UserData. Prerequisite is the image you are deploying has plugin 2.0.1+ installed
❓ What are some bootstrap options that won't be possible with this basic bootstrap method?
ℹ If you have time left after the rest of the lab activities, later steps will return to do some more digging into the terraform code.
cd ~/lab-aws-gwlb-vmseries/terraform/vmseries
terraform init
terraform apply
yes
It should take 5-10 minutes for Terraform to finish deploying all resources
When complete, you will see a list of outputs. Copy these locally so you can reference them in later steps
If you do get an error, first try to run terraform apply
again to finish the update of any pending resources. Notify the lab instructor if there are still issues.
ℹ You can also come back to this directory in CloudShell later and run
terraform output
to view this information
All resources are now created in AWS, but it will be around 10 minutes until VM-Series are fully initialized and bootstrapped.
In the meantime, let's go look at what you built!
EC2 Dashboard -> Instances -> Select vmseries01
-> Actions -> Instance settings -> Edit user data
Verify the values match what was provided in your Lab Details
❓ What are some tradeoffs of using the user-data method for bootstrap vs S3 bucket?
❓ What needs to happen if you have a typo or missed a value for bootstrap when you deployed?
vmseries01
-> Actions -> Monitor and troubleshoot -> Get instance screenshotℹ This can be useful to get a view of the console during launch. It is not interactive and must be manually refreshed, but you can at least see some output related to the bootstrap process or to troubleshoot if the VM-Series isn't booting properly or is in maintenance mode.
vmseries01
-> Review info / tabs in bottom pane❓ What is the instance type?
❓ How many interfaces are associated to the VM-Series?
❓ Which interface is the default ENI for the instance?
❓ Which interface has a public IP associated?
❓ Check the security group associated with the "data" interface. What is allowed inbound? What is the logic of this SG?
❓ Review the Instance Profile (IAM Role) the VM-Series launched with. What actions does it allow?
❓ What are some other use-cases where you need to allow additional IAM permissions for the VM-Series instance profile?
cloudwatch
in the top search barℹ It is normal for the VMs to briefly lose connectivity to Panorama after first joining.
ℹ This feature is only implemented for AWS currently.
❓ What is required to enable these logs during the boot process?
ℹ For this lab, the Panorama and VM-Series mgmt are publicly accessible. For production deployments, management should not be exposed to inbound Internet traffic as a general practice. If public inbound management access is required, make sure to use other controls (MFA, AWS security groups, PAN-OS permitted-ip lists).
( description contains '00795xxxxxxx' )
❓ Why are NAT policies not needed for GWLB model?
Most configurations will be done in Panorama, but we will use the local consoles for some steps and validation
Refer to the output you copied from your terraform deployment for the public EIPs associated to each VM-Series management interface
vmseries_eips = {
"vmseries01-mgmt" = "54.71.121.124"
"vmseries02-mgmt" = "44.237.145.237"
}
Refer to aws-gwlb-lab-secrets.txt
from QwikLabs for local credentials for the VM-Series instances. These will be the same credentials you used for Panorama.
Establish a connection to both VM-Series Web UI via HTTPS
Establish a connection to both VM-Series CLI via SSH
❓ Why don't you have to use an SSH key pair to authenticate to these VM-Series?
ℹ It is common to have issues when initially setting up an environment for bootstrapping. Thus it is good to know how to troubleshoot. When using the new basic bootstrapping with user-data, there is less potential for problems.
Some things to keep in mind:
- Default AWS ENI needs access to reach S3 bucket as well as path to Internet for licensing
- S3 access can be via internet or with a VPC endpoint
- IAM Instance Profile will need permissions to access S3 bucket
- When using interface swap, the subnet for the second ENI will also need a path to S3 and Internet
- Interface swap can be done with user-data or in init-cfg parameters.
- Generally better to do via user-data
- Template Stack and Device Group names must match exactly or they will never join Panorama (no indication of this in Panorama logs)
- If there are any issues with licensing, VM-Series will not join Panorama (no indication of this in Panorama logs)
show system bootstrap status
debug logview component bts_details
ℹ If you have Cloudwatch logs enabled, you can see most of this status without SSH session to VM-Series.
security-gwlb
Targets
tab, note that the status of both VM-Series is unhealthyHealth Checks
tab to verify health check settings❓ What Protocol and Port is the Target Group Health Probe configured to use?
❓ What Protocol and Port is the GWLB listening on and forwarding to the VM-Series instances?
ℹ You can check traffic logs either in Panorama or local device
ℹ Reboot your VM-Series if you do not see any traffic logs!
- Check Traffic Logs for Health Probes
- In Panorama UI -> Monitor -> Traffic
- Analyze the traffic logs for the port 80 traffic
- Enable Columns to view
Bytes Sent
andBytes Received
- Notice that the sessions matching allow policy for
student-gwlb-any
policy but aging out❓ Why are there two different source addresses in the traffic logs for these GWLB Health Probes?
Resolve the issue with the Health Probes
To verify your solution (or shortcut!), expand below for specific steps
❓ Why is the application still detected as incomplete?
ℹ For the GWLB Distributed model, Inbound traffic for public services comes directly into the App Spoke Internet Gateway. The Ingress VPC route table directs traffic to the GWLB Endpoints in the App Spoke VPC.
Application owners can provision their external facing resources in their VPC (EIP, Public NLB / ALB, etc), but all traffic will be forwarded to Security VPC (via GWLB endpoint) for inspection prior to reaching the resource.
This inbound traffic flow uses AWS Private Link technology and does not involve the Transit Gateway at all.
First, investigate spoke1-app-vpc
Route Tables in the VPC Dashboard and try to identify and fix what is missing. Refer to the diagram for guidance.
For inbound traffic, no changes are required for the web
route tables in the Spoke VPCs
Refer to terraform output for GWLB Endpoint IDs (or identify them in VPC Dashboard)
To verify your solution (or shortcut!), expand below for specific steps
First investigate spoke2-app-vpc
Route Tables in the VPC Dashboard and try to identify and fix what is missing. Refer to the diagram for guidance.
For inbound traffic, no changes are needed for the web
route tables in the App Spoke VPCs
Refer to terraform output for GWLB Endpoint IDs (or identify them in VPC Dashboard)
To verify your solution (or shortcut!), expand below for specific steps
Generate some HTTP traffic to the web apps using the DNS name of the Public NLB that is in front of the web compute instances. URL will be the FQDN of the NLBs from the terraform output
app_nlbs_dns
ℹ The inbound routing should now be in place, but you will not get a response yet as the instances are not yet running a web server.
ℹ The web instances are configured to update and install the web server automatically with a user-data script, but they first must have a working outbound path to the Internet to retrieve packages.
Access the spoke web servers console using the AWS Systems Manager connect
spoke1-web-az1
and click Connect button in the top rightping 8.8.8.8
curl http://ifconfig.me
ℹ Session Manager relies on a package being installed in the OS that makes an outbound connection to the AWS SSM service. We do not have outbound internet currently, but there is a private endpoint for the SSM service configured. It is not possible to use SSM for CLI access to VM-Series, as it does not have the package installed
( addr.dst in 10.200.0.0/16 )
❓ Why does VM-Series see the private NLB addresses as the destination instead of the public address?
ℹ Since outbound traffic was not working earlier, let's check to see if it is making it to VM-Series.
( addr.src in 10.200.0.0/16 )
ℹ We now have visibility and control for inbound connectivity but instances do not yet have a path outbound.
First, investigate spoke1-app-vpc
Route Tables in the VPC Dashboard and try to identify and fix what is missing. Refer to the diagram for guidance.
To verify your solution (or shortcut!), expand below for specific steps
First, investigate spoke2-app-vpc
Route Tables in the VPC Dashboard and try to identify and fix what is missing. Refer to the diagram for guidance.
To verify your solution (or shortcut!), expand below for specific steps
ℹ For GWLB Centralized Outbound, the TGW routing for Outbound and EastWest (OB/EW) traffic is the same as previous TGW models. Spokes send all traffic to TGW. Spoke TGW RT directs all traffic to Security VPC. Security TGW RT has routes to reach all spoke VPCs for return traffic.
For OB/EW flows, the GWLB doesn't come into play until traffic comes into the Security VPC from TGW before being forwarded to a GWLB endpoint.
First, investigate Transit Gateway Route Tables in the VPC Dashboard and try to identify and fix what is missing. Refer to the diagram for guidance.
To verify your solution (or shortcut!), expand below for specific steps
❓ What needs to be done on the TGW route tables in order to bring additional Spoke VPCs online for OB/EW traffic?
ℹ The routing and traffic flows can be tricky to grasp, especially when designing for multiple availability zones. For this lab, we are using separate endpoints for Outbound VS EastWest, plus separate endpoints per AZ. Take your time and understand the traffic flows as you configure the routing.
Multi-AZ GWLB generally requires unique route tables per subnet in both AZs in order to direct traffic in that AZ toward the resources (GWLB endpoint, NAT GW) in the same AZ.
First, investigate the VPC Route Tables in the Security VPC and try to identify and fix what is missing. Refer to the diagram for guidance.
Refer to your output from Terraform for the GWLB Endpoint IDs
You can also view the deployed endpoints VPC Dashboard -> Endpoints
To verify your solution (or shortcut!), expand below for specific steps
At this point, all routing should be in place for GWLB topology. Now we will verify traffic flows and check the logs.
ℹ Note that web instances in Spoke VPCs are configured to update and install the web server automatically, now that you have provided an outbound path, this should have been completed.
ping 8.8.8.8
curl http://ifconfig.me
ℹ ifconfig.me is a service that just returns your client's public IP (like google "what is my ip" or ipmonkey.com)
❓ What AWS resources have the public IPs you are egressing from?
( addr.src in 10.200.0.0/16 )
Reference terraform output for app_nlbs_dns
From your local machine browser, attempt connection to http://`app1_nlb`
From your local machine browser, attempt connection to http://`app2_nlb`
Refresh a few times
Troubleshooting Steps if Inbound Traffic is not working
ℹ Local IP and VM Name in the response will show you which VM you are connected to behind the NLB. Session persistence may keep you pinned to specific instances
spoke1-web-az1
spoke1-web-az1
instance, test traffic to spoke2-web-az1
ping 10.250.0.x
curl http://10.250.0.x
ℹ Backhaul traffic flows (VPN or Direct Connect Attachments to TGW) will follow this same general traffic flow as E/W between VPCs.
Now we have verified inbound, outbound, and east/west traffic flows. We have full visibility of this traffic but as you can see in the logs, everything is wide open!
Since all traffic to GWLB comes in and out of VM-Series on the same interface and zone, it is tricky to create and manage effective security policies specific to traffic flow directions.
We will now fix this using GWLB sub-interface associations.
ℹ Since each GLWB endpoint can be associated with a specific sub-interface, each endpoint can have a separate zone.
ℹ This does not change the overall concept that all traffic from GWLB is an encapsulated bump in the wire and will ingress and egress the same sub-interface. In the default behavior, there is no routing between zones.
tpl-aws-gwlb-lab
-> ZonesLayer3
gwlbe-outbound
gwlbe-eastwest
gwlbe-inbound-spoke1
gwlbe-inbound-spoke2
ℹ No IP configurations are actually used by these sub-interfaces, but they should be set to use DCHP to function properly
ℹ Unique VLAN Tags must be specified but are not actually used for GWLB GENEVE traffic. The VLAN concept is being repurposed to identify sub-interfaces based on the endpoint IDs.
tpl-aws-gwlb-lab
-> Interfaces10
10
gwlbe-outbound
vr-default
gwlbe-outbound
DHCP Client
11
11
gwlbe-eastwest
vr-default
gwlbe-eastwest
DHCP Client
12
12
gwlbe-inbound-spoke1
vr-default
gwlbe-inbound-spoke1
DHCP Client
13
13
gwlbe-inbound-spoke2
vr-default
gwlbe-inbound-spoke2
DHCP Client
ℹ Now since we have sub-interfaces and zones, we can associate specific endpoints to sub-interfaces.
ℹ For dual-az deployments, there will be two endpoints for each traffic flow. Both will be associated to the same sub-interface.
endpoint_ids
"spoke1-inbound1" = "vpce-0e51ca41845d7e46d"
"spoke1-inbound2" = "vpce-08ecd4e5d4a76984c"
"spoke2-inbound1" = "vpce-0d72d55ab54535809"
"spoke2-inbound2" = "vpce-061d284d04570c3c0"
"east-west1" = "vpce-0250aac691a916896"
"east-west2" = "vpce-009f5031e90721e20"
"outbound1" = "vpce-0e152c50daaa4c388"
"outbound2" = "vpce-03a1ab84543184ae8"
}
request plugins vm_series aws gwlb associate interface ethernet1/1.10 vpc-endpoint ${outbound1}
request plugins vm_series aws gwlb associate interface ethernet1/1.10 vpc-endpoint ${outbound2}
request plugins vm_series aws gwlb associate interface ethernet1/1.11 vpc-endpoint ${east-west1}
request plugins vm_series aws gwlb associate interface ethernet1/1.11 vpc-endpoint ${east-west2}
request plugins vm_series aws gwlb associate interface ethernet1/1.12 vpc-endpoint ${spoke1-inbound1}
request plugins vm_series aws gwlb associate interface ethernet1/1.12 vpc-endpoint ${spoke1-inbound2}
request plugins vm_series aws gwlb associate interface ethernet1/1.13 vpc-endpoint ${spoke2-inbound1}
request plugins vm_series aws gwlb associate interface ethernet1/1.13 vpc-endpoint ${spoke2-inbound2}
Paste commands into CLI of both VM-Series
Use show command to verify the associations
show plugins vm_series aws gwlb
ℹ Typically, the GWLB endpoint associations will be set as bootstrap parameters. These are plugin request commands and not stored in XML config and cannot be pushed from Panorama.
ℹ Now that each endpoint is associated with a specific zone, we can have more logic with our security policies. Important to understand that although we have associated each endpoint to separate sub-interfaces, all of the traffic flows are still intra-zone. VM-Series will return traffic back to the same endpoint that it came in from.
intrazone-default
policygwlbe-outbound
10.200.0.48/28, 10.200.1.48/28, 10.250.0.48/28, 10.250.1.48/28
ssl, web-browsing, yum, ntp
gwlbe-outbound
any
gwlbe-eastwest
10.200.0.48/28, 10.200.1.48/28
ssh, web-browsing, ping
gwlbe-eastwest
10.250.0.48/28, 10.250.1.48/28
gwlbe-eastwest
10.250.0.48/28, 10.250.1.48/28
ssh, web-browsing, ping
gwlbe-eastwest
10.200.0.48/28, 10.200.1.48/28
gwlbe-inbound-spoke1
Your Client IP
(google 'what is my ip' from your browser)web-browsing, ping
gwlbe-inbound-spoke1
10.200.0.16/28, 10.200.1.16/28
gwlbe-inbound-spoke2
Your Client IP
(google 'what is my ip' from your browser)web-browsing, ping
gwlbe-inbound-spoke2
10.250.0.16/28, 10.250.1.16/28
Update the final student-gwlb-any
catch-all policy to deny all traffic instead of allow
Make sure this policy is moved to the end of the list
Name: student-gwlb-any
any
any
any
any
any
Deny
Commit to Panorama and Push to Devices
Generate inbound, outbound, and east/west traffic
Verify traffic is matching sub-interface based zones as expected
ℹ If everything is configured correctly, only the Health Probes should be hitting the gwlb zone on the eth1 interface. The health probes are sent from the GWLB directly to the VM-Series ENI, not through an endpoint or GENEVE.
Overlay Routing enables the VM-Series to strip off the GENEVE encapsulation and use standard routing behavior to determine the next hop. Most commonly this is used for outbound Internet traffic. When the return traffic is received by VM-Series, it will be re-encapsulated and sent to the same endpoint where the session originated.
Overlay allows the ability to use familiar inside -> outside zone-based policies. With overlay enabled, you typically do not need separate endpoints (and sub-interface associations) for outbound and eastwest.
We will update our existing infrastructure to use overlay routing. On the updated diagram, you will see the changes on the right side where the NAT Gateways are replaced and instead, an additional public interface and EIPs are attached to the VM-series.
vmseries01-public
security-vpc-natgw1
vmseries-data
Name
= vmseries01-public
After the interface is created:
vmseries01
instanceRepeat all steps above to create and attach the interface for vmseries02
!
vmseries01-public
vmseries02-public
vmseries01-public
EIP to the ENI you created
vmseries01-public
vmseries02-public
ℹ Overlay routing presents a problem when using multiple AZs. Since the next hop is different for each AZ, we can no longer use identical configurations for all VMs. We can accept the gateway from DHCP for the public interface, but need to create a static route for return traffic to the inside. There are several methods to handle this, for this manual deployment using device-specific variables is arguably the cleanest approach.
Slot 1
ethernet1/2
Public Interface - Overlay Routing
Layer 3
vr-default
public
Edit ethernet1/1 Interface and UNCHECK the box to "Automatically create default route pointing to default gateway provided by server"
Create a static route for internal summary using a Panorama template variable for the next-hop
Spoke VPC Summary
10.0.0.0/8
ethernet1/1
IP Address
IP Netmask
-> NoneAWS Inside Data subnet gateway per AZ
Set Next-Hop variable value per device
$inside-next-hop
variable and select override10.100.0.17
which is the gateway of the ps-lab-data1 inside the subnet for the first AZ10.100.1.17
Navigate to Policies and update the zone of the outbound policy to use the new zone
Spoke Web Subnets Outbound
gwlbe-outbound
to public
Create a NAT Policy for the outbound overlay traffic
outbound-overlay
gwlbe-outbound
public
Dynamic IP and Port
Interface Address
ethernet1/2
IP
request plugins vm_series aws gwlb overlay-routing enable yes
request restart system
yum update
curl http://ifconfig.me
❓ What AWS resources now have the public IPs you are egressing from?
Submit your answers for the Lab Questions found throughout this guide.
Congratulations!