Настраиваем VPN в Ubuntu Server с пакетом OpenVPN

Запускаем VPN в Ubuntu 16.04 | 17.04 | 18.04 с пакетом OpenVPN.

Сегодня разберём установку и настройку конфигурационных файлов для запуска VPN сервера и клиентской части на ubuntu server 16.04 | 17.04 | 18.04

Зачем же нужен VPN? На то есть целый ряд причин. Например, чтобы ваши пароли, передаваемые по HTTP, не утекли, когда вы сидите с открытых WiFi точек. Да и вообще, даже вашему обычному провайдеру не обязательно знать, на какие сайты вы ходите. Еще — чтобы не палить свой IP в IRC сетях и прочих сервисах, с которыми вы работаете. Им знать ваше местоположение тоже совсем никчему. Также вам может захотеться попробовать какой-нибудь новый сервис, который пока что недоступен для пользователей с российским IP. Кроме того, трафик между вами и VPN сервером не только шифруется, но и сжимается, что нередко может создать ощущение более быстрого интернета. Также OpenVPN может быть полезен в целом ряде других случаев — для доступа сотрудников ко внутренним ресурсам компании, при построении на VDS’ах приложения с микросервисной архитектурой и не только.

Почему VPN, а не какие-нибудь прокси или пробрасывание портов через SSH, надеюсь, тоже понятно. VPN достаточно настроить один раз и сразу весь трафик всех приложений пойдет через VPN сервер, в сжатом и зашифрованном виде.
Чтобы поднять свой VPN, вам потребуется собственный сервер с Ubuntu, Debian, а также права root’а на нем. Если сервер у вас уже есть, хорошо. Если нет, то не расстраивайтесь. В наши дни купить подходящий VDS/VPS можно за 100-150 рублей в месяц. Компаний, предлагающих соответствующие услуги — десятки. Советовать какой-то конкретный сервис я не буду, как говорится: — «На вкус и цвет товарищей нет».

Установка OpenVPN на Ubuntu Server 16.04 | 17.04 | 18.04

приступим к установке пакетов на нашем сервере:

sudo apt update
sudo apt install openvpn

Раньше в OpenVPN входила утилита под названием easy-rsa, предназначенная для генерации ключей и сертификатов. Начиная с версии 2.3 эту утилиту из пакета выпилили, поэтому придется скачать и собрать ее самостоятельно:

cd /tmp
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
cd easy-rsa-master
./build/build-dist.sh
tar xvzf ./EasyRSA-git-development.tgz
cd EasyRSA-git-development

Генерируем все необходимые ключи и сертификаты. Приготовьтесь вводить для них пароли. Так как мы настраиваем персональный VPN сервер, то, видимо, можно использовать один-единственный пароль, но подлиннее:

./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server server
./easyrsa build-client client1
./easyrsa gen-dh

Выполнение последней команды может занять несколько минут.
Переносим полученные ключи и сертификаты в каталог /etc/openvpn/:

mv ./pki/dh.pem /etc/openvpn/dh2048.pem
mv ./pki/private/client1.key /etc/openvpn/
mv ./pki/private/server.key /etc/openvpn/
mv ./pki/ca.crt /etc/openvpn/
mv ./pki/issued/client1.crt /etc/openvpn/
mv ./pki/issued/server.crt /etc/openvpn/

Настройка конфигурационного файла openvpn на сервере.

В том же каталоге создаем файл server.conf:

sudo touch server.conf

с содержимым:

# Порт для OpenVPN
port 1194
# Протокол для работы
proto tcp
# Тип интерфейса
dev tun
# Сертификат центра сертификации ЦА
ca /etc/openvpn/ca.crt
# Сертификат сервера
cert /etc/openvpn/server.crt
# Ключ сервера
key /etc/openvpn/server.key
# Сертификат для шифрования подключения
dh /etc/openvpn/dh2048.pem
# Защита от DOS атак (для сервера 0 для клиента 1)
tls-server
tls-auth /etc/openvpn/ta.key 0
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
# Выбор криптографического шифра
cipher AES-256-CBC
# IP адрес и маска VPN сети
server 10.8.0.0 255.255.255.0
#Каталог для настройки клиента:
client-config-dir /etc/openvpn/ccd
# Сообщает клиентам что за сервером есть локальная сеть (если есть)
push "route 192.168.0.0 255.255.255.0"
#Прописывает маршрут на сервере чтобы видеть сеть за клиентом (если есть)
route 10.63.10.0 255.255.255.0
# Шлюз
#route-gateway 10.8.0.1
# Каждому клиенту выдается по 1 адресу, без виртуальных портов маршрутизатора
topology subnet
# Количество повторяющихся сообщений
mute 20
# Максимальное кол-во одновременно подключившихся клиентов
max-clients 25
# Записываем в файл IP адреса клиентов
ifconfig-pool-persist ipp.txt
#Время жизни неактивной сессии
keepalive 10 120
# Разрешаем клиентам видеть друг друга
client-to-client
# Включаем сжатие
comp-lzo
persist-key
persist-tun
# Логирование
status openvpn-status.log
log openvpn.log
log-append openvpn.log
# Уровень отладочной информации
verb 3
# Прописываем шлюз у клиента
#push "redirect-gateway def1"
# Прописываем DNS сервера у клиента
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 8.8.8.8"

Попробуем запустить OpenVPN:

service openvpn start

Проверяем:

netstat -tuwpan

Сервер должен слушать порт 1194. Если это не так, курим /var/log/syslog или же /etc/openvpn/openvpn.log.

Настройка конфигурационного файла openvpn на клиенте.

Теперь что касается клиентской стороны. Нам понадобятся файлы client1.crt, client1.key ta.crt и ca.crt и также установить пакет openvpn:

sudo apt install openvpn
cd /etc/openvpn
scp vpn-server:/etc/openvpn/client1.crt ./
scp vpn-server:/etc/openvpn/client1.key ./
scp vpn-server:/etc/openvpn/ca.crt ./
scp vpn-server:/etc/openvpn/ta.crt ./

Создадим файл client.conf:

sudo touch client.conf

с содержимым:

client
proto tcp
dev tun
# !!! замените на настоящий ip адрес сервера
remote 111.111.111.111 1194
# следующие две строчки актуальны только для Linux систем
# на практике они не очень удобны, так как OpenVPN не сможет
# нормально все за собой почистить по завершению работы
user nobody
group nogroup
# Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройства
persist-key
persist-tun
# Пути где располагаются сертификаты
ca ca.crt
cert client1.crt
key client1.key
# Используемое шифрование
cipher AES-256-CBC
# Сжатие трафика
comp-lzo
# Детальность логирования 
verb 3

Подрубаемся к серверу, внимательно читаем логи:

sudo openvpn --config client.conf

В соседнем терминале говорим:

ping 10.8.0.1
traceroute mail.ru

Если все было сделано правильно, вы обнаружите, что пинги успешно доходят до 10.8.0.1 (первая команда), но пакеты через него никуда не проходят (вторая команда). Это потому что мы забыли настроить на сервере NAT.

Настройка NAT для openvpn сервера на ubuntu 16.04

Конфиг сервера:

ppp0 — соединение с провайдером через PPPoE соединение
br0 — сетевой мост объединяющий локальный интерфейс и интерфейс WiFi
enp0s3 — интерфейс смотрит в сеть интернет
enp0s8 — интерфейс смотрит в локальную сеть
wlp1s0 — WiFi интерфейс

На сервере создадим файл под названием nat в директории /etc/network/

sudo touch /etc/network/nat

с содержимым:

#!/bin/sh
# Включаем форвардинг пакетов
echo 1 >> /proc/sys/net/ipv4/ip_forward
# открываем доступ для установленных соединений на интерфейсе подключенного к сети интернет
iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем трафик на интерфейсах
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -i ppp0 -j ACCEPT
# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i br0 -o ppp0 -j ACCEPT
iptables -A FORWARD -i tun0 -o ppp0 -j ACCEPT
#Разрешаем доступ SSH и VPN по порту 22 и 1194
iptables -A INPUT -p tcp -m multiport --dports 22,1194 -j ACCEPT
# Включаем NAT
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 10.8.0.0/24 -j MASQUERADE
# Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i ppp0 -o br0 -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -i ppp0 -o tun0 -j REJECT --reject-with icmp-host-prohibited

Переподключаемся клиентом, попробуем зайти на какие-нибудь 2ip.ru или ip.xss.ru — теперь все должно работать. Если это не так, курим логи. Так же добавим в файл /etc/network/interfaces строчку:

 pre-up /etc/network/nat

Перезагружаем наш сервер и проверяем, что настройки держатся после перезагрузки:

cat /proc/sys/net/ipv4/conf/all/forwarding
iptables -L -n

Так же имеется возможность настроить наш клиент при помощи графической программки:

sudo apt-get install network-manager-openvpn-gnome

Делается это несложно, фактически нужно повторить текстовый конфиг клиента при помощи галочек и полей ввода. Понять, какая галочка какой строчке в конфиге соответствует, очень легко.

Несмотря на то, что заметка получилась довольно длинной, настройка OpenVPN действительно занимает всего лишь несколько минут. Безопасного и быстрого вам веб-серфинга!

Если есть вопросы, то пишем в комментариях и не забываем проголосовать за статью.
Настраиваем VPN в Ubuntu Server с пакетом OpenVPN
5 (100%) 4 votes

15 комментариев

  1. Universal 2018-04-15
  2. SYSadminАвтор 2018-01-10
  3. Кофр 2018-01-10
  4. Кофр 2018-01-10
  5. SYSadminАвтор 2017-04-21
  6. Vika 2017-04-14
  7. ThomasUsefs 2017-04-12
  8. SYSadminАвтор 2017-03-17
  9. Илья 2017-03-17
  10. Alonsorut 2017-03-15
  11. Robertmot 2017-03-06
  12. DevakReero 2017-02-04
  13. pro-gramАвтор 2016-09-28
  14. Фагит 2016-09-28
  15. Игорь 2016-09-27

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *