Tailscale in kernel

Hello, sorry if this has been asked (I’ve searched and not found much recent)

Are there plans to run tailscale in kernel? I’m finding more and more use cases which require faster throughput that the. ~50meg I’m currently seeing, and I believe running using the wireguard kernel module would speed things up significantly?

Thanks in advance!

I’d recommend checking if you’re able to make direct connections or if your traffic is going through a DERP relay. The DERPs have traffic limiters to keep one user from unduly impacting the bandwidth available to everyone else.

You can tell this via tailscale status :

$ tailscale status  ubuntu     dgentry@   linux   active; direct, tx 4152 rx 3276    freebsd    dgentry@   freebsd active; relay "fra", tx 1108 rx 188

Or tailscale ping :
pong from server2 ( via in 2ms
pong from server2 ( via DERP(fra) in 88ms

Thanks, I’ve checked all that and the connections are direct.

Neither client is hitting any kind of CPU / RAM limit either so I’m a bit stumped what else it could be my end.

I also tried changing the MTU up to 1492 but that seemed to make it way worse (~2meg!)

MTU 1492 would be useful for PPPoE, where a PPP header takes 8 bytes and reducing the MTU to accommodate it can avoid IP fragmentation. Tailscale doesn’t benefit from the smaller MTU.

With direct connections we pretty routinely see hundreds of Megabits on a LAN, not 50. One notable exception is Raspberry Pi: Raspbian is currently 32 bit, and the Go crypto implementation only has an optimized arm64 implementation. Raspberry Pi throughput can be substantially increased by installing Debian 64 for ARM.


I am running on a Pi, however I’m running Ubuntu x64

Linux ubuntu 5.11.0-1017-raspi #18-Ubuntu SMP PREEMPT Mon Aug 23 07:34:31 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

Would it be worth trying with an MTU of 1500?

Failing that, any other suggestions?

Thanks in advance!

The Ethernet MTU should be set to 1500. Tailscale does not benefit from a 1492 byte MTU.

Installing the tailscale package should have installed the arm64 versions, did it? For example, the 32 bit binary looks like:

pi@rpi4:~ $ file /usr/sbin/tailscaled
/usr/sbin/tailscaled: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, Go BuildID=j-u8mPFyCXMKHZjw9Bxa/tZ_O71o0U_w8ygajuce2/orUs9PpfPr3H8qxef91h/D5qn_yz8qmch4Fnx90Ho, not stripped

Hmm so my wan interface is 1500 but should tailscale0 match?

ubuntu@ubuntu:~$ file /usr/sbin/tailscaled /usr/sbin/tailscaled: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, Go BuildID=Edym6DKYZEZzcT0D-q1s/IyFrSvtOUQPWi4PT5Po0/ofVREzimSW7fKviSsPg-/2hjkBkgg6XpKzLq30INf, not stripped

Looks like I’m using the 64bit packages

Tailscale MTU is 1280 bytes to leave room for the encapsulating IP+UDP headers, plus wireguard headers.