13

Windows 10 startup seems to be strange, or at least new. Many programs don't autostart the way they did in previous versions, and a lot of people are asking how to get things to autostart. I know, because I'm constantly looking to autostart my programs I'm used to.

How can I get OpenVPN to start on boot, prevent Internet access until it's connected, and automatically log in to an OVPN profile?

I already have the credentials saved in a text file, so OpenVPN just needs to load the file, process it, and connect.

I used to have this working on Windows 7, but it seems I've forgotten how to do it,

  • How you configure an application to start, when a user logs into their profile, has remained unchanged since Windows XP was released. What have you specifically tried? Update your question. – Ramhound Jan 11 '17 at 16:12
25

The best way is to use services:

  1. Install the OpenVPN service when you install the client;
  2. Place your OpenVPN profiles (with the extension .ovpn, not .conf as is common on Linux) in the config subdirectory of the OpenVPN installation directory, probably C:\Program Files\OpenVPN\config.
  3. Open the Services console (services.msc);
  4. Find OpenVPNService, right click on it, Properties, and change startup type from “Manual” to “Automatic”.
  5. Start the service, and OpenVPN will find and connect to the profiles in any .ovpn files. Keep in mind in most situations you need one TUN/TAP interface per connection file. In windows, I strongly advise to permanently associate an interface with their connection using the configuration files: dev-node TAP_Serv forces OpenVPN to bind the connection to the network interface named "Tap_Serv".

You may want to investigate is there's a way to elaborate a whitelist to force the service to connect only to specific files, and not all. I've had some issues in the past with people who needed to have a VPN server as a service plus several vpn client files in the same machine that only connect every now and then. In those situations, if I wanted OpenVPN GUI to show them a beautifull list of available connections, it meant that the service saw those files and was trying to connect to them automatically. In those cases, I decided not to use services at all:

If using a service is not an option, you can pass extra command line arguments to the OpenVPN GUI invocation to make it automatically connect on startup (as well as showing the tray icon as usual):

openvpn-gui.exe --connect myprofile.ovpn

To get that to run when you log in, place such a shortcut in the usual startup folder. (For all users, %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup; or for the current user only, %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup.)


I don’t know how to avoid the user to connect to the Internet before the VPN is set. The only way I can figure out if through Windows Firewall, and I'm not an expert on that subject. If you want to avoid a poweruser to be able to get to the Internet you need a firewall in your gateway to avoid so, or strong group policies to avoid privilege scalation.

For a normal user, you can configure the Windows client machine without a default gateway. Set a persistent static route to the VPN server on Windows clients using the following command (-P makes it persistent):

route -P add <target> mask <netmask> <gateway IP> metric <metric cost> if <interface>

Roues in Windows are stored under the following registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes

At this point a disconnected client only has access to the VPN server. Then you can add the following lines in the VPN server configuration file to add routes on clients when they connect:

To configure the VPN server as the default gateway:

push "redirect-gateway def1 bypass-dhcp"

To add an specific route through the VPN Server:

push "route 192.168.1.0 255.255.255.0"

Sometimes route pushing doesnt work on Windows. When this happens to me, I completly uninstall OpenVPN and it's interfaces from Windows, restart system and install the latest version of the software. Then, before stablishing the first connection, I restart Windows. This has allways solved the issues, however, Windows 10 Anniversary update (1607) is buggy with OpenVPN. There's a link to a deeper discussion in OpenVPN forums:

Connection problems with Windows 10 anniversary update

Keep that in mind when you setup your Windows 10 OpenVPN clients.

  • You could use the route command to force all traffic through the VPN. See comentum.com/route.html – Jeff F. Jan 11 '17 at 16:40
  • I consider myself a power user, but I'd like to be able to set this up for nonpower users and have it work seamlessly too. I don't need to prevent other power users from tinkering. – YetAnotherRandomUser Jan 11 '17 at 17:19
  • "The OpenVPN service will look into the config directory and connect to every VPN profile that is stored here." That doesn't seem to be the case. It seems to be that it connects to the first one, when they are sorted alphabetically. Can you link to documentation? I can't find a section that covers that. – YetAnotherRandomUser Jan 11 '17 at 18:56
  • Hello Dan. Most of my experience comes from OpenVPN servers in CentOS, and whenever I store multiple server files it runs them all. I'll conduct a test to determine if the behaviour with client files is the same, but I've no reason to think it will be different. Sorry if I misleaded you, will report back ASAP (I'm at work right now, either when I've some free time or after work i'll check it on a Windows machine). – DGoiko Jan 12 '17 at 8:22
  • 1
    Also Task Scheduler (<kbd>Windows key</kbd> + <kbd>R</kbd>, typeTaskschd.msc and press <kbd>Enter</kbd>) can be used. – user598527 Apr 2 '17 at 18:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.