Retain Public Virtual IP Address? - azure

When you reboot an Azure Virtual Machine, its public virtual IP address does not change. However, if you shutdown the VM and then start it back up, it will receive a different public virtual IP address.
This VM server is hosting a service which end users may need to create a firewall rule for. This may require them to have the public IP address of the server.
Is there a method to keep the same public virtual IP address? Can Microsoft allow this on a per account / per VM / per subscription basis?
Thanks

Yes, there is a way for you to do this, but you will still be charged compute charges. The Public IP is linked to the cloud service container the VM runs in and as long as something is running (or appears to be running) in that container than the VIP will stay assigned to you. You can shutdown the VM from within the VM itself.
Check out the following post by Keith Mayer for more info on this: http://blogs.technet.com/b/keithmayer/archive/2013/06/19/windows-azure-virtual-machines-there-s-more-than-1-way-to-shutdown-a-vm.aspx#.UqInbRwo5aQ
Currently leasing a VIP or having a fully assigned VIP that is just for you across deployments and such is not an option. They have been hearing this feedback for quite some time and from many people.

Related

Azure VM's external IP does not match DNS

I have an MSDN account and created a VM (Windows 2012 R2) to which I have added several software packages for a proof of concept.
The problem is that with my limited $50/month credit, I'm forced to shutdown the VM at night, especially over weekends. When you shutdown a VM from the admin console (the only way they stop charging you) you will also lose the IP address.
The problem occurs when you restart the VM the next day, it will get a different IP. If you try to lookup the machine through a ping, their advertised external IP retrieved through DNS does NOT match the external IP address of the VM.
This makes it impossible for the software to resolve the host.
I figured it might take a couple hours for DNS to push the change, but it's been all day now and the DNS address is still incorrect.
Anyone else run into this?
(I cant create a support ticket because I only have an MSDN subscription.)
Where are you looking up the IP address? When you shutdown the machine and restart it you are correct in that it assigns a new external ip address. This only happens if this is the only VM running in that cloud service. This sounds like your setup.
The IP address you should be looking for is the one attached to the cloud service that your VM is a part of. If you go to the dashboard of the cloud service it will show you the public virtual IP address along with the FQDN. This IP will also match your VM's public IP.
See below
One thing I would suggest is to use Reserved IP option. It allows you to hook up semi permanent IP address to your cloud service.
https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-reserved-public-ip/
Worth mentioning that Public IP may be returned back to the pool under certain circumstances, i.e. if your subscription run out of money. This is public cloud service after all, and however big the pool is, it is still limited.
Worth noting that I'm using the same approach shutting down my VMs when I'm not using them, but I don't experience IP change too often. Possibly because I have A0 domain controller VM always running.

How do I safely access one Azure VM from another within a Cloud Service and Availability Set

I have an Azure Cloud Service, mywebapp.cloudapp.net, that consists of two Azure VMs - mywebappvm1 and mywebappvm2. Both VMs are in the same Availability Set and have the same DNS name.
I also have a Regional Reserved IP address assigned to the Cloud Service so that I can give our clients a guaranteed IP address that our app uses.
Part of the app uses a private background process, currently only running on one of the VMs. I want to be able to make a connection to that process over TCP running on mywebappvm1 from mywebappvm2. I could use the public IP and an endpoint on mywebappvm1 but I don't want the background service to be publicly accessible.
I'm currently using the private IP address, but is that safe? Will the private IP of each VM change if it's rebooted? I can't see an easy way of fixing the private IP of each VM - that seems like something you can do with a VNET but I can't find any information on how to do it with a cloud service and an availability group as well.
Is there perhaps another way to run a web app on multiple load-balanced VMs within an availability set that would make this easier?
What you do is absolutely safe and actually a recommended best practice. You should not go out to public IP address in order to communicate between the Virtual Machines.
It is also a recommended best practice to organize your Virtual Machines into Virtual Network and sub-nets.
This excellent blog post describes how can you even use static IP addresses for the VMs, so you are always 100% sure that mywebappvm1 always get XXX.XXX.XXX.XXX IP Address andyour mywebappvm2 always get YYY.YYY.YYY.YYY IP Address.
Please note that if you do not use Static IP Address assigned to the VM, it is guaranteed that the IP Address of the VM may change.
The IP for a webRole VM instance will not change for the lifetime of the deployment regardless of reboot, update or swapping. The IP will be released only if you delete the deployment, detailed here

Azure vm public ip?

we need to access our partner's sql azure db, they ask for an ip so they add to the whitelist, thing is we doing the dev work on our azure vm (under different subscription), what ip should we give them, I suppose a public IP address? Will that change over time?
Thanks advance for the help!
Your VM public IP will not change unless all the VMs in that cloud service (the service holding the public IP) are stop/deallocated. Restarting the VM won't change the IP either.
I usually shutdown my VM very carefully to prevent accidentally changing my IP addresses. So far for past few years, I just tried once unintended change.
Note:
You may also consider the newly introduced Reserved IP to reserve an IP and prevent it from changing. However,
[a]t this time, you can’t reserve an IP address for a cloud service
that you have already created.
which means you could only reserve a new IP address if you would like to use Reserved IP.

2 vms in one cloud service only one IP?

I created 2 vms, one for centos and another one for azure, I used the same cloud service, but both have the same public IP Address, why>? can I change it?
Or they have to be in different separate cloud services?
By default, they are behind a single IP address which load balances the private IP addresses. Until recently, there was no way to get a public IP for a virtual machine.
Now, it's possible to assign a public IP to a virtual machine:
With Instance-level Public IPs for VMs, you can now assign public IP addresses to your virtual machines, so they become directly addressable without having to map an endpoint through a VIP. This feature will enable scenarios like easily running FTP servers in Azure and monitoring virtual machines directly using their IPs.
We are making this new capability available in preview form today. This feature is available only with new deployments and new virtual networks and can be enabled via PowerShell.
Typically, the load balancer is fine, but there are options if you absolutely need access to individual machines.
Since they're in the same cloud service, they're probably behind the same load balancer, and a load balancer would only have one public IP.
So, yes, I would use different cloud services as you mentioned.

How can I programmatically change the IP address of an Azure Cloud Service or VM?

Background. I have a service that is crawling a partners website. Their website blocks "bot like" behaviour by IP Address. They don't control their servers themselves, so they want me to change IP address of my crawler often (e.g. every minute). The crawler is currently running as an Azure Cloud Service.
So my question is. How would you programmatically change the IP address of an Azure server?
I could use a Proxy... but the site is running on SSL, so I'm not sure this is an option.
I could use a VPN connection... but I'm not sure if it's possible to programmatically dial a VPN from within a Cloud Service/VM? I'm using C#/.NET.
Finally. I tried to do a VIP Swap, which actually gives me a new IP in seconds. But unfortunately this only works when swapping form Staging to Production. I get an error when trying to swap from Production to Staging, if there is no staging running. Why is this blocked?
You cannot programmatically change a deployment's IP address, aside from shutting down the deployment (which releases the IP address) and then re-starting it (and that you can do programmatically, or through PowerShell). Also note that if you have several Virtual Machines in the same deployment, each VM will share the same public IP address.
Note that with Virtual Machines (vs. web/worker role cloud services), if you have a single Virtual Machine, you can stop the VM, then restart it, and you'll get a new IP address (ok, actually, there's no guarantee you'll get a different IP address, so more accurately you'll be assigned an IP address) while retaining the state of your VM. Shutdown and startup are not an instantaneous operatios however, and it's not going to provide you a per-minute IP address (and your VM will end up being offline shutting down or starting up pretty much all the time), so it won't satisfy your requirement.

Resources