Tor relay/exit nodes under preemptible VMs [closed]

I have a paid subscription to the Google Cloud Platform, and I want to run Tor relay and exit nodes. I use Docker image quantumobject/docker-tor-exit-relay, just plug&play.

In a nutshell, per the answers received:

  • g1-micro VM configuration is the cheapest alternative, but may not perform as at high performance I'm want to offer.
  • Custom VM with 1 vCPU and 1GB RAM, with commited usage for 3 years, seems to be the most convenient and affordable.
  • Preemptible VM class is useless.
  • Several instances behind a Load balancer is a bad idea.

My original rationale

As the preemptible VMs are much cheaper, I wanted to use instances groups with preemptible VMs. Then, in order to have a high availability nodes, I'm planning to use GCP load balancer, in order to keep only one IP address and at least one VM running at any moment.

Also, I've originally planned to use the g1-small VM type (1/2 shared vCPU and 1.7 GB RAM) for costs, and I'm comparing with other alternatives like regular class VMs with "commited usage" (that apply discounts).

Investment

Following are the estimated costs for VMs (according to the calculator):

Config.     | Class       | vCPU | RAM    | C. usage | Price/Mo
----------------------------------------------------------------
g1-micro    | Regular     | 0.2  | 600MB  | Not set  | US$3.88
g1-small    | Preemptible | 0.5  | 1.70GB | Not set  | US$5.11
g1-small    | Regular     | 0.5  | 1.70GB | Not set  | US$13.80
n1-standard | Regular     | 1    | 3.75GB | 3 years  | US$15.60
Custom      | Regular     | 1    | 1GB    | 3 years  | US$11.78
Custom      | Regular     | 1    | 2GB    | 3 years  | US$13.17

vCPUs are Intel Xeon @ 2.3 GHz, Haswell microarchitecture.

Additionally, we need the estimated egress traffic (montly consummed bandwith) costs (useful for groups rather than single VMs):

BW    | Zone 1 | Zone 2 | Zone 3 | Zone 4 | Price
-----------------------------------------------------
70GB  | 40GB   | 15GB   | 5GB    | 10GB   | US$9.42
80GB  | 80GB   | 30GB   | 10GB   | 20 GB  | US$19.27
350GB | 200GB  | 75GB   | 25GB   | 50 GB  | US$48.82
700GB | 400GB  | 150GB  | 50GB   | 100 GB | US$98.07

Zone 1: Americas/EMEA
Zone 2: Asia/Pacific
Zone 3: Australia
Zone 4: China

VM specs

Currently, I'm testing a VM with the folowing configuration:

  • 1 vCPU Inten Xeon @ 2.30GHz (Haswell)
  • 1GB RAM
  • OS image: cos-stable-71-11151-71-0
    • Kernel: ChromiumOS-4.14.74
    • Kubernetes: 1.11.5
    • Docker: 18.06.1
    • Family: cos-stable
  • Docker image: quantumobject/docker-tor-exit-relay
  • Startup script: run -d -p 2222:22 -p 80:80 -p 9050:9050 -p 9001:9001 quantumobject/docker-tor-exit-relay
  • VM class: regular
  • Region: us-central1

Tip: Go to VPC network > Firewall and create a rule called "allow-tor", and set:

  • Priority: 500 (anything lower than the default 1000)
  • Targets: Specified target tags
  • Target tags: allow-tor
  • Protocols and ports: Specified protocols and ports: "tcp:22,80,443,9001,9050"

When creating the VM/Template, go to Management, security, disks, networking, sole tenancy, select Networking, and set the tag you set in Firewall settings.

Benchmark

Also, I ran an openssl benchmark (openssl speed aes for 3 seconds each cbc) in both g1-small and Custom 1 GB RAM 1 vCPU instance, and I got the following results:

g1-small:

type         16 bytes    64 bytes    256 bytes   1024 bytes  8192 bytes  16384 bytes
aes-128 cbc  102714.85k  114937.26k  118729.12k  119713.45k  120548.01k  120684.54k
aes-192 cbc  87781.72k   96917.15k   99274.67k   100145.83k  100463.96k  100515.84k
aes-256 cbc  76597.38k   83198.89k   84709.38k   85080.02k   85516.29k   85859.83k

Custom:

aes-128 cbc  100811.34k  114144.42k  116054.50k  117985.42k  119586.42k
aes-192 cbc  85914.78k   95220.79k   98367.39k   98994.68k   99095.15k
aes-256 cbc  76171.38k   82969.05k   84497.50k   85145.08k   84728.69k

Performance is nearly the same, maybe because the shared vCPU receives full power at certain moments when needed, but not always, compared with a dedicated 1 vCPU.

My questions:

  • Which bandwidth amount is recommended for every instance?

  • Is safe to run one or more Tor relay/exit nodes behind one Load balancer in the GCP? Nope.

  • Is safe/useful to run preemptible nodes that shuts down at 24 hours of running or less? (IP address assignment are dynamic and the same IP for a new node is not guarranteed) Safe but useless.

  • Are the g1-micro or g1-small VM specs enough to run a decent performance node? Custom 1GB RAM VM is cheaper and more powerful.

Thanks in advance.


Running multiple preemptible nodes for redundancy is a bad plan. If the preemptible nodes are running in the same region they are quite likely to be shut down simultaneously due to increasing demand in the region.

Preemptible nodes in different regions are less likely to be shut down simultaneously, but the risk still exists and can depend on what other GCE customers are doing, which is entirely outside your control.

Don't use preemptible nodes if you care about availability. They are suitable for batch processing where being preempted isn't much of a problem and you can just do the processing at a later time.


Is safe to run preemptible nodes that shuts down at 24 hours of running or less? (IP address assignment are dynamic and the same IP for a new node is not guarranteed)

Safe? Sure. But you'll never see any traffic to them. There is an excellent writeup on the way Tor vets new relays and exit nodes here: The lifecycle of a new relay

Essentially any new relay is "tested out" for 60+ days before it sees any real traffic. I can vouch that this is accurate as I've been running a Tor relay for about 2 years. You're unlikely to see any real traffic unless your nodes keep the same IDs each time they are restarted, and if your node cannot prove to be reliable it will likely be placed lower down in the food chain.

Additionally if the node goes offline for a long time, you may have to re-sit those waiting periods. My relay was offline for 3 months as I moved countries and I'm yet to see traffic return to what it used to be.

You can see what Tor believes about your relay by looking it up on their metrics page. For example, here is mine.

Are the g1-small VM specs enough to run a high performance node?

Tor's idea of high performance is different to the general internet at large. For example I am running mine on a pretty old Intel NUC with a pretty old Intel Celeron processor and a sad amount of RAM and it caps out at about 70Mbps - because that's all that OpenSSL can push through the CPU. 70Mbps is very large for a Tor relay (maybe not an exit node). I'd imagine even a basic semi-modern small VM would be able to outpace it.