.. Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information#
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
   http://www.apache.org/licenses/LICENSE-2.0
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.


In a CloudStack, guest VMs can communicate with each other using shared
infrastructure with the security and user perception that the guests
have a private LAN. The CloudStack virtual router is the main component
providing networking features for guest traffic.

.. include:: networking/guest_traffic.rst

.. include:: networking/networking_in_pod.rst

.. include:: networking/networking_in_zone.rst

.. include:: networking/basic_zone_config.rst

.. include:: networking/advanced_zone_config.rst

.. include:: networking/multiple_guest_networks.rst

.. include:: networking/ip_reservation_in_guest_networks.rst

.. include:: networking/public_ips_and_vlans_for_accounts.rst

.. include:: networking/multiple_ips_on_single_nic.rst

.. include:: networking/multiple_ip_ranges.rst

.. include:: networking/elastic_ips.rst

.. include:: networking/portable_ips.rst

.. include:: networking/multiple_subnets_in_shared_network.rst

.. include:: networking/isolation_in_advanced_zone_with_vlan.rst

.. include:: networking/security_groups.rst

.. include:: networking/external_firewalls_and_load_balancers.rst

.. include:: networking/global_server_load_balancing.rst

.. include:: networking/guest_ip_ranges.rst

.. include:: networking/acquiring_an_ip_address.rst

.. include:: networking/releasing_an_ip_address.rst

.. include:: networking/static_nat.rst

.. include:: networking/ip_forwarding_and_firewalling.rst

.. include:: networking/ip_load_balancing.rst

.. include:: networking/dns_and_dhcp.rst

.. include:: networking/remote_access_vpn.rst

.. include:: networking/site_to_site_vpn.rst

.. include:: networking/inter_vlan_routing.rst

.. include:: networking/virtual_private_cloud_config.rst

.. include:: networking/persistent_networks.rst

.. include:: networking/palo_alto_config.rst

