# SOME DESCRIPTIVE TITLE.
# Copyright (C) 
# This file is distributed under the same license as the Apache CloudStack Administration Documentation package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Apache CloudStack Administration Documentation 4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-30 12:52+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../../networking/elastic_ips.rst:18
# 68f25b7a2e514065b563d7ccdd72f355
msgid "About Elastic IPs"
msgstr ""

#: ../../networking/elastic_ips.rst:20
# bf34049aef4a4cddb2aa0169d49b5281
msgid "Elastic IP (EIP) addresses are the IP addresses that are associated with an account, and act as static IP addresses. The account owner has the complete control over the Elastic IP addresses that belong to the account. As an account owner, you can allocate an Elastic IP to a VM of your choice from the EIP pool of your account. Later if required you can reassign the IP address to a different VM. This feature is extremely helpful during VM failure. Instead of replacing the VM which is down, the IP address can be reassigned to a new VM in your account."
msgstr ""

#: ../../networking/elastic_ips.rst:29
# 8b249afbc2664b01a564524559d5c5fd
msgid "Similar to the public IP address, Elastic IP addresses are mapped to their associated private IP addresses by using StaticNAT. The EIP service is equipped with StaticNAT (1:1) service in an EIP-enabled basic zone. The default network offering, DefaultSharedNetscalerEIPandELBNetworkOffering, provides your network with EIP and ELB network services if a NetScaler device is deployed in your zone. Consider the following illustration for more details."
msgstr ""

#: ../../networking/elastic_ips.rst:37
# deef19d6b1414dbb967743f1b7cef2df
msgid "|eip-ns-basiczone.png|"
msgstr ""

#: ../../networking/elastic_ips.rst:39
# a1f02d4922ed4bbb8941ccc048f0b0b4
msgid "In the illustration, a NetScaler appliance is the default entry or exit point for the CloudStack instances, and firewall is the default entry or exit point for the rest of the data center. Netscaler provides LB services and staticNAT service to the guest networks. The guest traffic in the pods and the Management Server are on different subnets / VLANs. The policy-based routing in the data center core switch sends the public traffic through the NetScaler, whereas the rest of the data center goes through the firewall."
msgstr ""

#: ../../networking/elastic_ips.rst:48
# 28c78bf967714b33884e97cfa4ca307b
msgid "The EIP work flow is as follows:"
msgstr ""

#: ../../networking/elastic_ips.rst:50
# 773cd4ac9b6d4973832aafd2d0cf2f9e
msgid "When a user VM is deployed, a public IP is automatically acquired from the pool of public IPs configured in the zone. This IP is owned by the VM's account."
msgstr ""

#: ../../networking/elastic_ips.rst:54
# 23a70289953d415c81e8dd6ebc86423c
msgid "Each VM will have its own private IP. When the user VM starts, Static NAT is provisioned on the NetScaler device by using the Inbound Network Address Translation (INAT) and Reverse NAT (RNAT) rules between the public IP and the private IP."
msgstr ""

#: ../../networking/elastic_ips.rst:60
# bfa50768ea9b496599aa1804e3437f25
msgid "Inbound NAT (INAT) is a type of NAT supported by NetScaler, in which the destination IP address is replaced in the packets from the public network, such as the Internet, with the private IP address of a VM in the private network. Reverse NAT (RNAT) is a type of NAT supported by NetScaler, in which the source IP address is replaced in the packets generated by a VM in the private network with the public IP address."
msgstr ""

#: ../../networking/elastic_ips.rst:67
# cef50f723bd34b298098fab0ed2c2328
msgid "This default public IP will be released in two cases:"
msgstr ""

#: ../../networking/elastic_ips.rst:69
# 954fad75b2bd41d1b16f50f819a7e300
msgid "When the VM is stopped. When the VM starts, it again receives a new public IP, not necessarily the same one allocated initially, from the pool of Public IPs."
msgstr ""

#: ../../networking/elastic_ips.rst:73
# a5713ccdbc7f41dea9e1fb5bd2a81337
msgid "The user acquires a public IP (Elastic IP). This public IP is associated with the account, but will not be mapped to any private IP. However, the user can enable Static NAT to associate this IP to the private IP of a VM in the account. The Static NAT rule for the public IP can be disabled at any time. When Static NAT is disabled, a new public IP is allocated from the pool, which is not necessarily be the same one allocated initially."
msgstr ""

#: ../../networking/elastic_ips.rst:81
# a8f5524c22bd4ddf82fd8d2d6240b94f
msgid "For the deployments where public IPs are limited resources, you have the flexibility to choose not to allocate a public IP by default. You can use the Associate Public IP option to turn on or off the automatic public IP assignment in the EIP-enabled Basic zones. If you turn off the automatic public IP assignment while creating a network offering, only a private IP is assigned to a VM when the VM is deployed with that network offering. Later, the user can acquire an IP for the VM and enable static NAT."
msgstr ""

#: ../../networking/elastic_ips.rst:90
# 89cea0807df84e08bd3c61dbf7579d80
msgid "For more information on the Associate Public IP option, see `\"Creating a New Network Offering\" <networking.html#creating-a-new-network-offering>`_."
msgstr ""

#: ../../networking/elastic_ips.rst:94
# e8e0a7038ebb4ea181ba58c3f4cdc0ed
msgid "The Associate Public IP feature is designed only for use with user VMs. The System VMs continue to get both public IP and private by default, irrespective of the network offering configuration."
msgstr ""

#: ../../networking/elastic_ips.rst:98
# 116e2d3d7abc4e4b89e08770c938b985
msgid "New deployments which use the default shared network offering with EIP and ELB services to create a shared network in the Basic zone will continue allocating public IPs to each user VM."
msgstr ""

