26

When I establish an OpenVPN client connection over the Internet to our corporate OpenVPN server, it pushes several static routes. Unfortunately, these routes break some connectivity within my local network environment, as they collide with my own routes. How can I refuse those routes?

23

After extensive study of the openvpn manual, I have found an answer for my question:

I you don't want the routes to be executed automatically, but to be handled by your own tool, use the following option:

   --route-noexec
          Don't add or remove routes automatically.  Instead pass routes to --route-up script using environmental variables.

If you are accepting everything that is pushed by the server except the routes, use the following option:

  --route-nopull
          When used with --client or --pull, accept options pushed by server EXCEPT for routes.
          When used on the client, this option effectively bars the server from adding routes to the client's routing table, however note that
          this option still allows the server to set the TCP/IP properties of the client's TUN/TAP interface.
23

Times have moved on, and as of 2017 (OpenVPN 2.4) this is possible with

pull-filter accept "route 192.168."
pull-filter ignore "route 172."
pull-filter accept "route 1"
pull-filter ignore "route "

This (contrived example) will allow routes to be learned that start with 192.168, ignores all 172. routes, allows other routes to 1.anything and then ignores all other routes.

To ignore redirect-gateway you can:

pull-filter ignore redirect-gateway

These commands are added to your client config file.

Likewise you can use the keyword reject which tells the VPN server it wasn't accepted. Not sure the use of this.

And finally, you can filter other config options too. I used this to ignore the DNS servers being offered, because DNS is handled by a local server for me.

  • 3
    Note, this works only in OpenVPN 2.4.x. – ab77 Feb 5 '17 at 9:46
1

You can't refuse individual routes, however if you have access to edit your OpenVPN configuration then you can effectively stop the server --pushing any configuration to you by removing all instances of client or pull from your configuration. You will need instead to add tls-client if this directive doesn't already exist in your configuration (client is just a synonym for pull, tls-client).

Of course, if you do that, you will lose all routes and any other configuration which would normally be pushed to you, so you will need to manually configure these settings after your tunnel comes up.

  • hey Mike, and how to manually connfigure a route to just the subnet I'm interested in? (10.0.0._) any way to configure this in the .opvn file? – knocte Feb 29 '16 at 12:41
  • route 10.0.0.0 255.0.0.0 – markhorrocks Jun 8 '16 at 13:54

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.