MacOS command line version of the WireGuard VPN is now available for testing
latacora.singles
latacora.singles
Those seem quite the overstatements. I don't remember having any particular distrust in OpenVPN's codebase or protocol. I also didn't have that much trouble configuring neither the server nor the clients. I particularly liked how OpenVPN's configuration is basically putting command line arguments in a file. I could test configurations by simply changing invocations of openvpn, and when I found something I liked, I just put the options in a file and enabled the service to use that configuration file. Compared to the configuration of other kinds of services, OpenVPN is pretty simple.
EDIT: This is my first time hearing of WireGuard. I can't say how it compares, but the way this reads like a sales pitch and is so dismissive of SSH and OpenVPN, both of which I've had nothing but good experiences from, doesn't leave a good impression on me. I mean:
> Death to SSH over the public Internet. Death to OpenVPN. Death to IPSEC. Long live WireGuard!
Really?
This page would've been more effective on me if it objectively described how WireGuard was better than these technologies.
IPsec’s design era, implementation size... really nothing about the thing is even vaguely comparable.
Also: wireguard is free and open source software. So what precisely are we (people advocating for it) selling? We paid a hell of a lot more than the cost of an OpenVPN AS license so that everyone could get a macOS client, for free. I don’t make a dime off of you using wireguard.
So far 100% of the deployed OpenVPN I’ve seen has had bad crypto. Wireguard just categorically doesn’t have that problem.
And when they have to use VPN, too many teams use OpenVPN because it's seemingly the easiest to use. Also there are scripts like the amazing Algo that make it easier to run your own VPN server.
But this has historically been a totally unsolved problem from the perspective of usability.
I look at it as the difference between PGP and keybase. PGP was always too complex to use, and that's a bad security design. Keybase is a lot easier to use (and Signal even easier).
Wireguard is like that. Although I haven't used it yet, the configurations seem like "really? that's it? there's got to be more to it"
Respectfully: I suggest you check out the research and design that went into wireguard first, because he trustworthiness of the two protocols is not the same just because you’re unfamiliar with it.
On contrary, WireGuard started with strongest crypto it could making it default. There's also the protocol and implementation correctness to consider. WireGuard was formally-verified in Tamarin, kept small on purpose to reduce errors, carefully coded by project author focusing on security more than feature bloat, and reviewed with positive results by other security-focused coders.
It's better assurance than OpenVPN across the board. Even if I didn't have those details, the fact that WireGuard is usable out of the box in Linux while OpenVPN needs to be hardened and extra-carefully configured first would already tell me what I need to know. Use WireGuard, not OpenVPN, if you're able to.
> It intentionally lacks cipher and protocol agility. If holes are found in the underlying primitives, all endpoints will be required to update.
(https://www.wireguard.com/papers/wireguard.pdf)
Just skimming their whitepaper it seems this is done to cram everything into Layer 3 which has administrative and performance benefits. But comes with a significant tradeoff to flexibility.
They follow up that statement with something that slightly confuses me:
> As shown by the continuing torrent of SSL/TLS vulnerabilities, cipher agility increases complexity monumentally.
But the general sense I am getting is WireGuard is strongly opinionated and limited...and one way of spinning that is less vulnerable to user error. Personally, I have trouble equating that to meaning WireGuard is more secure. For similar reasons I have trouble equating OpenVPN configuration to "requiring hardening".
That said WireGuard's approach and lower layer, like IPsec, has some serious performance advantages over OpenVPN. Their whitepaper also seems to indicate that it performs better the IPsec, but I would have to see more benchmarks from other sources before making a definitive conclusion on that.
Judging from this article and the comments in this overall thread though, it appears that WireGuard has some zealous (perhaps a bit over-zealous) evangelists though.
That doesn't mean that we should assume modern primitives and constructions are unbreakable (though the trend has been for protocol designers to seriously overestimate the likelihood of _any_ primitive being broken).
What it means is that instead of designing and implementing elaborate handshake mechanisms, which inevitably succumb to downgrade attack bugs or, often, worse things, we should version entire protocols.
So obviously, if the ChaPoly stack is broken at some point, people will need to update WireGuard (just like they update OpenVPN when TLS bugs are discovered). But they protocol doesn't need to account for anything more than the fact that it might someday be replaced with a different protocol using different primitives.
The "agility" protocol designers are looking for has probably, historically, been implemented at the wrong layer. As usual, the closer something is to policy or prognostication, the further up the stack it should go. TLS bakes this stuff into the transport layer, which has hamstrung us and, ironically, not actually done much to protect us against vulnerabilities. WireGuard makes a different, better decision.
There's no tradeoff here; this decision is by itself a reason to adopt WireGuard.
And yet in 2018 we have proposals like this: https://tools.ietf.org/html/draft-ietf-ntp-using-nts-for-ntp...
To me it looks enormously over engineered with options, versions and flexibility everywhere.
We use Wireguard as an all-purpose tunnel to encrypt bulk traffic in two places in the system. OpenVPN's performance is unacceptable, and IPSec is impossible to work with. Wireguard is very fast, elegant, easy to understand, and well encapsulated. The zealotry is warranted and it's uses go far beyond your basic desktop VPN use case.
EDIT: just to clarify, the exit nodes are in data centers near to networks, they are distinct from "gateways" which are the nodes selling internet bandwidth into the mesh network.
"But the general sense I am getting is WireGuard is strongly opinionated and limited...and one way of spinning that is less vulnerable to user error. Personally, I have trouble equating that to meaning WireGuard is more secure."
The principles behind which systems are going to be more secure have been consistent from people like Paul Karger doing 1970's designs/pentests to folks like Bernstein later on. The number of vulnerabilities go up with complexity: handling state, potential interactions that are visible, covert/side channels that might not be, and too many options for users increasing odds of bad configs. We've seen these all happen to complex VPN's, too.
So, this isn't mere zealous recommendations: many of us have watched decades worth of software broken ignoring proven principles, WireGuard is one of few of any software following them, empirical evidence says it will be more secure in most (if not all) cases, and so we're promoting it.
A better metaphor would be security engineers and researchers promoting a security product since it has strong evidence of actually being secure. Which is exactly what you're seeing for at least four of us here. ;)
https://community.openvpn.net/openvpn/wiki/SecurityAnnouncem...
There was a serverside remote code execution vulnerability in OpenVPN less than a year ago.
OpenVPN is large and gnarly. It's not one of the better understood codebases. The assumption that software security assessors have closely inspected it would not be well-founded. It has had "formal" audits, but audits are point-in-time snapshots done under timebox conditions.
The point of WireGuard, from an assurance perspective, is that it's designed to mitigate these concerns. It is a VPN with most of the mechanism of legacy VPNs stripped out. Less mechanism = less attack surface. It's two orders of magnitude smaller than other VPNs in terms of lines of code. Less code = easier to review = more reviews. It's not just small: it's thoughtfully small, as the post we're commenting spells out.
OpenVPN is built on TLS. TLS is a complicated protocol. It needs to support a variety of different users and the complexity of that task shows in the protocol; that complexity (and legacy support) is also a big part of the vulnerability history of TLS. Ordinarily, it would be worth assuming the risks of TLS's complexity rather than building a custom transport protocol, because secure transport protocols can be tricky to get right. But WireGuard has had formal academic analysis (in addition to a Tamarin model) and inherits cryptographic design from work Trevor Perrin did. WireGuard's protocol only has to serve WireGuard's use case, and is significantly less likely to have cryptographic vulnerabilities than TLS or the OpenVPN system as a whole.
The right way to think about it is that OpenVPN is like Sendmail, and WireGuard is something closer to qmail.
I agree that the page is a bit hyperbolic but don't let that dissuade you from investigating WireGuard; the people behind WireGuard are hard headed engineers and the work is worthy of your attention.
Speaking of WireGuard ... FWIW, we made a QEMU Advent Calendar[1] disk image[2] for it in 2016 December. Check that out if you want to give it a spin in a virtual machine.
Reading this thread reminds me to give it a try again now.
(I recall listening to the Wireguard talk at FOSDEM 2017, and a long-time Linux kernel developer, who works on memory management, was sitting next to me and remarked that he was not convinced of some details -- but unfortunately I don't remember the technical reason he mentioned as to why he thought so. Sorry :-( )
Live and learn.
In addition to other comments, OpenVPN's default cipher is Blowfish. Since that sounds unbelievable, here's the manpage:
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
"The default is BF-CBC, an abbreviation for Blowfish in Cipher Block Chaining mode."
If you read just a little further you'll see that RC2, 56-bit DES and other obsolete ciphers are supported as well. To put this in perspective, DES is from the same time period as Pink Floyd's Dark Side of the Moon.
I'm very excited for WireGuard to be ported to other platforms.
The entire negotiation and key agreement stack is a larger codebase than all of Wireguard.
This is extremely fast for an encrypted network given most other solutions tend to take a severe toll on performance often operating at 140/180 Mbs on gigabit networks.
The only drawback currently is it's a kernel module and needs to be compiled, which makes setup across systems a bit involved, however there are ongoing efforts to merge into the kernel.
It's unfortunate innovate open source tools like Wireguard that add a lot of value to networking and clustering are not more well known.
Without being more specific in those areas and benchmarking the best reasonable configuration of one tool against the best reasonable configuration of the other tool, and then holding the rest of the factors constant, you've created a completely implausible and unsupportable conclusion.
I'm not saying that WireGuard isn't faster. I'm saying that you have done a poor job of describing how it is faster, and pointing to benchmark references to back up your claims.
Do these things have to be kernel modules? Is this a kernel module on OS X?
I ask because 90%+ of the time my OS X system goes unstable the moment I add a .kext.
Not to mention telling me where to find the code.
Do pre-authentication OpenSSH vulnerabilities happen a lot, or something?
Having a VPN is a pretty great control for the vast majority of organizations that don’t have the operational maturity to pull the public IP apart of BeyondCorp off. FWIW: we are helping customers with differential access controls (and I love Chromebooks despite the license purchasing experience). But even if you go full public-IP BeyondCorp you’re going to have some machines you’re not exposing (though it should be fine to expose them, as you mention), and occasionally you need to reach them, and VPNs remain great for that. VPNs being unnecessary (and giving a false sense of security) for human-facing endpoints in a company with a multi billion dollar security org? Sure, it’s hard to disagree: to your point Google is working on the proof by construction :-D
(See also: People migrating from FTP to SFTP and haven't heard the good word of rsync with key auth.)
If you ever use SSH to tunnel/forward TCP traffic, you should be aware of certain performance issues [1], due to TCP's re-transmit mis-behaving (stacking) in a TCP-in-TCP scenario. Expect seemingly random delays, followed by bursts of transmission even well below the nominal capacity of the connection. This also causes overall increase in amount of data sent.
The same caveat applies to any other TCP-in-TCP tunnel (as opposed to the usual TCP-in-UDP setup), unless one or both tunnel endpoints specifically handle re-transmits properly.
This was the traditional model of the internet, from before NATs and VPNs were invented. This was the model under which Kerberos was developed - remote processes should only talk to each other over secured connections after authenticating each other, because their transport is the public internet, and there's no distinction between human-to-server and server-to-server in this regard. It was the model under which SSH (trust-on-first-use with no authorities), the HTTPS PKI (fully-qualified hostnames only), etc. were designed.
OpenSSH, and the SSH standard in general, support "multiplexing SSH connections", where several remote shell sessions share single TCP connection. This is unaffected, as there's only one TCP layer in play. For OpenSSH this is options "-M" and possibly "-J" (not sure).
Another, unrelated functionality is a straight-up TCP tunneling over the SSH connection. This is an actual TCP tunnel, with all the advantages and warts of the setup. With OpenSSH, it's options "-L" and "-R". Those options take host:port arguments, and do proper TCP-level forwarding, encrypted and compressed like any other SSH stream, layered over any transport your SSH happens to be using. Which typically is also TCP, thus creating a TCP-in-TCP scenario.
There's also "-w" which tunnels tun(4) connection, over which you could end up sending TCP traffic.
Note that neither 'authentication agent forwarding' nor 'X11 forwarding' have anything to do with any network tunneling; those just pass small chunks of meta-data out-of-band.
I don't believe this is right - the thing tunneled over SSH is the data flowing within the TCP connection, not the TCP connection itself. If I do `ssh -L8080:foo:8080 bar.example.com` and then connect to http://localhost:8080/, then my browser's TCP connection terminates at my local SSH process, which decapsulates the TCP stream and sends it over SSH. Then the SSH server on bar creates a new TCP connection to foo.
Therefore there isn't TCP inside TCP. There are three TCP connections connected in series: my browser to ssh on localhost (HTTP inside TCP, ssh to foo (HTTP inside SSH inside TCP), and sshd on foo to web server on bar (HTTP inside TCP).
Therefore the "TCP-in-TCP" problem, where a delayed/dropped packet creates backoff in both the inner and outer TCP connections, doesn't apply. When my browser sends a packet, it is immediately and reliably ACKed by the ssh process running on my local machine. That ssh process might fail to get the resulting encrypted packet to foo, but that only affects a single TCP connection, the one from my laptop to foo:22. The browser sees a slow connection, but it sees it being slow at the application layer, not at the TCP layer.
So I think 'sneak is mostly right with the exception of ssh -w, which is a relatively new feature (and not what I was asking about at the top of the thread, in any case).
Also, -w is some new nonsense that nobody should really be using except in some super dumb and hacky situations where there is no other option.
This stuff isn’t that hard.
ackshually.jpg
1. Use Algo CLI to spin up a server on DO, AWS, etc specifically to pass through traffic.
2. Use `wg` CLI to connect to that server and pass my MacBook traffic to that new server
3. Dispose the server when I'm done using Algo.
By the way, I believe https://github.com/StreisandEffect/streisand has support for WireGuard (in addition to a billion other things...).
For these reasons, I always recommend running everything with public IP address. No more excuses. It's public, so security is a must. No more surprising network flows. Cloud-based monitoring tools can access the servers. Limited access can be granted to non-core team members and computer-illiterate staff.
But for other companies, when they haven't been architected from the beginning to carefully support this access model, this is terrible advice. Just awful. Converting a company with a VPN/private deployment environment model directly to a "YOLO BeyondCorp" model will get that company owned up.
Further: if the primary things people need to get into private IP space for are (1) developer access and (2) access for non-technical staff to admin interfaces, the win just isn't there, even if done correctly, for most companies with the BeyondCorp model. It costs more to keep that model secure than it does to set up a system of VPNs for private access.
The 2FA VPN thing is, I think, a consequence of how hard it is to set up VPNs. Companies share VPN infrastructure between developers (who need relatively unfettered access) and non-technical staff, because maintaining multiple VPN configurations is so painful. WireGuard fixes that problem.
This is what I'm talking about when I say that WireGuard is a big deal. The current situation, with 2FA logins to very powerful VPN connections, is deeply suboptimal, and is what BeyondCorp was a response to in the first place.
If I was asked by a client today to design a remote access solution for customer support people to access an internal admin app, I might try to devise a site-to-site system (in which case I'd happily use WireGuard) --- deploying host-based VPN for support staff seems like a nightmare. But even if I couldn't, what I could do now that WireGuard is available is retain OpenVPN but drastically ratchet down what it has access to, SAML-ize the admin applications, and migrate developers to WireGuard environments.
As for the cost of host security, you have to consider the cost of VPNs too:
- VPNs complicate everything, because all computers inside them are effectively on a crippled, partitioned Internet. Staff that could normally just login via web interface has to fiddle with network settings. High-bandwidth apps need custom configuration to bypass the VPN in select cases.
- VPNs block cheap cloud services. They encourage deployment of poorly secured self-hosted services with on-going administration costs.
- And then there's the latency. People will setup star topology for VPNs, because it's simple and easy to control, but then everyone spends time compensating for the increased latency.
Sure, migration between security models is tricky, but migration to anything is always tricky.
That's why tunneling proxies were used in high-security environments to protect messaging, voice, and video before apps were developed that had built-in protection. Just reuse the trusted, link encryptors or VPN's watching out for covert channels like traffic patterns. Fixed-rate, fixed-size with non-leaky, error messages covered that. Basically no effort to leverage them vs developing per-app solutions needing arbitrary protocols.
You either encrypt your traffic, or you're vulnerable.
That doesn't mean a vpn is sufficient for security, just means it's a prerequisite.
People are pushing towards securing transport at the protocol layer - but it leaves issues like unencrypted dns, icmp etc.
Fully agree but depending on the culture of the company, you'll be treat as fool is you make such a claim. One of my clients is a Fortune 500, VPN access is done without 2FA, you will find all sort of company credentials available from a github search. Was surprised to see one of those credentials belong to a Thales contractor working in the security field ... Security is a good as the weakest link, you can't win against people madness.
So the setup script completely deletes all your manual DNS settings without warning you.
[1] https://git.zx2c4.com/WireGuard/tree/src/tools/wg-quick/darw...
Aka it’s alpha software, use at your own risk. Thus, yours seems like an unreasonable criticism.
Definitely good to know though.
Did you make a concerted effort to link to the file revision that doesn't contain the fix for that?
Anyway, this is taken care of now, and will be released with the next snapshot.
https://git.zx2c4.com/WireGuard/commit/?id=b39298dfb540ad9c7...
On that note, can anybody say how far along the userspace rust implementation is? How hard it'd be to port the MacOS version to FreeBSD?
https://git.zx2c4.com/wireguard-go/about/
It should be very easy to port to FreeBSD, and I'd like to make this happen. Care to help?
How realistic is it to get this running on Windows 10?
Edit: If so, why?
my point is: on all setups you have traffic that might go around the vpn tunnel, that is an application defect not that ssh tunels are worse.
The most compelling aspect of sshuttle, in my opinion, is that any host running sshd can be an endpoint - no software is required. As long as the sshd in question has python available, you can use it as an endpoint.
The big downside in my eyes is that it's TCP-based, so your latency properties with non-TCP connections aren't what you want (e.g., you can't meaningfully use Mosh) and if the connection drops / your IP changes, your single connection goes down and you have to restart it manually. Wireguard is UDP-based and handles roaming, so even if you switch networks, your tunneled TCP connections are fine.
Also, it's a real network connection, so non-TCP/UDP things like ping work, you get an actual failed connection when the remote server doesn't respond instead of a successful one that drops immediately, etc. If you have root on both sides of the connection, ssh -w will also get you a real network device. (But also if you have root on both sides, you might as well set up an actual VPN.)
What are your thoughts on the wireguard homepage effectively saying it's not ready for production use?
I've looked at using wireguard on a few occasions, but it's always sounded not ready for production usage reading through it. Looking forward to the point where I can though.
I find that one of the best ways to make bad hotel or plane Wi-Fi completely unusable is to use a VPN, and having something more reliable on bad links would be great.
In short, I expect it to have no meaningful degradation when on a bad network (so long as they don't block the traffic or have overly hostile NAT).
Too bad it'll take forever before iOS can use it, because the current state of VPN on Wi-Fi is terrible (I understand that is not the first thing WireGuard is looking to solve, but it'll be great when it gets there).
So there is hope. :-)
Stateless is the best feature of WireGuard IMO. I'm really looking forward to the mobile clients stabilizing.
I don't know how well it compares in terms of performance and crypto, it would be nice to know.
I wrote the article we're commenting on. Why would I take the time to talk about something like ZeroTier? WireGuard solves the problem I'm talking about decisively.
I'm prepared to hear something about ZeroTier that makes it interesting in the WireGuard setting, but I am not interested in a long list of non-VPN non-access-tunnel features that ZeroTier might have that WireGuard lacks, because lacking random features is exactly the point of WireGuard.
Edit: As to why it’s relevant to the “WireGuard setting”, that depends on your definition of the WireGuard setting, but: (1) it’s easy to find examples of people trying to use WireGuard for peer-to-peer communication, the use case ZeroTier solves better; and (2) ZeroTier shares WireGuard’s property of being stateless/connectionless, a significant convenience advantage over traditional VPN protocols.
I don't think overlay networks are pointless; I am enthusiastic about them. But for the remote access problem, what I want and what I'm writing about is streamlined VPN software, not a new overlay.
With WireGuard, I'm pretty sure I would have to set up multiple peers and custom routes. Although I'm assuming you could run BGP on top of the wg interface and that would solve some of it.
That said, I'd much rather something the simplicity of wireguard or tinc because it doesn't require a server who's only purpose is to manage clients.
I know it's not specifically related to the protocol either uses, but I think people would consider that as a drawback when comparing the two. If you're coming from openvpn/ipsec, then setting up any sort of mesh/routed network would be a similar process. I don't think wireguard would need to implement functionality like that either, I think it would be better if something like tinc used wireguard for the plumbing as someone else mentioned in the comments.
https://github.com/zerotier/ZeroTierOne/blob/master/node/Pac...
There is also a higher-level description of the entire system here:
https://www.zerotier.com/manual.shtml
ZeroTier solves a broader set of problems than WireGuard and has SDN-type network flow rules, security tap capability, and is a full L2 emulation layer with support for multicast.
From what I've seen the WireGuard protocols are excellent and the implementation is very nice and clean. A core ZeroTier implementation to support a simple L3 VPN use case could be as short as WireGuard but that would be without all the rules engine, multicast, etc. stuff.
A minimal implementation could be much shorter, but the ref implementation is not minimal and includes a lot of features that go far beyond the scope of WireGuard.
Salsa20/12 is standard and according to the docs is considered secure. I recall that DJB initially specified the cipher with 12 rounds but added 8 more for margin. There are Salsa20/12 implementations in many crypto libraries. The best public cryptanalysis on Salsa breaks 8/20 rounds with a time difficulty of 2^251.
Personally I think concern over algorithm strength is usually misplaced as long as you're using an algorithm that is not known to be very weak (e.g. DES, RC4). Halfway decent cryptographic algorithms are almost never broken. Implementations and protocols are broken all the time.
One thing we did to guard against protocol issues was to implement what DJB calls "boring crypto." The cryptographic encapsulation is dirt simple Salsa20+Poly1305 constructed exactly as in the NaCl secret box functions, and nothing more. We've resisted adding more advanced features to the cryptographic layer because so far they haven't really been necessary and the risk is not worth the small benefit they may have.
At the time this was designed (started in 2010) Salsa20/12 was the best option to achieve high performance across a variety of devices including ARM phones and slow VMs with a clean and small code base. If it were written today it would probably use ChaCha20 (faster) or AES-GCM since almost everything worth mentioning has hardware AES now. We will likely rev the crypto at some point but would also like to upgrade the asymmetric cipher as well. Waiting to see if the Goldilocks curves (curve448) get added to the NIST standard. They are proposed but not yet approved. If they are we'd probably go to curve448+AES256-GCM with a longer IV.
That being said we're not solely oriented toward crypto and generally tell our users not to rely on network crypto as their only line of defense. Network crypto is sort of analogous to hard drive encryption. It protects you from people who don't have access to anything, but won't save you once someone gets any access beyond the perimeter. We advocate the use of encryption and authentication within networks as well if you care about security. This also guards against the discovery of a bug in any layer-- if someone breaks one layer they are confronted by another layer.
An RFC-style write-up has been on the to-do list forever, but the to-do list is very long.
I've been poking around for about 30 minutes and I'm still not sure I understand what the key agreement protocol is. I'm trying to follow starting from _doHELLO and you're losing me somewhere amidst the moons and worlds and stuff.
Crypto here is fairly dirt simple as I said. It's just ECDH with two Curve25519 keys and then go.
The moons/worlds stuff is just some odd terminology for how to define upstream nodes. We are dumping that in favor of something more straightforward in the future. Most users don't need to care about it.
I'd like to avoid GCM but we also may have a need for FIPS compliance in the future. Yes I know that FIPS basically mandates weaker crypto... or at least crypto that is easier to implement wrong... but if it's not FIPS it isn't "enterprise" to some (clueless) people. Then you have organizations mandated to use FIPS crypto by forces beyond their control.
It was left out of the original design since ephemeral negotiation means state and therefore latency and stalls if packets are dropped. The present design leaves it out as part of a design that prioritizes instantaneous connectivity.
When we do add it we will probably add a network level config option to select whether forward secrecy is required. If it's off it will work instantly and then lazily upgrade. If this option is on it will wait.
As I said though I don't see network level (L2/L3) encryption as being worth much more than whole disk encryption. Each really secure thing should have it's own secure authenticated session that would be secure enough over the open Internet. That way a network compromise or trojan is not instantly fatal. We pretty much tell everyone this.
I built something like this (in C++, no less!) back in 2000. After the company failed, I always felt like we had made a mistake not just shipping the absolute simplest possible message forwarder, and then implementing the control plane for it in a reasonable high-level language. (In fact: an early team member pushed us to do that, and I shot them down.)
Friendly advice -- roll yourself back down to an 8 or 9.
You're not being rude. But I have no plans to give an inch on this discussion. If that's problematic for you, you're welcome to use the HN votey-buttons as you see fit.
Noise also did not exist in 2010. The cryptographic world is so much richer today than it was even 8 years ago. When I think back to the crypto dark ages I shudder.
Edit: ..and if so, how they handled IP assignment and key distribution.
What’s that?
> … developers use MacOS …
Not all developers! I’ll believe that many developers use macOS. It’s even possible that most developers conducting certain kinds of development use macOS. But not all developers do. I don’t. Noöne on my last team did (we were Linux-only). Several folks on my current team don’t.
I don't have advice for developers on Windows right now, but we haven't run into any of those at Latacora; you can assume we're broadly writing for an audience of the kinds of startups we serve.
Principle. I strongly believe that software which runs in kernel space must adhere to the same standards (for better or worse) as the kernel. For Linux kernel modules, this means being accepted into the upstream kernel, and demonstrating a history of maintaining compatibility with the mainline kernel.
I've been burned a lot in the past by companies releasing their own modules, and quickly failing to keep up compatibility with the mainline kernel versions. Not going to make that mistake again.
But for the record, we're maintaining meticulous compatibility with all kernel.org kernels back to 3.10 and up to whatever the most recent RCs are (at the moment, 4.17-rc5). We also support the frankenkernels from ubuntu, redhat, and suse. We have a build and run-in-a-vm CI box testing all these kernels for every commit and on a bunch of architectures: https://www.wireguard.com/build-status/ And because we're actively working on upstreaming this, you can be sure that this is going to continue working with upstream.
Also, this isn't a "company releasing their own modules" situation, providing some kind of throw-it-over-the-fence corporate crap code. I'm a kernel developer with a decent amount of upstream code, and the work I do is nearly always for upstream kernels.
They also taint the kernel...
> ...nightmares to configure and manage.
This opinion seems a bit overdone. OpenVPN is one of the simplest and robust VPN protocols to setup and manage in my experience.
If you've had issues with OpenVPN, there are simpler options like Angristan's OpenVPN script [0] on GitHub to get you started.
I'm not arguing against WireGuard's use case as it's a nifty tool and viable option. While it's codebase is indeed smaller in size, denigrating a proven tool like OpenVPN or assuming that everyone is incapable of managing it because it's "complex" is both unnecessary and incorrect.
100% of OpenVPNs we have seen deployed at startups had BFCBC as the default protocol. 100% (I think?) of IPsecs had aggressive mode IKE.
Wireguard doesn’t have bad modes. It benefits from decades extra of r&d in usable, secure cryptography.
I burnt 2 days earlier this month because `comp-lzo` is apparently distinct from `compress lz4` and fixing that required an OS upgrade (because it didn't exist before 2.4 and this VM isn't on the bleeding edge), which killed my VM's desktop environment, so I ended up needing to rebuild the entire environment. Even after that, the GNOME network manager doesn't respect the existence of this flag, so I have to work around the OS.
Changing the VPN server's configuration to disable compression wasn't an option either. (Compression oracles are bad, m'kay?)
If they were using WireGuard, this problem wouldn't have existed in the first place. Maybe compare/contrast them for yourself? You may find WireGuard even easier to get running.
I for one welcome our modern crypto overlords.
Good enough to load some jira/confluence but that’s pretty much it.
I understand why people like OpenVPN --- their alternative before OpenVPN was IPSEC, which is a nightmare. What we're telling you is that there's something even simpler than OpenVPN, and it has the virtue of being materially more secure.
People should stop using OpenVPN as soon as they can.
WireGuard provides the foundation of a complete VPN service. It doesn't provide features such as user management and authentication, key management, ip address assignment, client configuration distribution, end-user friendly VPN clients, support for easily implementing complex split-routing and dns configurations for VPN end users. And most of those things aren't in progress. And it is likely there will be multiple solutions competing to provide these on top of WireGuard, so there may never be on true flavor WireGuard solution. Also once these are in place the overall attack surface expands to be closer to OpenVPN and IPsec.
Other issues include lack of support for multicast which means IPv6 which requires multicast is mostly supported but not completely which can cause issues in some circumstances.
Accomplishing some simple tasks like using a floating route to provide failover across two WireGuard links isn't possible. WireGuard interfaces don't go down unless you manually tear them down, so you either have to run another tunneling protocol over the WireGuard links and assign your routes to those interfaces which can go down or use a dynamic routing protocol. And WireGuard has a few caveats when being used with certain dynamic routing protocols which starts to make it as complicated as OpenVPN or IPsec at scale.
Currently there is an issue being discussed on the WireGuard mailing list regarding there currently being a requirement for time to be set on devices before establishing a first connection to a peer. This is because of an anti-replay requirement WireGuard has for initial packets which IPsec and OpenVPN don't. This is impacting a group that was hoping to use WireGuard to encrypt the traffic across a community wireless mesh network. The devices used in such networks often don't have a realtime clock. There are potential workarounds but again suddenly the simplicity advantage starts to slip away.
I think Jason has done great work, I like WireGuard and I use WireGuard, but it is not near ready to replace OpenVPN or IPsec in most circumstances.
With the amount of effort put into Wireguard, IPSec could also be easy on Linux. Of course, Wireguard is a simpler, newer protocol. But if simpler and newer were all that mattered we'd never settle on any kind of a standard. Anyhow, if backward compatibility didn't matter we could make the IPSec stack substantially simpler, if not as simple, as well. But it does matter.
Wireguard may be easier on Linux, but that says more about Linux than the usefulness and viability of IPSec more generally.
But I am indeed talking about the total effort to setup clients and servers. I have two IPSec gateways running OpenBSD, one IKEv1 and IKEv2. And I've setup macOS, Windows, Android, and OpenBSD clients to use it. Others have connected to the former with Linux (including a MikroTik router), and that was by far the biggest source of headaches.
L2TP is more complex on the OpenBSD side: another couple of lines in /etc/npppd/npppd.conf. Allocating addresses over IKEv2 is much easier as its baked into the same layer, but last time I tried a couple of years ago macOS's IKEv2 support was experimental and Android was (and is?) still stuck with IKEv1. But WireGuard doesn't have equivalent functionality anyhow, so it's all irrelevant.
If we're talking about a static configuration that tunnels private IPs over public IPs, on OpenBSD it's the same one-liner. You can also tag packets coming out an IPSec flow and manipulate them using PF, but that's just as easy if not easier than with WireGuard because comparing PF with iptables isn't even a fair fight.
If you compare apples-to-apples--e.g. focus on the few encryption suites commonly supported by most IPSec implementations, and ignore things like X.509 certificate authentication which WireGuard doesn't support--then IPSec doesn't have to be difficult to setup.[1] The biggest headaches from a usage standpoint IME are (1) the horrible configuration and management story on Linux, and (2) all the shoddy firewalls that cause network hiccups, which WireGuard will also enjoy once it sees the same kind of widespread deployment.
I won't dispute WireGuard has its elegance. But it's most prominent on Linux. And it explicitly avoids addressing other complex problems that are commingled, for better or worse, in IPSec stacks; problems that often can't be avoided anyhow.
If I needed to setup a VPN for a cluster of Linux servers, then WireGuard would be a no-brainer. But to support non-Linux clients, why would I have them install some third-party application when there's a perfectly good and useful IPSec stack that comes natively? I hate SSL VPNs and OpenVPN for precisely the same reasons. At a previous job I refused to install the ridiculous SSL VPN client and instead dropped a tiny OpenBSD box on the corporate network that established a reverse IPSec tunnel to my own gateway. A single line in /etc/ipsec.conf on each end to setup the IPSec flow, and some simple PF rules for LAN routing. Easy-peasy.
[1] X.509 certificate authentication doesn't have to be hard, either. It's also rather trivial on OpenBSD, though the story on macOS and Windows is mixed.
(I don't know the answer.)
IIRC, all the modern IPSec stacks support at least AES and SHA256. However, the problem is that on macOS and (I think) Windows you specify the suites as fixed 3-tuples: MAC-CIPHER-DHKE, even if they could be independent (i.e. not mixed encryption/mac mode). So even though they all share strong cipher and MAC modes, the key exchange modes might not match as they only support a few combinations. I haven't tried changing my IKEv1 setup in the past several years (I'm not really using it much anymore except when traveling), but I have it configured as "auth hmac-sha1 enc aes group modp1024". I have a commented out block using "auth hmac-sha2-256 enc aes group modp2048" that says "OS X 10.11 supports SHA2-512 but only with group modp2048". IIRC that also worked on Windows but at the time I still needed to support macOS 10.10.
macOS and (I think) Windows support uploading specialized IPSec profiles, but like with security tokens I don't want to rely on a scheme that requires maintaining such things and never cared to dig too deeply. As far as I'm concerned it's not secure (in a larger, practical sense) if it requires complex manual configuration and software installation.
IPSec can be made simpler and has gotten much simpler and stronger in many respects as compared to the experience many of us had years ago. With only a tiny fraction of the effort needed to get native, vendor-shipped WireGuard support on macOS and Windows we could standardize a new, modern, cipher suite (as with TLS). For all I know that's already happened as a de facto matter.
WireGuard and IPSec don't have to be mutually exclusive. The notion that we can abandon IPSec is fanciful as a practical matter (nearly as fanciful as abandoning TLS), and so being fatalistic about IPSec is not constructive, not to mention a little unfair. Look at IPv6: some of the complexity of IPv6 has been shed as adoption has grown. IPv6 is an easier proposition today than it was 10 years as the way forward has become more clear.
IKEv1 is a mess, by the way. Here's a good Cas Cremers survey of issues, circa 2011:
https://www.cs.ox.ac.uk/people/cas.cremers/downloads/papers/...
This stuff can't die off fast enough for me. Just so we know where I'm coming from here.
The subsequent replies are all correct in that WireGuard is in fact simpler than OpenVPN to install/administer, has a smaller footprint and better performance as well. In that same vein, WireGuard is therefore magnitudes more efficient than the older VPN protocols that OpenVPN once usurped.
Instead, what you'll want to be doing is SSH over WireGuard.
Can Wireguard be described as an encrypted, stateless, roaming, keypair based UDP tunnel?
The "getting started" guide on the website already assumes you can set up your own routing across the different subnets.
The archlinux wiki also give some tips but it is really simple
https://vincent.bernat.im/en/blog/2018-route-based-vpn-wireg...
Didn't tried it myself but it looks solid
https://www.wireguard.com/quickstart/
It's the simplest VPN setup I've ever seen.
http://www.ducea.com/2006/08/01/how-to-enable-ip-forwarding-...
On the "client" side you'll likely want a static route for your lan that ensures those packets go over your wireguard interface.
For comment/discussion.
Not a "recommendation", nor a positive/negative opinion.
Believe it has never been discussed on HN before.
Used by OVH routers to efficiently aggregate multiple physical links.
How do you build SAML, Oauth/Google-Auth, 2-factor support into a VPN from the ground up ?
But, you can indeed donate to the efforts, which makes a big difference: https://www.wireguard.com/donations/ https://www.patreon.com/bePatron?c=1100957
Disclaimer: I’m a principal at Latacora and we paid the author some money to make native Mac clients happen. There’s also a VPN provider who paid money toward development.
I’d rather they did it right than rush it to meet a kickstarter date.