.. 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.
   

Managing Networks and Traffic
=============================

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/inter_vlan_routing.rst

.. include:: networking/virtual_private_cloud_config.rst

.. include:: networking/persistent_networks.rst

.. include:: networking/palo_alto_config.rst

