docs: new document selfhost-tailscale.typ
This commit is contained in:
parent
0fe9834574
commit
2cd0c9db0a
130
blog/selfhost-tailscale.typ
Normal file
130
blog/selfhost-tailscale.typ
Normal file
|
@ -0,0 +1,130 @@
|
|||
#set quote(block: true)
|
||||
#show link: underline
|
||||
#set text(
|
||||
font: "ETBembo",
|
||||
size: 10pt)
|
||||
#set page(
|
||||
paper: "a4",
|
||||
margin: (x: 1cm, y: 1cm),
|
||||
)
|
||||
#set par(
|
||||
justify: true,
|
||||
leading: 0.52em,
|
||||
)
|
||||
|
||||
#align(center, text(20pt)[
|
||||
*Take control of tailscale with headscale*
|
||||
])
|
||||
|
||||
= Tailscale
|
||||
#link("https://tailscale.com/")[Tailscale] is a modern tunnel VPN
|
||||
service based on #link("https://www.wireguard.com/")[WireGuard®] which
|
||||
provides a 'free' and secure means of communication between devices
|
||||
within a #link("https://tailscale.com/kb/1136/tailnet")[tailnet] - a
|
||||
private network which Tailscale provides its users.
|
||||
|
||||
Essentially, it provides a private and secure way of accessing any of
|
||||
your devices, no matter where you are in the world - a personal WAN
|
||||
encompassing the entire world.
|
||||
|
||||
And on top of this, Tailscale is completely free and open-source! At
|
||||
least, on the surface…
|
||||
|
||||
== Not FOSS? What do you mean?
|
||||
There’s a quite popular saying within the free and open-source software
|
||||
community, which goes along the lines of:
|
||||
|
||||
#quote(block: true)[
|
||||
If you aren’t paying for the product, then you are the product.
|
||||
]
|
||||
|
||||
Which makes perfect sense. It’s the #emph[modern] era so anything
|
||||
significant is powered by some form of #emph[modern] technology, data is
|
||||
the new oil, and so on. In exchange for offering you 'free' services,
|
||||
companies collect and use your data; while there supposedly are laws in
|
||||
place preventing the inconcensual collection of data in most countries
|
||||
around the world, #emph[your] personal data may #emph[still] be traded
|
||||
unethically and inconsensually.
|
||||
|
||||
I personally am of the opinion that these laws are worth absolutely
|
||||
nothing if people aren’t educated in how their data is being used, and
|
||||
what specifically is being collected. But I digress, and that’s a blog
|
||||
post for another time.
|
||||
|
||||
I also think it’s quite unfortunate that users of paid services
|
||||
#emph[still] have their personal data collected in the unethical manner
|
||||
outlined above, despite the fact that they are #emph[paying] for the
|
||||
service…
|
||||
|
||||
In the context of Tailscale: while their clients are all open-source,
|
||||
their control server - the thing that’s managing and rerouting
|
||||
#emph[everything] going through what they advertise as #emph[your]
|
||||
'secure' VPN, isn’t. You’ve got no idea what this thing is doing with
|
||||
the traffic it recieves.
|
||||
|
||||
= Headscale
|
||||
For every problem, there’s probably a solution somewhere. And luckily
|
||||
for this one \(which may or may not actually be a problem for you),
|
||||
we’ve got #link("https://headscale.net/")[Headscale] as our solution.
|
||||
Headscale’s a self-hostable, open-source alternative to the Tailscale
|
||||
control server, and aims to 'provide self-hosters and hobbyists with an
|
||||
open-source server they can use for their projects and labs'.
|
||||
|
||||
== Installing on NixOS
|
||||
Moving on to installing and setting up Headscale on NixOS.
|
||||
|
||||
```nix
|
||||
# ...
|
||||
{
|
||||
# ...
|
||||
services.headscale = {
|
||||
enable = true;
|
||||
address = "0.0.0.0";
|
||||
port = 7070;
|
||||
settings = {
|
||||
logtail.enabled = false;
|
||||
server_url = "https://headscale.devraza.duckdns.org";
|
||||
dns_config.base_domain = "devraza.duckdns.org";
|
||||
};
|
||||
};
|
||||
# ...
|
||||
}
|
||||
```
|
||||
|
||||
This starts up the `headscale` systemd service on our host machine at
|
||||
port `7070`. After that, we make Headscale available over the clearnet
|
||||
with an NGINX reverse proxy, per the usual:
|
||||
|
||||
```nix
|
||||
{
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts = {
|
||||
"headscale" = {
|
||||
addSSL = true;
|
||||
serverName = "headscale.devraza.duckdns.org";
|
||||
sslCertificate = ./services/nginx/certs/subdomains/fullchain.pem;
|
||||
sslCertificateKey = ./services/nginx/certs/subdomains/privkey.pem;
|
||||
# Headscale proxy
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:${toString config.services.headscale.port}";
|
||||
proxyWebsockets = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
And that’s it. A self-hosted, #emph[truly] open-source Wireguard®-based
|
||||
VPN is now at your fingertips. Enjoy! Oh, but please read the conclusion
|
||||
before doing that:
|
||||
|
||||
= Conclusion
|
||||
For those of you who wish to have access to something like Tailscale but
|
||||
value your privacy above all, you would genuinely be greatful for
|
||||
Headscale. However, I’ve found that some are fine with what Tailscale
|
||||
#emph[does] provide in regards to FOSS, and are satisfied by the raw
|
||||
convenience and simplicity of a non-selfhosted Tailscale control server - exactly what it hopes to provide, as shown by their self-description on their website: 'a zero-config, no-fuss VPN \[provider\]'.
|
||||
|
||||
Or you could just settle with bare Wireguard®.
|
Reference in a new issue