dns node key for fun on one
and two machines that connect, with systemd to keep tailcat serving ssh running
What is a data plane? What is a control plane? I don’t genuinely understand what these words mean :(
Half of the Software offering nowadays seems to be selling vendor lock-in at no added value and then making a profit.
Sure there's always some negligible added value, and then they reinvent a whole stack for their ecosystem. In the case of tailscale the added value seems to be avoiding going into your router and activating port forwarding? It looks like negative added value to me. Someone that tells you "don't do NAT traversal, just open a port" would be highly valuable, but saying no doesn't seem to be trendy, and is certainly not an easy sell.
There's no vendor lock-in here and no payment or account required. If Tailscale as a company fails, tailcat keeps working if you run your own DERP server. It's just open source code, not a hosted service.
Fwiw, I don't think vendor lock-in is a bad thing, but being open source doesn't mean there's no vendor-lock in. If a client builds their system on top of an open source technology, then switching away from that dependency would have a cost, even if that cost is engineering man-hours.
If tailscale does not work out of the box with netcat, and requires a custom additional dependency to work, it raises the question that tailscale will not work out of the box with other tools like tcpdump or stunnel and apache, and I will need to install other custom dependencies like taildump, tailtunned, tailapache.
When compared to other solutions that integrate without additional effort, installing vendor-specific dependency forks/clones means that there is an additional vendor lock-in.
Well, ignoring the tone... kinda yeah? I mean, if port forwarding works for you, and you have public IPv4, and you have no CGNAT, and you need a connection only between 2 hosts, then port forwarding is actually a half-decent idea. However, it's not what Tailscale excels at.
> port forwarding is actually a half-decent idea
You make it sound like both options are equally valid, and as if port-forwarding were some esoteric technology. It's not, one is good, the other is bad.
5 years ago I had a similarly bland position, live and let live, I'd go to a client that was using a Ddns (zapto.org) for production loads serving thousands of customers. 5 Years later, I see them constantly facing SSL issues, and network issues, and even if they weren't it's still the wrong way to do things.
We have to stand for something, get an IP address, get a domain. If you don't have either of those, raise funds, get a budget, speak to people, you can't tech your way out of some things, I know we are hackers, but sometimes the solution is not hacking. Yes we should develop the power to do things even without approval from institutions and without collaboration from the central NIC, or the domain holder, etc... But we should refrain from using that power and actually integrate with domain holders, actually get IPv4/IPv6 blocks.
There's many reasons why you would use a ddns or similar tech, lack of budget, lack of main domain holder approval, lack of NIC approval, lack of ISP approval. In all cases, you are way better off by actually going the other way instead of using a ddns.
1- no budget: Get a budget, a domain is like 15$/yr. a 1024 IPv4 block leased from a NIC is like 600-2500$/year, so the cost of a Host or ISP is 0.6$ to 2.5$, maybe they charge you a margin and you end up paying 5$ to 50$/yr? If this is an issue, maybe your project should die, how much is your time worth? Fund your projects accordingly, or let them die. If this is someone elses project, they cannot afford you.
2- ISP: Call your ISP, if they can't help you access your router, or port forward or whatever, hang up, call again. If your solution is to use a ddns instead of picking up the phone, you have overtrained your hard tech skills and need to work on your soft skills. Speak to a human, you won't get very far if you never speak to humans. This is not a niche thing, we call it port-forwarding but it's how TCP and IP work in general, this is the stuff of the internet, if you can't do something as basic as that, you are never gonna make it, sorry.
3- Domain holder: If you work for a client, and they have a domain, but you don't know who holds it, or where the passwords are. Don't jump to a ddns or buying another domain, integrate, investigate, do an inventory. At the very least buy another domain, a ddns is just cheap to the point of being unprofessional, see 1.
There's a 4th excuse that I'll handle as well:
4- I'm just testing, this is just a throwaway project: Even if it is, you are still underfunding your bets if you don't even have a domain and standalone non-firewalled IP, even if reusing an existing domain and host, we are talking about like 5$ per month. Imagine a professional of any class that cannot afford a tool worth 5$, even a plumber has a toolkit with a screwdriver in it.
Even if you share a link to your project to a friend, if it says hsabhsabdsa.tailscale.net or bjsdbsajdbsa.vercel.app , you are already neutering your project. You can skip this 'phase', it's not necessary for a project to go through all phases, especially if a vendor is trying to convinve you that you should go through this phase, skip it, tell them no, build it right even for your day 1 demo, it's better than having a pre-day 1 demo that has low quality and does things wrong.
The only thing that convinces me that tailscale isn't a CIA op is how badly it works for real uses
This is using the infrastructure tailscale set up for a different purpose. Rather than requiring a tailnet or even an account anywhere, you can tailcat between any two endpoint. Tailscale is there because it runs the DERP relays which get the client's pubkey to the server, brokers the connection, and coordinates holepunching.
He worked at Google for 12+ years. He created memcached, WebSub (PubSubHubbub), OpenID, and Perkeep (Camlistore). He's a late-stage co-founder of Tailscale.
If he's a junior engineer, then I have no idea what a senior engineer is.
(just a cute demo, not intended for release or ongoing maintenance)
And it might be because it is easy to provide and maintain compared to a .deb package.
A lot of them, instead of learning the usual linuxii you'll be using in containers at work dive headfirst into nix.
It appears that Tailscale attempts to persuade peers not to run own "DERP" servers (cf. encouraging peers to run own servers)
"In general, you should not need to or want to run this code. The overwhelming majority of Tailscale users (both individuals and companies) do not."
"Running your own DERP services requires exeprtise [sic] in multi-layer network and application diagnostics. As the DERP runs multiple protocols at multiple layers and is not a regular HTTP(s) server you will need expertise in correlative analysis to diagnose the most tricky problems. There is no "plain text" or "open" mode of operation for DERP."
https://github.com/tailscale/tailscale/tree/main/cmd/derper
Unclear why the company markets peer-to-peer networking but wants traffic going to their own third party servers
In contrast, Nebula, another Go peer-to-peer project encourages peers to run their own rendezvous server ("lighthouse")
https://github.com/slackhq/nebula
"To set up a Nebula network, you'll need:
2. (Optional, but you really should..) At least one discovery node with a routable IP address, which we call a lighthouse."
The comparison to nc seems off. Original netcat has no required third party dependencies, no recommended third party dependencies, and not enough complexity to be linked to a company selling associated SaaS or consulting
At Tailscale, we do not _want_ traffic through our servers. What we do want is for Tailscale to Just Work without your needing to set up any infrastructure. That’s why we run the DERP relay network as a fallback of last resort, for when a direct connection is not possible. And the tailscaled client tries very hard to make that direct connection.
If and only if you need to run your own infrastructure, then we provide peer relays which are significantly less onerous than running a DERP server: https://tailscale.com/docs/features/peer-relay
This note exists in the README because people would assume that hosting a DERP server was a hard requirement for using Tailscale. Or they would assume that an production Tailscale network would eventually operate a DERP server. People who run their own DERP servers usually have data sovereignty or strict metadata requirements.
I literally just figured out how tsnet fits into the picture (an in-process Go based entire network stack that gets the process to act as a node in the tailnet) and so that helps me understand this (everything in tsnet excepting the control plane). It's very impressive that they can do this in a reliable way.
The examples show the concrete use cases... Basically giving you the wiregaurd + DERP quality tunnel but as a one shot point to point cli tool. Which is a nice upgrade from the alternative "in a pinch" tools.
RE "how much tailscale" I guess it's the DERP bit + this minimal point to point control plane. Without which it's significantly more configuration to get the wiregaurd tunnel working, or impossible because of NAT, unless both machines are on the same ipv6 network.
TS basically sell the full control plane with Auth and ACL style management etc as their product so this doesn't really compete.
The slightly tricky part would be managing a local NAT that blends the two networks, and also does MagicDNS to answer on those NATed IPs. If routes conflicted, I guess you'd have to pick one?
Seems very doable though.
I see a bunch here on awesome-iroh page
May be my idea of simpler cryptography is incorrect, but PAKEs like CPace do seem simpler than public key primitives in Noise.
Just a combo of never getting around to it and friends talking me out of it b/c of existing alternatives such as wormhole[2].
if that is goal then why not go 100% open source to eliminate the ts derp control as well and get full sovereignty?
like netbird, openziti, zerotier, etc.
The DERP server is already open source and tailcat can use any DERP server you run: https://github.com/tailscale/tailscale/tree/main/cmd/derper#...
We just provide some default ones (https://tailcat.dev/derpmap.json) to get started if you're not bandwidth-sensitive. But you don't have to use them.
Update: I added more explicit docs about this to https://github.com/tailscale/tailcat#bring-your-own-derp-rel...
Recently: https://github.com/golang/go/commit/128a36cf0367c46daff2528d...
https://github.com/golang/go/commit/3c0665e551be23e62167f625...
But these are a separate fleet (https://tailcat.dev/derpmap.json) separate from our usual ones, and not using "tailscale.com" in DNS or SNI anywhere.
edit:
Which are probably tailscale's, as it's under tailscale/ github org?
I'm hoping that my Mullvad subscription (through Tailscale) contributes a little bit at least. Two excellent companies.
I like that there is Headscale as an open-source offering too. I don't use it, but the fact that it exists makes me a lot more comfortable (similar to Bitwarden etc).
I bet I could simplify out the WebSocket-to-UDP proxy by leaning into tailcat's dataplane and just speak straight UDP.
I've been making a mesh vpn like radmin vpn or hamachi that does not need a central authority server and most importantly, can run on all major OS thanks to wireguard-go.
Everything should be possible with just plain netcat and IP stack. Someone asks about NAT holepunching, encryption, static IDs, permissions, etc., yes this is what Internet lacks and why every P2P app reinvents it over and over again.
WireGuard doesn't do NAT traversal. That's the main thing this adds. And this also adds a CLI tool + library to do streams over WireGuard w/o installing kernel routings, requiring root, etc.
NAT traversal is a different topic, WG won't help in that, and that can actually be a pain. I guess we should be using IPv6 already, and this tool would be largely redundant already. (not completely, encrypted access to isolated networks is a valid use case)
Public/private key pairs are hard? It's no more terrible than other projects that require configs.
Idk? I found it pretty easy to configure by blindly following the tutorials and copy-pasting keys. The only footgun is the keepalive setting, which will screw up the tunnel if one end is behind NAT, that tripped me hard, but besides this, no issues at all.
the control plane is closed source, but headscale is an open source alternative that we embrace and encourage people to use if it meets their needs/desires
At some point it was a weaker clone, but it developed into a very high quality clone, and has graduated into being a co-production with the Java version.
Get a refund from wherever you got your facts.
I'll give you half a point for "iPad kids" since that term implies a lot of incorrect things but it does run on iPads.
* They could make bedrock moddable using .net, and make it so basically every kid interested in programming learned .net
* They could then drop the Java version and get more control over the game with it being harder to mod in un-sanctioned ways while still enabling the content most people want from mods
* And gain a powerful platform they can use to treat Windows/Xbox players better.
* With everyone writing .net it makes more sense to use Windows to develop, effectively reducing the number of fresh developers with posix experience. Stopping the mass exodus to posix since the 2010s MacBook air sublime text nodejs days.
But alas. Microsoft are incompetent. Minecraft was THE tool to turn the future in their favour and they completely overlooked it.
Bedrock exists to make more money. They don't like the Java free modding. They want a marketplace. They want to make money off all content in the game. They want to sell DLC. Make no mistake, they aren't platforming modders to make money because they are charitable. It is because they want to profit, and they can profit at scale by outsourcing the work.
That is in my opinion why most people are against bedrock, including myself. Bedrock is capitalist Minecraft. Enshittified Minecraft, with much more enshittification potential not yet realized. Java version is the only thing protecting bedrock from not being milked further, because it is competition.
They know most people prefer Java. Content creators mostly use Java. But it sells bedrock, and bedrock makes money. And if they can get enough people over, they can kill Java and finally milk bedrock
By "infinite branches" you probably mean that a nix derivation / flake is a recipe that can build any version of the project?
nix run github:tailscale/tailcat
Gets you the default branch. Tailcat doesn't yet have any tags, but if you want a build of the main tailscale repo at a particular tag, it's just: nix build github:tailscale/tailscale/v1.102.3
But because this can be any ref, you can specify an arbitrary branch or tag, so like if you're trying to get a colleague to check out your work it's as easy as: nix run github:tailscale/tailcat/my-fancy-branch
And obviously a flake can reference other flakes with the same flexibility, so your home manager config or your company's private app flakes can transparently pull the not-yet-merged version of a change you're proposing upstream without having to make special internal "patched" releases with tortured 1.2.3~actually.1.4.6 type version numbers like in Debian. And of course that same flake reference policy applies all the way down, so you also don't need to worry about the private apt repo as a big piece of shared state that's going rev forward and break your older code branches or Dockerfiles, since each branch of your app flake has its own flake.nix and accompanying lockfile controlling which deps it is pinned to.It really is an awfully nice system, and shockingly modern in its sensibilities considering how old the Nix fundamentals are.
I wanted it to work on macOS so couldn't rely on network namespaces.
It's really pretty cool.
But Tailscale keeps sucking me in with new stuff to do. :(
There are mods to disable unwanted Microsoft-pushed features like chat signing, for example. Microsoft doesn't want this, but it is so trivial to do with the Java edition they don't really have a choice but to either accept it or legal it.
I am also surprised they didn't drop mac/linux support, but as long as maintaining it is free I don't think they will. They have lost a lot of market share to mac after all - that's a lot of customers to miss out on.
So I'm getting the feeling they actually want JE to be moddable. Which makes sense because they're already successfully pushing Bedrock on a majority who don't care about modding, especially on locked down platforms, and the remaining JE players are a different segment. But that could change just as easily as their leadership changes.
But also just realized, if this changed, rather than locking down JE, they'd probably just kill it and maaybe release Bedrock for Mac/Linux to keep those players. Possibly not.
And hole punching gets a lot simpler when you’re behind NAT since you don’t need any kind of rendezvous server to determine port mappings.
In other words, IPv6 does help substantially—the same hole punching techniques are not needed.