Быстро поднять OpenVPN скриптом

На Github существует Open Source скрипт, который позволяет быстро и легко поднять OpenVPN сервер на вашем VPS.
Скрипт называтся openvpn-install, и вот ссылка на Github: nyr/openvpn-install
И этого скрипта есть куча форков, которые вы можете изучить.
Посмотреть исходный код можно здесь.
Приступим.
Если вы уже пытались поднять OpenVPN вручную, но у вас ничего не получилось, то нужно сначала его полностью снести.
Удаляем openvpn:
apt-get remove --purge openvpn
удаляем папку:
rm -rf /etc/openvpn/
выключаем ufw:
ufw disable
Далее.
Работаем под пользователем root или суперпользователем.
Для начала, обновим систему:
apt-get update && apt-get dist-upgrade -y
и установим нужные пакеты:
apt-get install -y sudo nano curl perl python wget git iptables openvpn openssl ca-certificates
Скачиваем скрипт в домашнюю папку root:
git clone https://github.com/Nyr/openvpn-install.git ~/nyr-openvpn
Переходим туда:
cd ~/nyr-openvpn/
Запускаем скрипт:
bash openvpn-install.sh
И вы попадете в так называемый Инсталлятор. Где нужно будет отвечать на вопросы или что-то вписывать. Для перехода на следующий этап установки жмите Enter.
Первый делом, предложит ввести внешний IP адрес, но вероятнее всего скрипт сам его определит:
IP address: 111.222.111.222
Следующий этап, выбрать протокол. Я жму 1 и выбираю UDP.
Далее, выбираете порт. Я поставлю, например 14000.
После этого предложит выбрать DNS сервера. Выбор будет из Google, OpenDNS или текущих, которые на VPS и еще каких-то. Я выбираю OpenDNS, жму 3.
После этого предложит ввести имя клиента. Я введу «pp-runion».
Далее начнется скачивание-установка пакетов, генерация ключей, сертификатов и конфигурационных файлов.
когда все закончится, он поместит конфиг. в домашнюю папку юзера, от имени которого запускался скрипт.
То есть, сейчас конфиг лежит по адресу:
/root/
Собственно, на этом конфигурация OpenVPN скриптом завершается.
Можно уже сейчас взять новый конфиг и использовать.
Просто, да?
Интересно, чего он там такого сгенерировал вам, посмотрим на конфиг pp-runion.ovpn:
nano ~/pp-runion.ovpn
>>: (без ключей и сертификатов)
client dev tun proto udp sndbuf 0 rcvbuf 0 remote 111.222.111.222 14000 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC comp-lzo setenv opt block-outside-dns key-direction 1 verb 3 <ca>
Все вроде бы нормально, да лучше auth SHA512 явно указать.
Поэтому добавим
auth SHA512
Вот так:
client dev tun proto udp sndbuf 0 rcvbuf 0 remote 111.222.111.222 14000 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA512 comp-lzo setenv opt block-outside-dns key-direction 1 verb 3
Обратите внимание, что скрипт уже запихнул фичу для предотвращения утечки DNS под клиент Windows:
setenv opt block-outside-dns
Если у вас Linux или MacOS — эту строку лучше закомментировать.
Теперь посмотрим на серверный конфиг server.conf:
nano /etc/openvpn/server.conf
>>:
port 14000 proto udp dev tun sndbuf 0 rcvbuf 0 ca ca.crt cert server.crt key server.key dh dh.pem tls-auth ta.key 0 topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 cipher AES-256-CBC comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 crl-verify crl.pem
Здесь также добавляем auth SHA512 (а то работать не будет, если на клиенте указан, а на сервере нет), делаем verb 0.
Также нужно проделать следующее.
Нужно закомментировать строку
status openvpn-status.log
И добавить log:
log /dev/null 2>&1
Где-то выше писал, зачем он нужен.
Получилось так:
port 14000 proto udp dev tun sndbuf 0 rcvbuf 0 ca ca.crt cert server.crt key server.key dh dh.pem tls-auth ta.key 0 topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 cipher AES-256-CBC auth SHA512 comp-lzo user nobody group nogroup persist-key persist-tun #status openvpn-status.log log /dev/null 2>&1 verb 0 crl-verify crl.pem
Берем клиентский файл-конфиг и помещаем на ваше устройство. Об этом я писал выше.
При повторном запуске скрипта из-под рута:
bash /root/nyr-openvpn/openvpn-install.sh
Скрипт предложит создать нового клиент, удалить существующего (не сможет больше коннектиться) или удалить OpenVPN.
Клиенты OpenVPN под разные ОС
Поскольку OpenVPN не встроен по-умолчанию ни в одну популярную ОС, то требуется установить стороннее ПО — клиент OpenVPN.
Windows.
Скачать с оф. сайта ниже.
Под Windows есть официальный клиент, называется OpenVPN GUI.
Скачиваете, устанавливаете. Появится ярлык на раб. столе, после запуска — иконка в трее.
Далее, помещаете ваш .ovpn файл в папку config, в установленной папке OpenVPN.
В общем, если устанавливать OpenVPN GUI по-умолчанию в папку Program Files, то адрес такой:
C:Program FilesOpenVPNconfig
В эту папку кидаем конфиги .ovpn.
Потом из трея можно запускать VPN. Все достаточно просто.
Linux.
На Линукс в репозиориях вашего дистрибутива пакет скорее всего будет называется «openvpn» (еще может openvpn-client), и ставится следующим образом:
sudo apt-get install openvpn
Если у вас Debian-подобные дистрибутивы (Debian, Ubuntu, Mint).
Если у вас дистрибутив другой линейки — сами разберетесь как ставить.
Работает это следующим образом. У вас есть .ovpn файл, далее вы в терминале вводите команду:
sudo openvpn --config <путь до файла .ovpn>
где <путь до файла .ovpn>, собственно, путь до файла .ovpn.
Или можете скормить файл network-manager ‘ у.
MacOS.
Скачать ниже.
Под MacOS из клиентов OpenVPN я знаю только Tunnelblick.
Устанавливается просто, требует права суперпользователя.
По-умолчанию будет открывать файлы с расширением .ovpn.
Будет иконка в трее, там конектимся.
Можно настроить, что бы коннектился к OpenVPN сразу при загрузке системы.
Когда соединение обрывается с VPN, интернет пропадает. В этом случае нужно вручную отсоединяться от VPN.