[New date] We are going to start charging for dedicated IPv4 in ~~January 1st~~ starting February 1st

If you’re a long-time Fly.io customer you will notice we first ship stuff and, later on, we add billing to it. Our pricing page has been for a while we charge ~$2 per dedicated IPv4 per month but we never actually did!

Dedicated IPv4 is a scarce resource but fortunately last December we had Announcement: Shared Anycast IPv4 and that bought us a ton of time until this was an issue and shared IPv4s are free!

We promise we would give a good heads up before we charged you and that’s here, we will only start billing in January 1st February 1st!

Do I need to do something for future apps?

New apps have been getting shared IPv4 when first deployed for a while, your new apps should be good to go with no unexpected charges. Also, just creating an app doesn’t assign IPs immediately.

How NOT to be billed?

I’m glad you asked. All you need to do is remove your dedicated IPv4 and add a shared IPv4. That takes roughly two commands per app (assuming you only have one dedicated IPv4 per app).

$ fly ips release -a YOUR_APP_NAME
Released from YOUR_APP_NAME

$ fly ips allocate-v4 --shared -a YOUR_APP_NAME
v4	shared	global

If you have certificates make sure to update your DNS records! Currently you can only have either a shared or dedicated IPv4 so make sure to have a dedicated IPv6 as a fallback.

If you you’re using a custom domain make sure to issue certificates for your shared IP to work properly like this: New Shared IPv4 Connection Reset by peer - #2 by pavel

Originally from Jerome’s post: We now allow having both a shared IPv4 and dedicated IPv4. This change should make it possible to switch to a shared IPv4 without downtime.

The produce looks like this:

  • Add shared ipv4 via flyctl ips allocate-v4 --shared
  • (Optional: add the shared ipv4 as an A record for your hostname if you don’t use a CNAME to .fly.dev)
  • Confirm your app works via shared IP: curl -Iv http://<your-hostname> --resolve <your-hostname>:80:<shared ipv4 you got> (should respond with a 301 redirect)
  • Wait for DNS caches to clear… probably 5 minutes but that varies wildly, this should be the biggest value between your DNS record’s TTL and our <your-app>.fly.dev record (300 I believe).
  • Remove the dedicated IPv4 from Fly (and optionally remove from your DNS if you set it manually as an A record)

How do I know which apps have dedicated IPv4?

We shipped a new improvement to our IP usage page to show which apps have how dedicated IPs. It will show both dedicated IPv6 (which are free) and dedicated IPv4 (the ones that will eventually charge you).

Can I preview how much this would charge me?

We also shipped a preview in your invoice page that tells you how much dedicated IPv4 usage you have so far in the current month. These will not be added to your invoice right now but by January 1st Feburary 1st they will be added for Marchs’s invoice. That means yes, you had free dedicated IPV4 usage from January 2022 until the end of November 2023 January 2023 and we will not charge those.

Let us know if there’s any other questions, we’d love to hear them!


Just to check, when I have an A record currently using a dedicated IP, should I allocate a new shared IPv4, update the DNS record, wait for the TTL, and then remove the dedicated IP?

I assume the SSL certificate is fine too?


Awesome question! That’s correct, Ill update the topic to reflect that

1 Like

Great, thanks @lubien!

Just one correction on my end: Currently you can only have either a shared or dedicated IPv4 so make sure to have a dedicated IPv6 as a fallback.

Edit: this is no longer true, see this post.

Does a custom HTTP service port (other than 80 and 443) require a dedicated IPv4 address?

I’m almost certain it doesn’t but can you paste your toml (feel free to hide things such as app name) so I can try it myself over the work-week on an app I own to confirm?

Here is the .toml file for the app with a custom HTTPS port:

app = "my-example-1234"
kill_signal = "SIGINT"
kill_timeout = "5s"

  protocol = "tcp"
  internal_port = 33128
  processes = ["app"]

    port = 33128
    handlers = ["tls", "http"]
    type = "connections"
    hard_limit = 1000
    soft_limit = 800

    interval = "15s"
    timeout = "2s"
    grace_period = "15s"

Does it require a dedicated IPv4 address?

How do I connect to my app to run those two commands.

I never used CLI for Fly, so I’m not sure if browser authorization is enough, can I directly run these commands in Command Prompt?

I’m a bit confused, sorry about that, and also should I write that IP? Because the v4 (of my Node) App has different numbers than those?

Hey @Aleksandar1 ! Installing Flyctl locally and then running the commands from command prompt is the easiest way. You can find the steps to install Flyctl based on your operating system here: Install flyctl · Fly Docs

If you don’t want to install it locally, you should be able to use our WebCLI to run the commands from your browser. Go to Sign In · Fly and click on the “Launch WebCLI” button. should I write that IP?

No, you’ll need to replace that IP with the dedicated IPv4 address of your app that you want to release. If you don’t know the dedicated ipv4, you can find it by running fly ips list -a <your_app_name>

1 Like

How will billing work in regards to short lived machines, would they be billed based on the $2 per month converted into a per second rate? Similarly to how other resources (CPU, memory…) are charged.

To answer my own question: as of today, custom HTTP/HTTPS ports DO require a dedicated IPv4 address. Otherwise, the service cannot be communicated (SSL/TLS handshake error).

I have checked the usage page and even though it says I have 0 dedicated IPs I have $0.17 on my bill for a dedicated address. Why?

Just to confirm - you’re not seeing anything on this usage page (the usage could be for a now-deleted assignment)? The usage page you linked is the organisation usage summary whereas that one is the dedicated IP assignment page.

I see usage for a deleted app, I deleted it because I didn’t want a dedicated IP, but I still have that in my bill, so I will get charged for it?

This means that there is no way to perform a seamless migration without downtime on the ipv4 space?

Just want to say upfront - you won’t be charged. The $0.17 you see is a preview - we’re not going to begin charging for dedicated IPv4 until December.

If I’m understanding you correctly, you had a dedicated IPv4 address allocated to your app for some amount of time in November? We track IPv4 usage at increments of an hour, so that’s probably why you’re seeing a small amount.

Good point! I have an exact same question.

Yes, but I removed the dedicated IP address as soon as I noticed I had an amount in my bill, I think I noticed like few hours in

Yes so the preview charge you see will be the $2/month prorated for the few hours that the address was allocated to your app.

1 Like