Moving from Linode to Hetzner
December 8, 2025
Some of Unread’s functionality requires server infrastructure. I run servers to support both Unread Cloud and Unread’s webpage text functionality.
Linode was my hosting provider of choice for a long time, but I recently moved these systems to Hetzner. I wanted to write a bit about how Linode and Hetzner compare.
Price and Performance
Hetzner is far more cost-effective for me. This is the pricing in US dollars for some of Linode’s low-end instances:
Nanode 1GB — $5.00/month
1GB RAM. 1 CPU.
I was unable to get Geekbench scores for this because Geekbench requires 2GB of memory.
Linode 2GB — $12.00/month
2GB RAM. 1 CPU.
Geekbench scores: 1323 single-core, 1317 multi-core.
Linode 4GB — $24.00/month
4GB RAM. 2 CPUs.
Geekbench scores: 1095 single-core, 2036 multi-core.
This is the pricing in US dollars for some of Hetzner’s low-end instances in Nuremberg, Falkenstein, and Helsinki:
cx23 — $3.49/month
4GB RAM. 2 VCPUs.
Geekbench scores: 769 single-core, 1377 multi-core.
cpx22 — $6.99/month
4GB RAM. 2 VCPUs.
Geekbench scores: 1902 single-core, 3484 multi-core.
These systems all have shared CPUs. Geekbench scores are likely less meaningful for shared CPU instances than they would be for dedicated CPU instances.
IPv4 Addresses
Each Hetzner instance includes an IPv6 address. Hetzner charges an additional $0.60/month for an instance to have a public IPv4 address. Linode includes an IPv4 address and an IPv6 address with each instance. This additional cost needs to be taken into account for a Hetzner instance that needs an IPv4 address.
An instance needs a public IPv4 address if it accepts incoming requests from arbitrary clients, or if it makes outgoing requests to arbitrary servers. I was able to skip IPv4 addresses on instances that just run backend services such as Redis and PostgreSQL.
I find instances without IPv4 addresses to be inconvenient in unexpected ways. For example, accessing github.com and accessing Wasabi’s S3-compatible storage both require IPv4. While I am able to connect to IPv6 IP addresses from my home/office network, I am sometimes unable to do so from public Wi-Fi networks.
Server Limits
In a Linode account, I was always able to create servers that I wanted.
Hetzner limits customers to a specific number of servers. A customer can request increases. I was initially limited to 5 servers. That would have been insufficient to move most of my cloud infrastructure to Hetzner. After requesting an increase, I now have a limit of 30 servers.
I have occasionally been unable to create a server of a specific type in a specific data center. I have worked around that by choosing a different data center.
Accessing Websites
Much of Unread’s server work consists of accessing feeds and webpages from websites. Hetzner’s instances at the pricing above are available in Nuremberg, Falkenstein, and Helsinki — all of which are in the European Union. Some websites outside the EU that do not have international audiences block access to clients in the EU, presumably because those websites do not want to comply with EU privacy laws. Since Unread operates on behalf of customers inside and outside of the EU, it needs to be able to access websites and webpages from such websites.
Hetzner does have data centers outside the European Union: specifically in Singapore; in Hillsboro, Oregon; and in Ashburn, Virginia. However, servers available in those data centers are more limited and more expensive.
My solution for Unread’s servers was to host a proxy in a United States data center. When Unread’s feed retrieval system or webpage retrieval system get a forbidden response, they retry the request using the proxy server hosted in the United States.
Private Networks
Hetzner has the concept of a private network. A customer can create a 10.* network for a specific stack of servers. I found communicating across these private networks unreliable, and slower than communicating across the public IP addresses. Others seem to have similar experiences.
On Linode I used the default 192.168.* private network. These networks were not completely private. They were accessible to other Linode customers in the same data center. Linode also has an ability to create VLANs but I never explored it.
In the end I ended up making my Hetzner instances communicate exclusively through public IP addresses. That private communication requires authentication and is encrypted. I would have preferred this communication to happen over a private network, but that was slower and less reliable.
Referral Links
I am happy with my decision to move to Hetzner. My servers are more powerful and less expensive. But Linode does have advantages over Hetzner.