I encourage you to check out Watchguard. They support a few different remote/user VPNs (IKEv2, L2TP, SSL, IPSEC). Far and away IKEv2 is the best in terms of security, ease of use, performance. It’s compatible with with Windows, MAC, IOS, and Android (using third party ‘StrongSwan’ app).
- Stability.
NEVER an issue. Recent firmware added support for MOBIKE protocol https://datatracker.ietf.org/doc/html/rfc4555
You can lose internet and reconnect, switch IPs, connect seamlessly over different interfaces…
- Supports 2FA
Allows local database user authentication, RADIUS, and their own Authpoint (MFA). If your 2FA uses MSCHAPv2 it should work. DUO/OKTA/RSA should all work fine. If you use windows NPS and Azure AD I believe you can tie that in.
https://learn.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-nps-extension
To be candid I use Watchguards Authpoint 95% of the time. I’ve also used a couple third party services like MiniOrange Xecurify, but there are integration guides for the major MFA players so I have little doubt they will work.
- Ease of use for end user
On windows the user clicks the network icon in the task tray and the VPN is presented above the wifi connections/
Click it and type name/pass. You can allow them to remember credential
If you install the VPN for -ALLUSERS on the machine, it will display on the windows login screen. User clicks the VPN, types creds, then it signs into both the VPN and windows. Avoid login script issues etc.
- Initial Install
Client side
By default the windows installer is a batch file, a certificate, and a powershell script. You just run the batch, it installs the cert and then runs the powershell script to configure Microsofts built in VPN client. I usually just push the cert, and PS script through GPO or RMM tool and call it a day.
Firewall side
Add the radius server to the firewall and you can run through the VPN setup wizard in about 10 seconds. It just asks what public IP/domain name you want to use inside the client, you select your radius server, and then NEXT → NEXT → Finish.
- Ease of pushing new config to client
The powershell script has two functions
- Add the VPN config if not present
- Update the config if present.
If you want to change anything you can update the powershell and just run it again