Установка и настройка OpenVPN на Debian 8

OpenVPN — это программный комплекс, позволяющий защитить от «прослушки» интернет-трафик пользователя, обеспечивая зашифрованную передачу данных от устройства клиента до сервера с установленным OpenVPN. Отлично подходит при использования публичных wifi точек доступа, где информация может быть перехвачена третьими лицами. Или в случае, когда ваш ip заблокирован на определённом сайте и нужно безопасно обойти это ограничение.

Помимо установки и настройки ОпенВПН на сервере, необходимо уметь настроить клиент для доступа с компьютера, где в качестве операционной системы будет использоваться Windows.

Используя стандартный менеджер пакетов, установим openvpn.

# aptitude install openvpn

Создание сертификатов

ОпенВПН в обязательном порядке требует генерации сертификатов для сервера и клиентов. Это и логично, ведь соединение от клиента до сервера должно быть зашифровано.

Перейдите в папку openvpn:

# cd /etc/openvpn

Генерировать ключи мы будем с помощью easy-rsa.

Создаём папку с конфигурационными файлами и ссылками на скрипты генерации сертификатов:

# make-cadir rsa
# cd rsa

Откройте конфигурационный файл vars и измените параметры:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

KEY_COUNTRY — укажите код страны (RU, UA и т.д.);
KEY_PROVINCE — данный пункт не актуален, если вы не проживаете в США. :) Можно заменить на XX;
KEY_CITY — ваш город, где вы проживаете;
KEY_EMAIL — адрес вашей электропочты.

А также раскомментируйте строку export KEY_CN, в качестве значения для которой укажите имя сервера:

export KEY_CN="example.com"

Все переменные заполняются латиницей.

Сохраните файл и запустите его выполнение:

# . vars

Затем запустите удаление старых сертификатов:

# ./clean-all

Создайте корневой сертификат:

# ./build-ca

Если при генерации корневого сертификата вы получите ошибку error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 198, добавьте в файл vars строку:

export KEY_ALTNAMES="something"

А после заново выполните предыдущие команды: . vars, ./clean-all, ./build-ca.

Следующий шаг — создание ключа и сертификата сервера.

# ./build-key-server server

После чего создайте сертификат и ключ для клиента:

# ./build-key client

Обратите внимание: для каждого клиента следует генерировать собственные сертификат и ключ. Нужно лишь указывать разные имена (вместо client) и изменять пути к ним в конфигурационных файлах. При этом, вы можете защитить ключи клиентов паролем, для этого используйте команду build-key-pass вместо build-key.

Далее нужно создать ключ Диффи-Хеллмана для возможности использования Forward Secrecy:

# ./build-dh

И ключ для tls-аутентификации:

# openvpn --genkey --secret /etc/openvpn/ta.key

Теперь необходимо скопировать серверные сертификаты и ключи в папку настроек OpenVPN:

# cp keys/ca.crt keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/

А также выставить на них права, разрешающие чтение и изменение только для их владельца.

# chmod 0600 /etc/openvpn/ca.crt /etc/openvpn/server.crt /etc/openvpn/server.key /etc/openvpn/dh2048.pem /etc/openvpn/ta.key

Обязательно скопируйте себе на компьютер, например, на рабочий стол, из папки keys ключи, необходимые для подключения клиента: client.crt, client.key, ca.crt, ta.key.

На этом процесс подготовки сертификатов закончен.

Настройка сервера

В каталоге /usr/share/doc/openvpn/ располагается файл-пример для настройки сервера Openvpn. Скопируйте его в каталог /etc/openvpn/ и разархивируйте:

cd /etc/openvpn;cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/;gunzip server.conf.gz

Теперь рассмотрим необходимые для работы openvpn параметры.

Порт, на котором Openvpn будет принимать соединения. По-умолчанию, 1194. Рекомендую изменить его в целях сокрытия. Можно даже замаскировать опенвпн под Web-сервер, указав порт 80.

port 20100

Прописываем пути к файлам сертификатов и ключа сервера.

ca ca.crt
cert server.crt
key server.key

Путь к ключу Диффи-Хеллмана.

dh dh2048.pem

Могут быть указаны как пути относительно каталога /etc/openvpn (если файлы размещены в нём), так и абсолютные.

Находим и раскомментируем строку:

push "redirect-gateway def1 bypass-dhcp"

Она нужна для возможности выхода в интернет через сервер ОпенВПН. Если её не раскомментировать, то будут доступны лишь компьютеры внутри сети.

Также нужно указать dns-серверы для подключающихся клиентов.

push "dhcp-option DNS 213.183.57.55"
push "dhcp-option DNS 87.98.175.85"

В зависимости от местоположения сервера, можно подобрать другие dns-серверы, например, на проекте OpenNIC.

Далее находим и раскомментируем параметр tls-auth.

tls-auth ta.key 0

Внимание! В настройках клиента последняя цифра этого параметра должна быть заменена на 1 — tls-auth ta.key 1.

Чуть ниже в конфигурационном файле следует перечисление доступных шифров. Раскомментируйте шифр AES-128-CBC.

cipher AES-128-CBC   # AES

При необходимости, его можно заменить на AES-256-CBC. В конфигурационном файле клиента шифр должен быть идентичен серверному шифру.

Также добавьте параметр auth. По-умолчанию, для аутентификации используются ключи sha1 длиной 160 бит, но алгоритм sha1 признан уязвимым. При указании нижеследующего параметра будут использоваться ключи SHA512 длиной 512 бит.

auth SHA512

А также параметр tls-version-min, который определяет используемую версию tls. В данном случае, последнюю версию 1.2. Внимание! Network Manager не поддерживает (на момент написания статьи) этот параметр. Поэтому, если вы планируете подключаться к ВПН серверу через Network Manager, то этот параметр НЕ прописываем в настройках сервера.

tls-version-min 1.2

OpenVPN не следует запускать от имени root. Поэтому раскомментируйте строки:

user nobody
group nogroup

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

log /var/log/openvpn.log

Все остальные параметры конфигурационного файла /etc/openvpn/server.conf оставьте со значениями по-умолчанию. На этом настройка сервера OpenVPN закончена.

Активируйте openvpn командой:

# systemctl enable openvpn

И перезапустите:

# service openvpn restart

Также нелишним будет проверить лог на наличие ошибок.

Перенаправление трафика через OpenVPN

Чтобы иметь возможность выхода в интернет через сервер опенвпн, необходимо кое-что сделать для этого.

1. Настроить sysctl

В консоли запустите команду:

# sysctl net.ipv4.ip_forward

Если вывод команды будет равным net.ipv4.ip_forward = 1, то изменять что-либо не требуется. Если же значение переменной будет равно 0, то в файл /etc/sysctl.conf нужно добавить строку:

net.ipv4.ip_forward = 1

И перезагрузить правила командой:

# sysctl -p

2. Настроить iptables

Поочерёдно выполните в консоли следующие команды:

# iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Таким образом, мы разрешим пропускать трафик через сервер OpenVPN для подсети 10.8.0.0 в рамках уже установленных соединений.

Если клиенту openvpn нужно присвоить определённый внешний ip адрес сервера, то вместо последней команды из списка предыдущих для iptables, необходимо выполнить эту:

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 127.0.0.1

Где после параметра —to-source следует указать внешний ip сервера.

OpenVPN клиент на Windows

Приступаем к настройке Openvpn клиента на Windows. Здесь всё просто: скачиваем клиент с официального сайта, устанавливаем, создаём конфигурационный файл и запускаем.

Стоит отметить, что запускать опенвпн на Windows следует с правами администратора, если активен контроль учётных записей.

Если вы не меняли путь установки, то примеры конфигурационных файлов на вашем ПК располагаются в каталоге C:\Program Files\OpenVPN\sample-config. Скопируйте отсюда файл client.ovpn и поместите его в каталог C:\Program Files\OpenVPN\config.

Помните о созданных для клиента сертификатах? Их тоже следует скачать с сервера и скопировать в этот каталог.

Откройте конфигурационный файл client.ovpn и найдите параметр remote my-server-1 1194. Вместо my-server укажите ip или доменное имя вашего сервера. Затем порт, который мы изменили ранее. В итоге строка может выглядеть так:

remote 192.168.0.1 20100

Далее нужно указать пути к сертификатам, которые вы сгенерировали на сервере. Для каждого клиента создаётся ключ с уникальным именем, который следует указывать ниже, вместо client.

ca ca.crt
cert client.crt
key client.key

Также следует раскомментировать параметр, который указывает путь к tls-ключу.

tls-auth ta.key 1

Ранее уже говорилось о том, что последняя цифра на сервере должна быть 0, на клиенте — 1.

И последние параметра — это шифры, которые вы установили на сервере.

cipher AES-128-CBC
auth SHA512
tls-version-min 1.2

Это всё, что требуется для настройки клиента. Попробуйте запустить клиент OpenVPN и подключиться к вашему серверу. Необходимая информация о подключении будет отображена в окошке openvpn gui.

OpenVPN совместно с NetworkManager

Устанавливаем графический интерфейс для Network Manager.

# aptitude install network-manager-openvpn-gnome

И перезапускаем.

# service network-manager restart

Копируем сгенерированные для клиента сертификаты в произвольную папку на комьютере. Например, в /home/user/.openvpn/.

Кликаем правой клавишей мыши на значке network manager, выбираем пункт «изменить соединения», добавляем новое подключение типа «OpenVPN».

добавить новое подключение network manager

Указываем:

  • Название соединения
  • Шлюз (домен или ip сервера)
  • Тип: сертификаты

Сертификат пользователя — сертификат, который мы сгенерировали в начале для клиента (client.crt).
Сертификат ЦС — файл ca.crt.
Личный ключ — ключ клиента (client.key).

openvpn новое соединение

Нажимаем на кнопку «Дополнительно». В открывшемся окне, во вкладке «Общие» потребуется изменить несколько пунктов.

  • Использовать другой порт шлюза (если вы указали нестандартный при настройке сервера)
  • Использовать сжатие lzo

Переключаемся на вкладку «Безопасность». Выбираем шифр, как в параметрах сервера. В качестве значения параметра «Аутентификация hmac» следует указать алгоритм, как в значении auth сервера. В статье мы выбрали SHA512.

Открываем вкладку «Аутентификация TLS» и отмечаем галочкой пункты:

  • Verify peer…
  • Использовать дополнительную аутентификацию TLS

Для последнего параметра указываем путь к файлу ta.key, в качестве направления ключа из выпадающего списка выбираем 1. Аналогично конфигурационному файлу для Windows.

Сохраняем соединение и пытаемся подключиться. :)

На всякий случай, смотрим, что пишет NM при подключении в системный лог:

# tail -f /var/log/syslog

Как вы оцените статью?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (7 оценок, среднее: 5,00 из 5)
Загрузка...

14 Комментарии “Установка и настройка OpenVPN на Debian 8

  1. Автор как я не старался сделать дебаггинг чтобы понять почему у меня клиенты не могут подключиться, openvpn не птишет логи! подскажи что сделать!

    1. Значит, нужно проверить логи клиентов. OpenVPN GUI такой лог обязательно ведёт. Правый клик мыши -> показать журнал.

      Может быть, пропущен какой-то пункт из инструкции…

  2. Спасибо, но как оказалось нужно было сделать так #openvpn /opt/vp/vp.conf и приложение подцепило конфиг файл — логи пошли — я все просмотрел и сделал впн рабочим.

    Ещебы мануальчик автор у тебя спросить. Как сделать тунель между сервером на дебиане и микротиком. Соеденить их локальную сеть. 2 квартиры.

    1. У себя на андроид-смартфоне использую официальный клиент от разработчика Openvpn — «Openvpn connect» https://play.google.com/store/apps/details?id=net.openvpn.openvpn

      Он довольно прост в настройке. Сгенерированные файлы для клиента нужно закинуть в любую папку на флэшке телефона. Затем запустить Openvpn Connect, в меню выбрать пункт «Import», далее — «Import Profile from SD card». Откроется файловый менеджер, где нужно выбрать файл *.ovpn, кликнуть по кнопке «Select». В подтверждение успешного импорта на экране отобразится сообщение «Profile imported».

      Для подключения нажимаем кнопку «Connect». Вот и всё. :)

      Не знаю о других клиентах, но этот прекрасно работает.

      P.S. Если планируется подключаться одновременно и с компьютера, и с телефона, то для последнего следует сгенерировать собственные ключ и сертификат.

  3. upd.
    п.2 решился установкой прав на ключ client.key (видимо проглядел сначала). + понадобилось выставить тип подключения TCP явно и указать тип адаптера — TAP/TUN

  4. Настроил все по инструкции, однако есть такая проблема:
    Клиент соединяется с сервером, но инета нет. С клиента пингуется как сервер VPN 10.8.0.1, так и выделенный ip сервера. С самого сервера внешние сайты пингуются без проблем. Получается что собака зарыта где-то в IPtables и ip.frwarding. Есть какие-нибудь мысли? может что побыстрее посоветуете, чем разбираться с этим лесом?

    1. Надо прописать другие правила маршрутизации
      iptables -t nat -A POSTROUTING -o venet0 -j SNAT —to IP_АДРЕС_ВАШЕГО_СЕРВЕРА
      iptables -A FORWARD -i venet0 -o tun0 -m state —state RELATED,ESTABLISHED -j ACCEPT
      iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT

Добавить комментарий

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