NetMaker: Connect Everything with a WireGuard VPN
netmaker.io
netmaker.io
Wherein the author compares Yggdrasil, tinc, Tailscale, Zerotier, Netmaker, Nebula, and ends up prefering Yggdrasil. Actually, it was this comparison that made me look into Netmaker and prefer it and I've been running it without issue for experimentation. I hope the author revisits NM.
I agree that the project is moving quickly, which results in having to stay on top of changes to your configuration with releases, but they're still on 0.xx releases so it's to be expected.
Since Netmaker is just vanilla wireguard with some route coordination and STUN/TURN, it's reasonable for me to wrap my head around system. Docs are written for self-hosters. These are all good signs.
After reading the readme on the Github, it's still not clear to me whether it proxies everything through its own servers or not
Except at the time of writing, netmaker isn't FOSS: https://github.com/gravitl/netmaker/blob/16d5b5807/LICENSE.t...
“Thanks for all the work, we’ll take that and put it behind a paywall and monetize it for you and not give you anything.”
People other than the author have a huge advantage when it comes to monetizing: they can focus only on that. The authors have to focus on creating while others can focus only on marketing.
I sympathize to some degree, but true OSS is an important distinction for many and should be highlighted.
I'm not sure if there are more such cases, but clearly with this one, AGPL was not enough.
I guess the issue is: if you have freeloaders, who are making all the money you would need to keep the OSS project alive, AGPL doesn't help you in any way. They are free to get the code as-is, run it, and serve their customers. Not sure why everybody suggests AGPL+Commercial as the perfect solution, it doesn't seem to solve anything for that case.
This!, in my experience lawyers will deny the use of AGPL software, even when there is no risk (from my point of view). Many companies have already a list of blessed licenses, and AGPL is not part of the ones I'm aware of.
For now, Nebula is still my choice in this space.
Though, I have to say that if you are using Nebula within a LAN it sometimes takes minutes for two nodes to realize they are within each other's reach. In the mean time, they talk through the lighthouse which can severely affect performance.
https://blog.opensource.org/the-sspl-is-not-an-open-source-l...
> 10. License Must Be Technology-Neutral
> No provision of the license may be predicated on any individual technology or style of interface.
Under AGPLv3 if I have AGPLv3 code on a computer and users can interact with it the requirements depend on the technology used by the users to interact with the program.
It had a provision that only applies to users who are "interacting with the remotely through a computer network".
So...if my users are at the same location as the server and interacting through a command line interface on serial terminals those provisions do not apply.
I want to add a few more terminals in a nearby room but don't want to actually run serial lines from all of them to the server. Instead I run ethernet to the room the new terminals will be in, and at each terminal place an RPi with the terminal connected to the RPi and the RPi connected to ethernet. The RPi runs software that connects to the server via ssh and then exposes that ssh session on the terminal so they can use the command line interface to that AGPL program.
Now the users are interacting with the server via a computer network and so those provisions of AGPL might now apply, depending on whether or not this counts as interacting "remotely".
Same thing but now I provide an app that users can run on their phones that that makes a hard coded connection to my server and runs a terminal emulator over that to a terminal session on the server, where the users can use the AGPL program. There doesn't seem any question that this is now definitely remote, and it is over a computer network, so those AGPL provisions now definitely apply.
And so we have essentially one thing, users using a terminal interface to interact with an AGPL command line program on my server, where what license provisions apply between me and any given user depends on just what technology is used to carry their typed text between their keyboard and my server, and to carry the program output text between my server and their display.
The AGPLv3 is not predicated on a particular technology or interface so it doesn't run afoul of this. You can use it in networked software, or un-networked software. If a license said something like "you cannot use this for software that users interact with over a network" then it would violate this principle.
However, several months ago we moved all of the client-side code to Apache-2.0, and are about to make the server-side code FOSS-compatible.
Glad you're going Apache, though.
Their comparison graph at the bottom seems to indicate that the differentiating features between their product and Tailscale is that you can't self-host (ignoring the existence of headscale) and that WireGuard support is limited. I believe the latter point refers to the default Tailscale configuration that connects every node with every other node, whereas NetMaker allows different network configurations.
However, Tailscale ACLs should allow you to reconfigure the network into shape you want, so I'm not sure if that criticism still applies. Their claim that "data will pass through their relay (DERP) servers fairly regularly" also seems suspect, as that's only the case for networks where UDP traffic doesn't flow between clients despite STUN/TURN, which is very rare in practice.
The only advantage I can find is that NetMaker has a richer free plan and that they use the WireGuard kernel module where possible. I'm not sure why they didn't lead with that.
It has no equivalent to tailnet lock, though, as far as I can tell.
Cool concept, but limited performance and limited uptake. Their approach to mesh was neat at the time.
I've been running a tinc mesh network for eons w/ my systems and it's never given me any trouble. I use git to check in the 'hosts/' folder and add/remove hosts as needed, pull down to all the nodes, and they can all connect.
I do wish the encryption + transport could be as performant as wireguard, but for my needs, I haven't been pushing it hard enough that it's a concern for me.
I went with Dormant as 1.1 has been in development for years and no official stable release. Changes to 1.1 are the odd PR here and there, nothing really from the main author anymore.
Yeah things like improving the encryption I would expect even with a stable but active product like this. Especially given ChaCha20’s widespread adoption and optimisation these days. Likewise I would have liked to have seen decent tinc phone clients (ios, Android). But this is a failing of a lot of VPN clients.
Just look at the release interval on their news page.
Honestly I think the likes of WireGuard, Tailscale, etc took the steam out of the developer. It’s a shame because I do prefer to have a diverse range of VPNs rather than just OpenVPN, IPsec, WireGuard.
I'm not sure how to revitalize development if there is not a large interest from developers, and I don't want to turn this into something commercial like OpenVPN did.
Thanks for creating tinc, truly an awesome approach to meshed VPNs!
It also does not really have a decent mobile client.
But I have to admit, I have private fork of tinc-vpn specifically for Win32. AFAIR I did only minor changes to TAP driver initialization and how scripts are executed. They have they own thread now and additionaly there is script called tinc-pre to handle IP initialization before TAP interface is up. Becuase meh, Windows Network Interfaces work strange :)
Note: I use tinc-vpn only in switch (L2) mode. For routing good old quagga (forked) does it job.
https://medium.com/netmaker/battle-of-the-vpns-which-one-is-...
https://techoverflow.net/2022/08/19/iperf-benchmark-of-zerot...
I remember reading a blog post on tailscacles' website about it and how they are pushing their changes upstream (wg kernel and official wg go user space implementation).
Can't find the post now though.
The numbers Netmaker posted likely come from: https://medium.com/netmaker/battle-of-the-vpns-which-one-is-...
Note that a spreadsheet with raw data and command used (which is all `iperf3 -c <IP>`) is here: https://docs.google.com/spreadsheets/d/1Qy27zEERSqisdV1u-YUc...
While it's a good idea to be skeptical of a company tooting it's own horn, there does (or has) seemed to be a consistent performance advantage that is beneficial to those who aren't paid for or like being a network admin beyond setting a proper MTU: https://techoverflow.net/2022/08/19/iperf-benchmark-of-zerot...
However in light of https://tailscale.com/blog/more-throughput/ (thanks to FabHK for bringing this to my attention) testing should probably be redone.
2. the comparison:
- protocol: wireguard is now baseline
- speed: netmaker is faster because it uses kernel wg - this is not going to hold true for all system configurations, certainly doesn't for macos
- flexibility: feels like it does the same as tailscale, marketed slightly different as they list common use-cases – egress and ingress gateways; network shaping with acls is also possible in ts; maybe someone will write-up an unbiased comparison on self hosting
- price: ts offer seems to be good enough for most users and their limits are "soft" anyway – i pay $45 a year because i want sustainable, not free
looking for reasons to change and don't find any
the exit-node routing is for firewall circumvention - if i find myself unable to connect to git over ssh, i simply activate routing through the exit-node and continue working
the exit-node sits at home where i set the rules
Unless something changed super recently, tailscale (per their own claims) are faster than (linux) kernel wg: https://tailscale.com/blog/throughput-improvements/
Surprisingly, we improved the performance of wireguard-go (running in userspace) enough to make it faster than WireGuard (running in the kernel) in the best conditions. But, this point of comparison likely won’t be long-lived: we expect the kernel can do similar things.You will soon find you have a combinatorial problem. If you have 10 nodes and want to add an 11th node, you will have to update the 10 already existing nodes.
These projects are automating the configuration of the nodes. You simply configure a new node and the other nodes are informed of the presence of the new guy.
How can you trust another company for such an important security service like VPN? What if one of their employees sells you out to the best offer?
In the build vs buy equation, often people forget that if you don’t own the keys of your door, you risk someone locks you out.
It’s pretty easy, you just look at Gartner’s Magic Quadrant and pick one in the upper right hand corner. Any VPN solution can have vulnerabilities and any (same) company would keep it up to date. A lot of hardware firewalls have ASICS to accelerate VPN traffic and this may be a requirement to handle the amount of traffic a company might have.
A single wg interface/config on your phone, with two peers, one for home wg and one for remote vpn, with AllowedIPs on the home peer as 10.10.0.0/24 and AllowedIPs on the remote vpn peer as 0.0.0.0/24?
Have you tried excluding the cidr of your home wg from the AllowedIPs of the remote vpn? Like not having 0.0.0.0/24, but one or more entries that end up excluding local cidrs.
I have two wg interfaces and I manually switch between them.
The first peer is easy, with allowed IPs of 10.10.0.0/8. The 2nd peer will need more configs, as it should route everything else.
See this answer for an example where all ranges that are not RFC1918 are listed: https://serverfault.com/a/304791 I expect, that you need to enter those ranges as AllowedIPs for the peer that should route to the public internet.
You then route your home traffic through the home wg connection and all other traffic will exit the external server directly.
The only thing we havne't gotten to work is full 0.0.0.0 forwarding. Docs say it's possible (tho not fully common use case), but we always get hangs when attempting. Usually we have to use sshuttle
Other than that - incredible.
did you compare it to others, what made you go with netmaker?
> are you accessing using "external clients" or the regular netclient?
"External Clients" on OSX Wireguard.
[More Info]
The use case that we have is when we need access an Akami Network through a whitelisted IP during development.
Our AWS networks have a Priv Subnet w/ a static IP NAT and a Public Subnet, both prod and staging.
Since wanted our all our local machine's traffic to go through the AWS NAT we hoped for: Local -> Bastion EC2 (Public Subnet) -> EC2 (Private Subnet) -> NAT -> Internet.
So to get setup, we tested: Local -> Bastion EC2 (Public Subnet) -> Internet. When we set the Bastion EC2 to have Egress of 0.0.0.0 the Wireguard's Handshake would never complete, just hang.
Let me know if there's anything else I can provide.
> Do you expose Netmaker bastion to the public Internet for all your VPC
Yes
> , where the bastion lives outside the VPC?
No, but I imagine you're talking about Subnets? which in that case Yes.
We run multiple Subnets. Only bastion machines live in public subnets while pretty much everything else is in private ones that routes via NATs.
You may find it easier to work with zerotier or tailscale, but NetMaker is something to keep an eye on. I met the founder at KubeCon last year and he's a really approachable and nice guy. You can always reach out to him directly if you have specific questions or concerns.
any idea how one would go about connecting two networks? a tailnet and a netmaker-net?
i only tried one, after seeing it mention on hn and elsewhere multiple times by people i trust, but i'm curious about what hn users experience with other services
I have never seen a confusing space as the VPN world. While I can connect e.g. to a SoftEther VPN Server on the windows box just fine, the installation breaks the established VPN connection to the external L2TP VPN.
Installed Wireguard and have absolutely no idea on how to configure that thing without investing hours...
tcpdump or a similar tool may be helpful in this case to see where / how traffic is handled.
NetMaker, at least based on the quick install manual, asks you to open up the following:
- 443, 80 (tcp)
- 3479, 8089 (TURN, TURN api)
- 8085 (exporter EE)
- 1883, 8883, 8033, 18083 (if using EMQX)
But perhaps none of these are required for actual WAN/Wireguard connections and one needs only limited access to these ports in order to configure the software.
tailscale does this with their DERP servers
i doubt netmaker doesn't have an alternative to connect machines behind nat routers; that would be a serious disadvantage for soho setups
So really, you could get it down to just 443. However, this should be better documented.
Also worth noting these are all server-side requirements. The actual WireGuard clients do not need these ports open.
The only resource I find is this: https://docs.netmaker.io/architecture.html#compatible-system...
No mobile, no NAS yet?
So no mobile for now.
Convenience features etc
You do not see the problem because you probably manage less than 5 nodes.
Many people have complained, and there is zero response to it.
Tailscale does it a LOT better.
I'm not sure why I would need this
as opposed to the dead simply good old tiny WireGuard client
which just works perfectly.
i use it to connect a notebook to a machine that sits behind nat, and to circumvent firewall rules
before i had to maintain an open port on the router, and a dyndns like process to connect to the machine behind nat, now not only is that machine no longer exposed on the internet i also don't have to keep the separate configs for the same machine (local and remote)
in regards to circumventing firewall rules it's just git with keys vs git over http, i just proxy jump through the home machine and call it a day
Some marketing text and I don't understand why this is better than just vanilla wireguard?
Second, did you find https://docs.netmaker.io/about.html ? It might help.
(Not associated with Netmaker at all, that’s just my interpretation from using their offering for awhile)
Disclaimer, I work for NetFoundry, the company behind open source OpenZiti.
i already have tailscale setup on all devices
ZeroTier operates on a different layer, and is therefore capable of much more than anything wireguard.
i don't really see any material difference between netmaker and tailscale
It can do fancy things but it's definitely geared towards more of a power user base.
I think it's main appeal over all of the other solutions (i hope this is still the case) is that it uses kernel level wireguard instead of userland wireguard so for performance it is unrivalled. It's what I would pick if I was setting up a mesh for servers that constantly talked to each other and exchanged a lot of data