- How to auto start openvpn (client) on Ubuntu CLI?
- Setting up your vpn to run from bash
- Remove existing (broken) service config for openvpn
- Set up openvpn to run as a systemd service
- Настройка OpenVPN клиента
- Установка
- Windows
- Linux CentOS
- Linux Ubuntu
- Android
- Настройка
- Пример конфигурационного файла
- Параметры конфигурационного файла
- Сертификаты
- Guide: Configure OpenVPN to autostart on systemd Linux
- Requirements for OpenVPN autostart on systemd Linux
- Configure OpenVPN for systemd Linux
- OpenVPN for systemd Linux: Enable the systemd service
- Configure OpenVPN to autostart using Linux: Final thoughts
- Related Posts:
- Jens
How to auto start openvpn (client) on Ubuntu CLI?
The openvpn package comes with an init script /etc/init.d/openvpn . This script automatically sets up connection for every .conf (mind the extension) file in /etc/openvpn .
If you install OpenVPN via an RPM or DEB package on Linux, the installer will set up an initscript. When executed, the initscript will scan for .conf configuration files in /etc/openvpn, and if found, will start up a separate OpenVPN daemon for each file.
I got a bit stuck on this and ended up writing out all of the instructions for setting it up with systemd manually.
This worked for me using Ubuntu 16.10 and openvpn 2.3.11
Setting up your vpn to run from bash
These examples use expressvpn but most would work the same way
Download your vpn provider’s ovpn config file e.g. my_express_vpn_amsterdam_2.ovpn
move that to /etc/openvpn/ and rename it to end in .conf
sudo mv ~/Downloads/my_express_vpn_amsterdam_2.ovpn /etc/openvpn/amsterdam-2.conf
Your VPN provider will provide you with a username and password for connecting over openvpn. Save the userename and then password each on their own line
sudo vim /etc/openvpn/express-vpn-crednetials.txt # add these lines YOUR_VPN_USERNAME YOUR_VPN_PASSWORD # save the file
now edit /etc/openvpn/amsterdam-2.conf look for a line that says auth-user-pass and replace it with the path to your credential file
auth-user-pass /etc/openvpn/express-vpn-crednetials.txt
Test your config! Start openvpn like this
sudo openvpn --config /etc/openvpn/amsterdam-2.conf
openvpn should connect without asking for username or password
Remove existing (broken) service config for openvpn
sudo rm /etc/systemd/system/multi-user.target.wants/openvpn.service
Set up openvpn to run as a systemd service
The config that came with openvpn was broken so I removed it and created a new one based on this answer
Create systemd service for openvpn
sudo vim /usr/lib/systemd/system/openvpn@service
[Unit] Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I After=syslog.target network.target [Service] PrivateTmp=true Type=forking PIDFile=/var/run/openvpn/%i.pid ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf [Install] WantedBy=multi-user.target
the %i is used as a wildcard so that this service can be used for multiple vpn configurations. Set it up for the amsterdam-2.conf file that we created earlier
sudo systemctl start openvpn@amsterdam-2.service
the systemd service should now be running on the amsterdam vpn. check its status like so
sudo systemctl status openvpn@amsterdam-2.service
you should see several lines of output ending in Initialization Sequence Completed and your vpn should be running.
Hope this helps! related reading:
Настройка OpenVPN клиента
Обновлено: 09.12.2021 Опубликовано: 20.07.2017
В данной инструкции подробно описан процесс настройки клиента OpenVPN на примере операционных систем Windows и Linux. Также, с ее помощью можно настроить скиента на Android.
Установка
Windows
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для нужной Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Linux CentOS
Устанавливаем репозиторий EPEL:
Linux Ubuntu
Android
Установка выполняется из Google Play. Набираем в поиске OpenVPN Connect — нажимаем установить и принимаем условия.
Настройка
После установки программы конфигурационный файл не создается автоматически и его нужно создать вручную.
В системах Windows создаем файл config.ovpn в папке %programfiles%\OpenVPN\config.
* имя файла может быть любым, расширение должно быть .ovpn.
Для создания конфигурационного файла в Linux выполняем команду:
* чтобы служба openvpn автоматически выполняла соединение, необходимо, чтобы конфигурационный файл назывался client.conf.
Пример конфигурационного файла
client
dev tun
proto udp
remote 192.168.0.15 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
dh dh2048.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
comp-lzo
verb 0
Параметры конфигурационного файла
Параметр | Значения | Описание |
---|---|---|
client | Строка говорит о том, что конфигурационный файл описывает клиентское подключение (программа сама устанавливает соединение, а не ждет, как сервер). | |
dev | tap или tun | Выбор виртуального сетевого драйвера. TUN — сетевой уровень модели OSI, оперирует IP-пакетами. TAP — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Настраивая OpenVPN клиента, в большинстве случаев, необходимо выбирать tun. TAP необходимо использовать для работы определенных сервисов, например DHCP. |
dev-node | любая строка | Параметр используется в системах Windows в случаях, если имеется несколько сетевых интерфейсов. Значение этого параметра должно содержать название сетевого подключения, через который должен работать OpenVPN. |
proto | udp или tcp | Указывает, какой протокол использовать для передачи данных. В большинстве случаев, лучше использовать UDP, так как данный протокол создает меньше нагрузки на сеть. |
remote | VPN-сервер и порт | Задает сервер, к которому должен подключаться клиент, а также сетевой порт (по умолчанию 1194), на котором OpenVPN принимает запросы. Можно указать несколько строк. |
remote-random | Если указано несколько строк remote, данный параметр говорит, что необходимо подключаться к удаленным серверам в случайном порядке. | |
resolv-retry | количество секунд или infinite | Используется в тех случаях, когда в качестве сервера указано доменное имя. Параметр задает время в секундах для повторного переподключения, если не удалось узнать имя сервера. infinite — держать связь с сервером постоянно. |
nobind | Клиент использует динамический порт для подключения. | |
user | учетная запись | Задает определенного пользователя для работы клиента (только для UNIX-систем). |
group | группа | Задает определенную группу для работы клиента (только для UNIX-систем). |
persist-key | Не перечитывает ключи при перезагрузке сервиса OpenVPN. | |
persist-tun | Не перечитывает параметры туннеля при перезагрузке сервиса OpenVPN. | |
http-proxy | сервер прокси и порт | Использовать прокси-сервер для подключения. |
http-proxy-retry | Переподключаться к прокси-серверу, если связь была разорвана. | |
http-proxy-timeout | количество секунд | Время, через которое выполнять попытки переподключения к прокси-серверу. |
mute-replay-warnings | Параметр стоит задавать при использовании беспроводного соединения. Он отключит дублирование предупреждений пакетов. | |
ca | пут к сертификату | Корневой сертификат удостоверяющего центра. Генерируем на сервере. |
cert | пут к сертификату | Открытый ключ клиента. Генерируем на сервере. |
key | пут к сертификату | Закрытый ключ клиента. Генерируем на сервере. |
dh | пут к сертификату | Ключ с алгоритмом Diffie-Hellman (Диффи-Хеллмана). |
remote-cert-tls | сервер | Исключает возможность mitm атаки, включая верификацию сертификата сервера. |
tls-client | Указание на то, что это клиент TLS. | |
tls-auth | ta.key 1 | Дополнительный уровень аутентификации посредством ключа TLS. |
float | Удаленный хост может менять IP-адрес в процессе соединения, при этом последнее не будет разорвано. | |
keepalive | секунд1 секунд2 | Пинговать каждые секунд1 сервер и если в течение секунд2 не будут получены ответные пакеты, перезапустить подключение. |
cipher | алгоритм | Указывает алгоритм шифрования. Примеры: AES-256-CBC, AES-128-CBC, BF-CBC, DES-EDE3-CBC. |
comp-lzo | Использовать сжатие. | |
verb | число от 0 до 9 | Уровень детализации лога. 0 отключает отладочную информацию. |
mute | число | Указывает сколько лог-сообщений может отображаться для каждой категории события. |
auth-user-pass | ничего или путь к файлу | Говорит клиенту, что необходима аутентификация. Если не указан путь к файлу, клиент выкинет окно для авторизации, иначе прочитает данные из файла. |
ipchange | команда или путь к скрипту | Выполняет команду при смене IP. |
connect-retry | секунд | Переподключиться к серверу через указанное количество секунд, если соединение было разорвано. |
connect-retry-max | число | Сколько раз повторять соединение, если оно было разорвано. |
shaper | байт | Задает максимальную скорость передачи данных для исходящего трафика. |
tun-mtu | число | Задает MTU. |
status | путь к файлу | Путь к фалу хранения статуса. |
log | путь к файлу | Путь к лог-файлу. |
askpass | путь к файлу | Путь к файлу с паролем для приватного ключа (private key password). |
Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn —help (в Linux и Windows).
Сертификаты
Клиентские сертификаты генерируются на стороне сервера. Процедура следующая.
Guide: Configure OpenVPN to autostart on systemd Linux
The perks of having an automatic VPN connection are many. But notably, it will keep your Internet traffic private. The newer systemd Linux forces us to configure our startup script for OpenVPN to make it work. This guide depends on this OpenVPN setup. Learn how to configure OpenVPN to autostart on systemd Linux! [Read: Guide: Configure OpenVPN autostart Linux connection]
Requirements for OpenVPN autostart on systemd Linux
Before you begin setting up OpenVPN to autostart on systemd Linux, you’ll need a few prerequisites:
- OpenVPN
- A VPN provider
- A Linux distribution (distro) with systemd it could be Debian 8 or newer (I will be using OpenVPN on OSMC, which is Debian-based)
Configure OpenVPN for systemd Linux
Now, let’s configure OpenVPN to autostart for systemd Linux. First open a terminal. We need to change the default behavior of OpenVPN. With the editor Nano, run the command:
sudo nano /etc/default/openvpn
Remove the ‘#’ infront of ‘AUTOSTART=»all»‘ so that OpenVpn allows to start the .conf files. After that press «Ctrl X» to exit Nano and answer «Y» to save the file.
Run the following commands to show a list of possible vpn.ovpn files:
Next, you need to decide which vpn.ovpn file you are going to auto connect to. The one you pick needs to be renamed to client.conf, because that’s the standard way of doing it in the OpenVPN world. Run this command:
sudo cp vpnserver.ovpn client.conf
Where it says «vpnserver.ovpn» replace it with an existing file, the name will differ from provider to provider. For example, us123.nordvpn.com.tcp443.ovpn if you’re using a VPN which requires you to login, like NordVPN does. Use this fix:
Change the line that says:
Press «Ctrl X» and «Y» in order to save your changes.
Insert your username on the first line and password one the second then «Ctrl X» and «Y» to save the file.
Surfshark VPN Exclusive Offer — 82% off ($2.39/month):
♦ Hide your browsing (no logs), Anonymize Streaming and Downloads
♦ Wireguard Protocol support for VPN.
♦ Circumvent Geo/Country Restrictions and access worldwide content
♦ Works on Windows, Mac, Linux, Android, iOS, Router, and more
♦ 1 TB Encrypted Storage
♦ Money back guarantee — Sign Up Now
OpenVPN for systemd Linux: Enable the systemd service
Run the following command to enable the OpenVPN service to run while booting:
sudo systemctl enable openvpn@client.service
sudo systemctl daemon-reload
Start OpenVPN with the following command:
sudo service openvpn start
sudo systemctl start openvpn@client.service
Stop OpenVPN with the following command:
sudo service openvpn stop
sudo systemctl stop openvpn@client.service
Now it’s time to test if it worked. Reboot the system with the command:
To check the external IP run the command:
If ipinfo.io returns your VPN’s external ip, you’re done!
Configure OpenVPN to autostart using Linux: Final thoughts
That’s how to set up OpenVPN autostart on systemd Linux. VPNs are available for multiple platforms and devices. IPVanish VPN is compatible with Fire TV devices. You can also install OpenVPN using Docker for a private VPN server. Considering a VPN? Learn if a VPN or DNS is right for you.
Which VPNs do you recommend, and which Linux ditros are you using them on?
Related Posts:
- Feeling generous? Become a Sponsor (discounted options) or a Patron. You will receive privileges on our Discord Server.
- Just want to thank us? Buy us a Coffee or a Ko-Fi.
- May be another day?Shop on Amazon using our links. Your prices won’t change but we get a small commission.
- Don’t feel like spending? You can still show your support by sharing this post, linking to it in forums, or even commenting below.
Jens
Hey i like to tinker with Linux and other projects involving computers.