Route 10, Client Wireguard speeds?

It’s been awhile since I’ve been in the Alta ecosystem, I was one of the early adopters of the AP6 and wanted to get back into the Alta ecosystem. Anyway, I just ordered the Alta route 10 and I’m curious what speeds anyone using the Wireguard VPN client out to a service like Surfshark or Mulvad are seeing?

1 Like

I haven’t tried it out much but running speedtest and bufferbloat right now using SurfShark is that speed is not affected much at all given my nominal speed 630/630, or with CAKE tuning which limits output to 570/570. Latencies are affected but still fairly low. Nominal ~15/+8/+10, with CAKE ~15/+2/+6, CAKE+SurfShark ~16/+7/+15.

I don’t know if these numbers are sensible but I guess it is reasonable to suspect that CAKE can’t handle tunneled data fully.

Any other similar or contradictory experiences?!

1 Like

This is perfect, thanks! I’m currently using the GL.Inet Flint 3 I got from them as part of a beta test. I’m getting around ~400-500mbps with that on a 1gig plan. I was looking for something with a little bit better performance and the Route 10 looks to be it. I use a VPN client on my network because of work and also privacy/ad blocking.

1 more question, does it allow you do disable or exclude 1 device from the VPN client? Like a chromecast?

I have to admit I am not entirely sure that the SurfShark tunnel is properly up and running. So I can’t vouch for the numbers yet. There might be something wrong with the either the export from SurfShark and/or import to Route10, because I can’t see any public IP change (as I would expect from the masquerade option?!) or any additional hops from a trace route to for example Google/8.8.8.8). I’ll try to verify it is up and running or, if not, try to make it so and get back.

Edit: Now I recall that I actually didn’t get the UI way of configuring the SurfShark tunnel working. However, I somehow managed it via CLI, but I have to dig up the scripts for that. See previous threads:

2 Likes

image

This is my speed for mullvad. I pay for 500down 20 up through spectrum so not too bad for routing to sweden from the US.

2 Likes

Getting back to this one. I believe I have finally managed to perform a scripted setup of a Surfshark-client. At the Route10 level I get a 4-5 % performance loss through the closest VPN server.

Here’s the result from an automated speedtest comparison for test through WAN interface and surfshark interface, respectively.

================ Surfshark VPN Test ================
🔲 Checking public IPs...
✅   Public IP through Surfshark: 185.76.9.56
✅   Surfshark IP is different from WAN IP (hidden)
🔲 Running baseline speedtest (direct WAN)...
✅   Baseline download: 571.24 Mbps, upload: 578.26 Mbps, ping: 5.571 ms
🔲 Running Surfshark VPN speedtest through wgSurfshark...
✅   Surfshark download: 546.54 Mbps, upload: 548.48 Mbps, ping: 6.274 ms
================== Summary ==================
Direct WAN : ↓ 571.24 Mbps | ↑ 578.26 Mbps | ping 5.571 ms
Surfshark  : ↓ 546.54 Mbps | ↑ 548.48 Mbps | ping 6.274 ms
Download loss through Surfshark: 4.3%
Upload loss through Surfshark:   5.1%
Latency difference: +0.7 ms
=============================================
# ✅  = passed, ⚠️ = needs attention, ❌  = failed

The nominal speed is 630 up/down, then reduced to appr. 570-580 by enabling CAKE with tuning optimized for my setup. Then another drop to around 540-550 through the Surfshark VPN-tunnel. Very good indeed.

Edit: Following up with some data from a WiFi client (Android device), where I got 500-550 down and 450-550 up. Bufferbloat grade A for Surfshark vs. A+ for nominal with CAKE.

1 Like

Could you share your script?

1 Like

A few iterations with the help of AI. Shout out if you spot any issues with it.

Interface name is hardcoded. Speedtest must be installed.

#!/bin/sh
#
# /cfg/scripts/test-surfshark.sh
# ------------------------------------------------
# Compare Surfshark vs direct WAN speeds (no bc)
# Shows % difference for download, upload, latency
# Also checks that Surfshark IP != WAN IP (hidden)
#
IFACE="wgSurfshark"   # Surfshark WireGuard interface
checkbox () {   # usage: checkbox "label" "OK|WARN|FAIL"
  case "$2" in
    OK)   echo "✅   $1";;
    WARN) echo "⚠️  $1";;
    FAIL) echo "❌   $1";;
    *)    echo "🔲 $1";;
  esac
}
to_mbps () { # bytes/sec -> Mbps
  val="${1:-0}"
  awk "BEGIN {printf \"%.2f\", $val/125000}"
}
extract_download () {  # JSON -> download.bandwidth (bytes/sec)
  sed -n 's/.*"download":{[^}]*"bandwidth":\([0-9]\+\).*/\1/p'
}
extract_upload () {    # JSON -> upload.bandwidth (bytes/sec)
  sed -n 's/.*"upload":{[^}]*"bandwidth":\([0-9]\+\).*/\1/p'
}
extract_latency () {   # JSON -> ping.latency (ms)
  sed -n 's/.*"latency":\([0-9.]\+\).*/\1/p'
}
percent_diff () {  # base, vpn -> prints % loss (positive) or % gain (negative)
  base="$1"
  vpn="$2"
  awk "BEGIN {
    if ($base > 0) printf \"%.1f\", 100 - ($vpn/$base*100)
    else print \"0.0\"
  }"
}
echo "================ Surfshark VPN Test ================"
echo
# 1) Check WAN IP vs Surfshark IP
echo "🔲 Checking public IPs..."
WANIP=$(curl -s https://ifconfig.io)
VPNIP=$(curl -s --interface "$IFACE" https://ifconfig.io)
if [ -n "$VPNIP" ]; then
  checkbox "Public IP through Surfshark: $VPNIP" OK
else
  checkbox "Could not get public IP through $IFACE" FAIL
fi
if [ -n "$WANIP" ] && [ -n "$VPNIP" ]; then
  if [ "$WANIP" != "$VPNIP" ]; then
    checkbox "Surfshark IP is different from WAN IP (hidden)" OK
  else
    checkbox "Surfshark IP appears SAME as WAN IP (VPN not working?)" WARN
  fi
fi
echo
# 2) Baseline (direct WAN) speedtest
echo "🔲 Running baseline speedtest (direct WAN)..."
BASE_JSON=$(speedtest --format=json 2>/dev/null)
BASE_DOWN_BPS=$(echo "$BASE_JSON" | extract_download)
BASE_UP_BPS=$(echo "$BASE_JSON" | extract_upload)
BASE_PING=$(echo "$BASE_JSON" | extract_latency)
BASE_DOWN_MBPS=$(to_mbps "$BASE_DOWN_BPS")
BASE_UP_MBPS=$(to_mbps "$BASE_UP_BPS")
checkbox "Baseline download: $BASE_DOWN_MBPS Mbps, upload: $BASE_UP_MBPS
Mbps, ping: ${BASE_PING:-?} ms" OK
echo
# 3) Surfshark (VPN) speedtest
echo "🔲 Running Surfshark VPN speedtest through $IFACE..."
VPN_JSON=$(speedtest -I "$IFACE" --format=json 2>/dev/null)
VPN_DOWN_BPS=$(echo "$VPN_JSON" | extract_download)
VPN_UP_BPS=$(echo "$VPN_JSON" | extract_upload)
VPN_PING=$(echo "$VPN_JSON" | extract_latency)
VPN_DOWN_MBPS=$(to_mbps "$VPN_DOWN_BPS")
VPN_UP_MBPS=$(to_mbps "$VPN_UP_BPS")
checkbox "Surfshark download: $VPN_DOWN_MBPS Mbps, upload: $VPN_UP_MBPS Mbps, ping: ${VPN_PING:-?} ms" OK
echo
# 4) Performance summary
echo "================== Summary =================="
echo "Direct WAN : ↓ $BASE_DOWN_MBPS Mbps | ↑ $BASE_UP_MBPS Mbps | ping ${BASE_PING:-?} ms"
echo "Surfshark  : ↓ $VPN_DOWN_MBPS Mbps | ↑ $VPN_UP_MBPS Mbps | ping ${VPN_PING:-?} ms"
if [ "$BASE_DOWN_BPS" -gt 0 ] && [ "$VPN_DOWN_BPS" -gt 0 ]; then
  LOSS_DOWN=$(percent_diff "$BASE_DOWN_BPS" "$VPN_DOWN_BPS")
  LOSS_UP=$(percent_diff "$BASE_UP_BPS" "$VPN_UP_BPS")
  LAT_DIFF=$(awk "BEGIN {printf \"%.1f\", (${VPN_PING:-0}-${BASE_PING:-0})}")
  echo
  echo "Download loss through Surfshark: ${LOSS_DOWN}%"
  echo "Upload loss through Surfshark:   ${LOSS_UP}%"
  echo "Latency difference: +${LAT_DIFF} ms"
fi
echo "============================================="
echo "# ✅  = passed, ⚠️ = needs attention, ❌  = failed"

This thread has been automatically closed due to inactivity. If you believe you have the same issue, please create a new post describing your issue. Feel free to link to this post for context if desired.