Title: OpenVPN as the default gateway on OpenBSD | |
Author: Solène | |
Date: 27 October 2020 | |
Tags: openbsd openvpn | |
Description: | |
If you plan to use an OpenVPN tunnel to reach your default gateway, | |
which would make the tun interface in the `egress` group, and use | |
`tun0` in your `pf.conf` which is loaded before OpenVPN starts? | |
Here are the few tips I use to solve the problems. | |
## Remove your current default gateway | |
We don't want a default gateway on the system. You need to know | |
the remote address of the VPN server. | |
If you have a `/etc/mygate` file, remove it. | |
The `/etc/hostname.if` file (with if being your interface name, | |
like em0 for example), should look like this: | |
192.168.1.200 | |
up | |
!route add -host A.B.C.D 192.168.1.254 | |
+ First line is the IP on my lan | |
+ Second line is to make the interface up. | |
+ Third line is means you want to reach `A.B.C.D` via `192.168.1.254`, | |
with the IP `A.B.C.D` being the remote VPN server. | |
## Create the tun0 interface at boot | |
Create a `/etc/hostname.tun0` file with only `up` as content, | |
that will create `tun0` at boot and make it available to `pf.conf` | |
and you prevent it from loading the configuration. | |
You may think one could use "egress" instead of the interface name, | |
but this is not allowed in queuing. | |
## Don't let OpenVPN manage the route | |
Don't use `redirect-gateway def1 bypass-dhcp` from the OpenVPN | |
configuration, this will create a route which is not `default` and | |
so the tun0 interface won't be in the egress group, which is not | |
something we want. | |
Add those two lines in your configuration file, to execute | |
a script once the tunnel is established, in which we will make | |
the default route. | |
script-security 2 | |
up /etc/openvpn/script_up.sh | |
In `/etc/openvpn/script_up.sh` you simply have to write | |
#!/bin/sh | |
/sbin/route add -net default X.Y.Z.A | |
If you have IPv6 connectivity, you have to add this line: | |
/sbin/route add -inet6 2000::/3 fe80::%tun0 | |
(not sure it's 100% correct for IPv6 but it works fine for me! If | |
it's wrong, please tell me how to make it better). |