Пятитысячное хауту по OpenVPN. Как это работает? Минимальная настройка Iptables для доступа OpenVPN клиентов к локальной сети

Как это работает?

После завершения настройки OpenVPN сервер сможет принимать и перенаправлять внешние защищенные SSL сетевые подключения к созданному при запуске VPN-сервиса виртуальному сетевому удаптеру (tun/tap), не затрагивая правила обработки трафика других интерфейсов (внешний интернет-адаптер и др.) Благодаря этой технологии вы можете обеспечить себе доступ к удаленному серверу и находящейся в его локальной сети группе устройств даже в том случае, если основной интернет-адаптер этого сервера не принимает входящие подключения из публичных сетей и/или не осуществляет их маршрутизацию до необходимых машин, находящихся в его LAN-сети.

При необходимости вы также можете настроить маршрутизацию интернет-трафика OpenVPN-клиентов через VPN-сервер (необходимые для этого действия описаны в данной инструкции). При такой переадресации обрабатывающий VPN-подключения хост будет выполнять и функцию прокси-сервера (Proxy) - унифицировать правила сетевой активности пользователей и осуществлять туннелирование клиентского интернет-трафика от своего имени.

Требования к системе

Прежде чем приступить к установке OpenVPN, убедитесь что на вашем сервере корректно настроены необходимые базовые параметры, приведенные ниже. (если вы используете виртуальный сервер , эти три пункта уже выполнены и их можно пропустить):

  1. Сервер имеет хотя бы один статичный внешний IP-адрес (в качестве альтернативы вы можете воспользоваться DynamicDNS-сервисами, автоматически обновляющими информацию о текущем IP-адресе устройства, например, DynDNS)
  2. Разрешена загрузка пакетов ПО из официальных репозиториев . Чтобы проверить это, откройте на сервере файл /etc/apt/sources.list и убедитесь в том, что сетевые адреса вида "deb http://..." присутствуют и не закомментированы (отсутствует # в начале строки с url репозитория). Так, например, выглядит добавленное в sources.list американское зеркало репозиториев Ubuntu Precise: # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
    # newer versions of the distribution.
    deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted
    deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted
  3. Верно указаны сетевые параметры:hostname, ip-адрес (адреса) вашего сервера и его параметры DNS (последний параметр потребуется для маршрутизации интернет-трафика клиентов). Найти перечисленные сетевые настройки можно в файле /etc/hosts.

Для обеспечения приемлемого уровня безопасности машины рекомендуем также предварительно ознакомиться с содержанием нашей вводной статьи по конфигурации инструментов безопасности Linux.

Установка OpenVPN на сервер

Чтобы установить пакет openvpn на сервер, необходимо последовательно выполнить приведенные ниже команды:

  1. Обновить репозитории пакетов:
    apt-get update
  2. Загрузить доступные обновления для установленных программ:
    apt-get upgrade
  3. Установить пакет openvpn:
    apt-get install openvpn
  4. OpenVPN включает в себя набор средств шифрования easy-rsa . Для нормальной работы демона скрипты easy-rsa следует разместить в директории /etc/openvpn:
    cd /etc/openvpn/ && make-cadir easy-rsa

Подготовка публичных ключей (PKI - Public Key Infrastructure)

На данном этапе нужно сгенерировать и подписать пары пользовательских и серверных ключей. Для заверения созданных пар мы будем использовать центр сертификации (CA - Certificate Authority) , находящийся на самом VPN -сервере. Итак, создадим CA:

  1. Перейти в папку /etc/openvpn/easy-rsa: cd /etc/openvpn/easy-rsa
  2. Создать символьную ссылку openssl-1.0.0.cnf -> openssl.cnf: ln -s openssl-1.0.0.cnf openssl.cnf
  3. Инициализировать скрипт vars: source ./vars
  4. В ответ вы получите следующее уведомление: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
  5. Запустить скрипт clean-all : ./clean-all
  6. Выполнить скрипт build-ca для создания центра сертификации. В ответ на появляющиеся запросы введите необходимую информацию (латинскими символами). Если вы не укажите собственные значения для каких-то из требуемых полей, будет использовано значение по-умолчанию [представленное в квадратных скобках]: ./build-ca
  7. Теперь можно перейти к генерации пары публичного сертификата/секретного ключа VPN-сервера.

Генерация ключа/сертификата сервера

  1. Сгенерируйте ключ: ./build-key-server server Заполните информацию по аналогии с build-ca . Поля "Company Name" и "Challenge Password" могут быть оставлены пустыми.
  2. После успешной генерации ключа появится запрос на его подписание центром сертификации. Введите yes для подтверждения.

Генерация клиентских ключей

  1. Создайте пару ключей для пользователя: ./build-key client1 Примечание: созданный файл ключа client1.key по умолчаню незашифрован. Это позволяет любому пользователю, имеющему доступ к этому файлу, подключиться к вашей виртуальной частной сети. Для устранения этой особенности вы можете использовать команду ./build-key-pass client1 вместо ./build-key client1 . В этом случае ключ будет зашифрован выбранным вами паролем.
  2. Повторите процедуру генерации для каждого из будущих клиентов VPN, заменив client1 на желаемое имя. Внимание: имена ключей должны быть уникальными.
    Вы можете сгенерировать клиентские ключи и позднее. Для этого потребуется повторно инициализировать скрипт vars (команда source ./vars ), а затем запустить процедуру генерации необходимого ключа.

Установка параметров протокола Диффи-Хеллмана

Параметры протокола Диффи-Хеллмана определяют метод обмена данными между сервером и клиентами OpenVPN. Создав файл .pem , мы укажем параметры, в соответствии с которыми сервер будет инициировать защищенные соединения с пользователями.

Сгенерировать.pem файл следует с помощью команды: ./build-dh В ответ будет отображен набор случайных символов, говорящий о том, что идет процесс генерации. После завершения процедуры в директории etc/openvpn/easy-rsa/keys появится файл dh1024.pem .

Перемещение ключей и сертификатов

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

На сервере:

  1. Перейдите в директорию, в которой хранятся созданные ключи: cd /etc/openvpn/easy-rsa/keys
  2. Скопируйте сертификат и ключ центра сертификации (CA), файл параметров DH, ключ и сертификат vpn-сервера в каталог /etc/openvpn: cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn ВАЖНО : Перечисленные выше файлы - основа работоспособности и безопасности VPN. Их компрометация может иметь неблагоприятные последствия. Храните их в надежном хранилище и не передавайте эти файлы по небезопасным каналам.

На клиентском устройстве:

Скопируйте файлы ca.crt, client1.crt, client1.key в используемую приложением OpenVPN папку клиентского устройства (например, для Linux это /etc/openvpn)

Конфигурация сервера и клиента OpenVPN

В этом разделе инструкции мы создадим два файла конфигурации. Первый - файл настроек для OpenVPN-сервера, второй - параметры vpn-подключения для клиентского устройства. Для каждого клиента OpenVPN необходимо использовать свой собственный файл конфигурации (исключение - подключение нескольких пользователей с использованием одной общей для всех пары ключей).

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

  1. В качестве отправной точки в настройке вы можете использовать образец файла конфигурации OpenVPN-сервера, содержащий список доступных параметров работы программы и подробные пояснения этих параметров. Скопируйте этот документ в директорию /etc/openvpn/ для его редактирования и последующего запуска сервера VPN: gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >/etc/openvpn/server.conf
  2. Скопированный на предыдущем этапе файл server.conf является вполне работоспособной конфигурацией. Ее достаточно для нормальной работы сервера, если вам не требуется туннелирование всего клиентского интернет-трафика через VPN-сервер или другие специфические опции.
    Единственное, на что обязательно нужно обратить внимание - имена и пути файлов сертификата сервера (.crt) и его ключа (.key), а также сертификата CA (.crt).
    Имена ключей, находящихся в директории /etc/openvpn должны полностью совпадать с именами ключей в конфиге server.conf . Проверить это можно с помощью следующих команд:
    • Узнаем имена файлов ключей (два файла.crt и один.key) в папке /etc/openvpn с помощью команды: ls /etc/openvpn
    • Проверяем, соответствуют ли отобразившимся выше названиям файлов имена ключей в файле /etc/openvpn/server.conf (после блока # SSL/TLS root certificate (ca), certificate (cert), and private key (key)) : nano /etc/server.conf В случае, если имена отличаются, внесите соответствующие корректировки в файл конфига (не в имена файлов в папке openvpn) и сохраните его (CTRL+X) .
    • Перезапускаем OpenVPN для применения изменений: /etc/init.d/openvpn restart

Настройки клиента:

  1. Копируем образец файла конфигурации клиента в любую удобную директорию (в нашем случае домашнюю директорию пользователя (home), от имени которого выполняем команды: gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/client.conf.gz >/home/1cloud
  2. Переходим в папку keys и копируем необходимые файлы ключей (в нашем случае: client1.key, client1.crt, ca.crt ) в эту же директорию (/home/1cloud): cd /etc/openvpn/easy-rsa/keys > cp client1.key client1.crt ca.crt /home/1cloud
  3. Открываем конфиг клиента: nano /home/1cloud/client.conf
  4. Находим блок # The hostname/IP and port of the server и вместо example.com указываем IP адрес OpenVPN-сервера: # The hostname/IP and port of the server.
    # You can have multiple remote entries
    # to load balance between the servers.
    remote example.com 1194
  5. В этом же файле находим блок #SSL/TLS parms . и проверяем названия файлов ключей пользователя (аналогично тому, как делали это в конфиге сервера): # SSL/TLS parms.
    # See the server config file for more
    # description. Its best to use
    # a separate .crt/.key file pair
    # for each client. A single ca
    # file can be used for all clients.
    ca ca.crt
    cert client1.crt
    key client1.key
  6. Сохраняем файл конфигурации клиента (CTRL+X ).
  7. Теперь необходимо перенести пользовательские файлы client.conf, client1.key, client1.crt, ca.crt на клиентское устройство, с которого вы будете подключаться к VPN-серверу. Сделать это можно через FTP, SCP или просто создав на пользовательском устройстве (через nano на Linux, через блокнот на Windows) файлы с идентичными именами и полностью скопировать в них содержимое исходных документов с удаленного сервера.
    Внимание! Некоторые клиентские приложения OpenVPN (например на Andoid и IOS) работают с расширением файла конфигурации .ovpn , а не.conf. Если вы столкнетесь с этой проблемой - просто переименуйте файл настроек клиента соответствующим образом.
    Размещаем перенесенные файлы в папке, с которой работает используемое вами приложение OpenVPN (см. документацию к программе).
  8. Подключаемся к серверу. После успешного подключения на клиентском устройстве активируется виртуальный сетевой адаптер. Проверить это на Linux можно с помощью команды ifconfig (должен отображаться адаптер TUN ), на ОС с графическим интерсейсом проверить корректность подключения можно непосредственно в программе подключения к VPN.

Внимание! Так как мы еще не настроили туннелировние всего интернет-трафика через VPN-сервер, доступ в интернет на клиентском устройстве после подключения его к виртуальной частной сети перестанет функионировать. Инструкция по маршрутизации интернет-трафика пользователей через VPN сервер представлена ниже.Б.

Туннелирование всего трафика клиентов виртуальной частной сети через VPN-сервер

В данной конфигурации мы настроим маршрутизацию всего трафика пользователей VPN через OpenVPN-сервер с сохранением SSL-шифрования от клиента до сервера.

  1. На сервере откройте файл конфигурации OpenVPN server.conf: nano /etc/openvpn/server.conf
  2. Расскоментируйте представленную ниже строку конфига (удалите символ ; в начале строки): push "redirect-gateway def1 bypass-dhcp"
  3. Сохраните и закройте файл (CTRL+X)
  4. Откройте файл /etc/sysctl.conf:
    nano /etc/sysctl.conf
  5. Расскоментируйте или добавьте представленную ниже строку в открытом файле, чтобы убедиться, что переадресация IPv4-трафика разрешена: net.ipv4.ip_forward=1
  6. Сохраните и закройте файл (CTRL+X)
  7. Введите команду для применения изменений в текущей сессии: echo 1 > /proc/sys/net/ipv4/ip_forward
  8. Последовательно введите следующие команды (одна строка=одна команда), для настройки фаерволла iptables на форвардинг трафика через VPN:







  9. Добавьте такой же список правил iptables в файл /etc/rc.local , чтобы они применялись при каждом запуске системы: nano /etc/rc.local
    Содержание файла:
    #!/bin/sh -e
    #
    # [...]
    #
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
    iptables -A FORWARD -j REJECT
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    iptables -A INPUT -i tun+ -j ACCEPT
    iptables -A FORWARD -i tun+ -j ACCEPT
    iptables -A INPUT -i tap+ -j ACCEPT
    iptables -A FORWARD -i tap+ -j ACCEPT
    exit 0
    Сохраните и закройте документ (CTRL+X)
  10. Приведенные выше параметры активируют переадресацию всего клиентского трафика, кроме DNS-запросов, через VPN-сервер. Для форваринга DNS-запросов вам необходимо установить пакет dnsmasq и внести изменения в файл /etc/openvpn/server.conf
  11. Установим dnsmasq:
    Если вы используете Ubuntu 12.04: apt-get install dnsmasq && dpkg-reconfigure resolvconf Появится мастер настройки. На первом пункте (prepare /etc/resolv.conf for dynamic updates) отвечаем yes , затем no (Append original file to dynamic file?)
    Если вы используете Debian 7: apt-get install dnsmasq resolvconf
  12. Теперь нужно отредактировать dnsmasq : nano /etc/dnsmasq.conf Убедитесь, что указанные ниже параметры раскомментированы или добавлены в файл: listen-address=10.8.0.1
    bind-interfaces
  13. Далее необходимо добавить в файл /etc/network/interfaces информацию об используемых dns-серверах. Возможно, в вашем случае эта информация уже присутствует (как например в случае с серверами, арендованными в сайт), если же нет - добавьте ее следующим образом:
    Откройте файл конфигурации интерфейсов: nano /etc/network/interfaces Добавьте строку dns-nameservers с указанием адресов используемых вами DNS-серверов (например одного сервера вашего интернет провайдера и одного публичного сервера google: 8.8.8.8): # The primary network interface
    auto eth0
    iface eth0 inet dhcp
    dns-nameservers 77.88.8.8 8.8.8.8
  14. При стандартных настройках утилита dnsmasq запускается до старта виртуального tun адаптера OpenVPN. Это приводит к ошибкам и завершению dnsmasq. Для устранения этой проблемы, необходимо добавить в файл /etc/rc.local строку с командой, перезапускающей dnsmasq после инициализации OpenVPN. Разместить эту строку в файле следует после параметров iptables, указанных нами ранее: nano /etc/rc.local
    Содержимое файла:
    ...
    iptables -A FORWARD -i tun+ -j ACCEPT
    iptables -A INPUT -i tap+ -j ACCEPT
    iptables -A FORWARD -i tap+ -j ACCEPT
    /etc/init.d/dnsmasq restart
    exit 0
  15. Последнее, что необходимо сделать - расскоментировать строку, разрешающую клиентам OpenVPN использовать DNS серверы, в файле /etc/openvpn/server.conf :
    nano /etc/openvpn/server.conf Содержимое файла: ....
    push "dhcp-option DNS 10.8.0.1"
  16. Перезапускаем сервер для применения всех настроек и проверки их корректности: reboot

Данная хаутушка является выдержкой многих статей с минимальным описанием шагов и без воды. Подразумевается, что центр сертификации и OpenVPN сервер находятся на одном хосте. К тому же, надоело каждый раз гуглить по данной теме, т.к. подавляющее большинство руководств являются устаревшими, то уходит много времени на поднятие сервиса.

Настройка OpenVPN для доступа клиентов к ресурсам локальной сети

Сервер

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

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

Apt install openvpn adduser --system --no-create-home --disabled-login --group openvpn

Создать конфиг сервера openvpn со следующим содержимым:

Mcedit /etc/openvpn/server.conf port 1194 proto udp dev tun0 #user openvpn #group openvpn dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn-server.crt key /etc/openvpn/keys/vpn-server.key tls-auth /etc/openvpn/keys/ta.key 0 #crl-verify /etc/openvpn/keys/crl.pem script-security 2 cipher AES-256-CBC tls-server comp-lzo mute 10 persist-key persist-tun max-clients 50 keepalive 10 900 client-config-dir /etc/openvpn/ccd ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt server 10.15.0.0 255.255.255.0 ### Эти параметры требуют пояснений. # Пушить (передавать клиенту) свой DNS север push "dhcp-option DNS 192.168.0.1" # Пушить название домена push "dhcp-option DOMAIN mydomain.com" # Пушить маршрут локальной подсети. Для того, чтобы у клиентов был доступ до нее push "route 192.168.0.0 255.255.254.0" ### status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 5

Создать каталоги для логов и хранения IP адресов клиентов:

Mkdir /var/log/openvpn/ mkdir /etc/openvpn/ccd

Центр авторизации и ключи

Перейти в домашний каталог, скачать и распаковать easyrsa 3 версии:

Cd wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip

Перейти в каталог easyrsa3 и объявить для него переменные:

Cd ~/easy-rsa-master/easyrsa3 cp ~/easy-rsa-master/easyrsa3/vars.example ~/easy-rsa-master/easyrsa3/vars

Инициализировать PKI (Public Key Infrastructure — Инфраструктура открытых ключей):

./easyrsa init-pki

Создать корневой сертификат. Обязательно ввести сложный пароль и Common Name сервера, например my vpn server:

./easyrsa build-ca

Создать ключи Диффи-Хелмана:

./easyrsa gen-dh

Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет незапаролен (параметр nopass), иначе при каждом старте OpenVPN будет запрашивать этот пароль:

./easyrsa gen-req vpn-server nopass

Создать сам сертификат сервера OVPN:

./easyrsa sign-req server vpn-server

Скопировать полученные ключи в рабочий каталог openvpn:

Mkdir -p /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/private/vpn-server.key /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn/keys

Создать «HMAC firewall» для защиты от DoS аттак и флуда UDP порта:

Cd /etc/openvpn/keys/ openvpn --genkey --secret ta.key

Запустить openvpn:

/etc/init.d/openvpn start

Клиент

Ключи

Создание запроса запароленного ключа для клиента (потребуется вводить при каждом подключении) с именем User:

Cd ~/easy-rsa-master/easyrsa3 ./easyrsa gen-req User

./easyrsa gen-req User nopass

Создание ключа пользователя (по дефолту из vars сроком на 10 лет):

./easyrsa sign-req client User

Или с ограничением действия сертификата в 90 дней (после истечения срока можно только перевыпустить):

./easyrsa sign-req client User -days 90

Клиенту передать эти файлы:

~/easy-rsa-master/easyrsa3/pki/issued/User.crt ~/easy-rsa-master/easyrsa3/pki/private/User.key ~/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/keys/ta.key

Конфиг

client dev tun proto udp remote xxx.xxx.xxx.xxx 1194 cipher AES-256-CBC tls-client ca "ca.crt" tls-auth "ta.key" 1 cert "User.crt" key "User.key" remote-cert-tls server comp-lzo tun-mtu 1500 mssfix 1450 verb 3 nobind resolv-retry infinite

Для удобства все пять клиентских файлов можно

Отзыв сертификатов

Генерация файла отозванных ключей:

Cd ~/easy-rsa-master/easyrsa3 ./easyrsa gen-crl

Ln -s ~/easy-rsa-master/easyrsa3/pki/crl.pem /etc/openvpn/keys

В /etc/openvpn/server.conf добавить строку

Crl-verify /etc/openvpn/keys/crl.pem

Отзыв сертификата пользователя User:

./easyrsa revoke User

Каждый раз при отзыве сертификата необходимо обновлять crl.pem , чтобы внести в него изменения:

./easyrsa gen-crl

Примечание: одноименный файл ключа не может быть создан пока не отозван старый. При попытке создать сертификат с уже имеющимся именем выдаст ошибку:

Failed to update database Easy-RSA error: signing failed (openssl output above may have more detail)

Минимальная настройка Iptables для доступа OpenVPN клиентов к локальной сети

# Включить форвард в ядре echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешить входящие соединения на порт OVPN iptables -A INPUT -p UDP --dport 1194 -j ACCEPT # Разрешить форвард между подсетью OVPN и локальной # При чем, ставить их в начале цепочки, если правил много iptables -A FORWARD -s 10.15.0.0/24 -d 192.168.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.15.0.0/24 -s 192.168.0.0/24 -j ACCEPT

Настройка OpenVPN для выхода в интернет

Наткнулся на тред , поржал и решил дополнить заметку. Если OpenVPN нужен для выхода в интернет — надо сделать, чтобы OpenVPN был шлюзом по умолчанию (default gateway) и подправить правила iptables.
Собственно, конфиг для сервера:

Port 1194 proto udp dev tun0 dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn-server.crt key /etc/openvpn/keys/vpn-server.key tls-auth /etc/openvpn/keys/ta.key 0 crl-verify /etc/openvpn/keys/crl.pem script-security 2 cipher AES-256-CBC tls-server comp-lzo mute 10 persist-key persist-tun max-clients 50 keepalive 10 900 client-config-dir /etc/openvpn/ccd ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt server 10.15.0.0 255.255.255.0 push "redirect-gateway def1" status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 5

Конфиг для клиента не будет отличаться от приведенного выше.

Минимальная настройка Iptables для выхода OpenVPN клиентов в интернет

Правила iptables:

# Включить форвард в ядре echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешить входящие соединения на порт OVPN iptables -A INPUT -p UDP --dport 1194 -j ACCEPT # Разрешить ходить транзитным пакетам для подсети OpenVPN iptables -A FORWARD -s 10.15.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.15.0.0/24 -j ACCEPT # x.x.x.x - внешний IP сервера, если он статический iptables -t nat -A POSTROUTING -s 10.15.0.0/24 -j SNAT --to-source x.x.x.x # Если внешний IP сервера динамический, то вместо предыдущего правила использовать это # iptables -t nat -A POSTROUTING -s 10.15.0.0/24 -j MASQUERADE

Некоторые замечания

Для исключения возможности mitm атаки, ошибка которого так выглядит в логах клиента:

WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.

Служит параметр remote-cert-tls server , который уже присутствует в конфиге клиента.

Список валидных и отозванных сертификатов

Список валидных и отозванных сертификатов можно посмотреть в файле ~/easy-rsa-master/easyrsa3/pki/index.txt. Начало строки оисания каждого сертификата начинается с букв V или R , что значит Valid и Revoked, например:

V 241019110411Z 01 unknown /CN=vpn-server R 241019110842Z 141202085241Z 02 unknown /CN=User1 R 241020105823Z 141201103442Z 03 unknown /CN=test R 150301095139Z 141202085814Z 04 unknown /CN=User2 V 141203091049Z 05 unknown /CN=User3

Как видно, первый и пятый сертификаты валидны, 2-4 отозваны.

Если клиент на Windows

Поставить OpenVPN GUI, скачав отсюда . Скопировать клиентские ключи в C:\Program Files\OpenVPN\config\ . Скопировать конфиг клиента и вставить в файл client.ovpn , положить туда же. Всего в этом каталоге должно получиться пять файлов — User.crt, User.key, ca.crt, ta.key, client.ovpn .
Обязательно запустить OpenVPN GUI от имени администратора , иначе в сиситеме не поднимутся маршруты, и произвести подключение двойным кликом по иконке в трее (такая область около часов, обычно в правом нижнем углу).

Июнь 19, 2018 11:32 дп 2 171 views | Комментариев нет

1: Установка OpenVPN

Обновите индекс пакетов:

Пакет OpenVPN доступен в репозиториях по умолчанию, поэтому для установки можно использовать apt. Также вам понадобится пакет easy-rsa, который поможет создать внутренний центр сертификации (ЦС или CA) для VPN.

apt-get install openvpn easy-rsa

2: Настройка OpenVPN

Образец конфигурационного файла VPN нужно извлечь из /etc/openvpn и добавить его в свою установку. Для этого используйте команду:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

Затем откройте server.conf в текстовом редакторе:

nano /etc/openvpn/server.conf

В файл нужно внести пару изменений.

  • Защитить сервер более высоким уровнем шифрования
  • Перенаправить веб-трафик в пункт назначения
  • Предотвратить утечку DNS-запросов за пределы VPN-соединения
  • Установить права доступа.

Для начала увеличьте длину RSA-ключа вдвое. Для этого найдите строку:

# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

И измените ее значение на dh2048.pem:

dh dh2048.pem

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

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

В итоге строка должна выглядеть так:

push "redirect-gateway def1 bypass-dhcp"

Также нужно позволить серверу использовать OpenDNS для разрешения DNS, если это возможно. Это поможет предотвратить утечку DNS-запросов за пределы VPN-соединения.

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

Раскомментируйте строки push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.220.220».

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Теперь определите права доступа в server.conf:

# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

Раскомментируйте обе строки:

user nobody
group nogroup

По умолчанию OpenVPN работает как пользователь root и, таким образом, имеет полный корневой доступ к системе. OpenVPN нужно ограничить в правах, и для этого нужно использовать nobody и nogroup. Это непривилегированный пользователь, не имеющий возможности входа в систему по умолчанию, часто зарезервированный для запуска ненадежных приложений.

Сохраните и закройте файл.

3: Маршрутизация пакетов

Это параметр sysctl, который сообщает ядру сервера пересылать трафик с клиентских устройств в Интернет. В противном случае трафик остановится на сервере. Включить пересылку пакетов можно с помощью этой команды:

echo 1 > /proc/sys/net/ipv4/ip_forward

Сделайте это значение постоянным, чтобы оно восстанавливалось после перезагрузки:

nano /etc/sysctl.conf

Найдите строку net.ipv4.ip_forward.


#net.ipv4.ip_forward=1

Раскомментируйте ее:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Сохраните и закройте файл.

4: Настройка брандмауэра ufw

ufw является интерфейсом iptables. Настройка ufw довольно проста. Вам нужно добавить несколько правил и внести пару изменений в конфигурации, а затем включить его.

Установите ufw:

apt-get install ufw

Включите поддержку SSH:

В мануале OpenVPN работает по UDP, откройте этот трафик по порту 1194.

ufw allow 1194/udp

Необходимо также настроить политику маршрутизации UFW. Мы сделаем это в главном файле конфигурации UFW.

nano /etc/default/ufw

Найдите DEFAULT_FORWARD_POLICY=»DROP». Значение в кавычках замените на ACCEPT.

DEFAULT_FORWARD_POLICY="ACCEPT"

Сохраните и закройте файл.

Затем добавьте дополнительные правила ufw для преобразования сетевых адресов и IP-маскарадинга подключенных клиентов.

nano /etc/ufw/before.rules

Начало файла before.rules нужно отредактировать так, как показано ниже. Необходимо добавить выделенный красным раздел:

# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# START OPENVPN RULES

# NAT table rules

*nat

:POSTROUTING ACCEPT


# Allow traffic from OpenVPN client to eth0


-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE


COMMIT

# END OPENVPN RULES
# Don"t delete these required lines, otherwise there will be errors
*filter

Сохраните и закройте файл.

Теперь можно включить брандмауэр:

ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Выберите y:

Firewall is active and enabled on system startup

Теперь проверьте правила и состояние брандмауэра:

ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
1194/udp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
1194/udp (v6) ALLOW Anywhere (v6)

5: Создание центра сертификации

Для шифрования трафика OpenVPN использует сертификаты.

В этом разделе мы создадим ЦС в два этапа: первый – установка переменных, второй – генерирование ЦС.

OpenVPN поддерживает двунаправленную аутентификацию на основе сертификатов, что означает, что клиент должен аутентифицировать сертификат сервера, а сервер должен аутентифицировать сертификат клиента для установления взаимного доверия.

Скопируйте сценарии Easy-RSA:

cp -r /usr/share/easy-rsa/ /etc/openvpn

Создайте каталог для ключей:

mkdir /etc/openvpn/easy-rsa/keys

Easy-RSA предоставляет файл переменных, который можно редактировать, чтобы создавать сертификаты с заранее определенными значениями по умолчанию. Эта информация копируется в сертификаты и ключи и поможет идентифицировать ключи позже.

nano /etc/openvpn/easy-rsa/vars

Значения, выделенные красным, нужно заменить своими данными:

export KEY_COUNTRY="US "
export KEY_PROVINCE="TX "
export KEY_CITY="Dallas "
export KEY_ORG="My Company Name "
export KEY_EMAIL="[email protected] "
export KEY_OU="MYOrganizationalUnit "

В том же файле vars отредактируйте строку, приведенную ниже. Для простоты мы в качестве имени рекомендуется использовать server. Если вы хотите использовать другое имя, вам необходимо будет обновить файлы конфигурации OpenVPN, ссылающиеся на server.key и server.crt. Найдите:

# X509 Subject Field
export KEY_NAME="EasyRSA "

И измените ее значение:

# X509 Subject Field
export KEY_NAME="server "

Сохраните и закройте файл.

Теперь нужно сгенерировать ключ Диффи-Хеллмана; это может занять несколько минут. Флаг -out указывает, куда сохранять новые параметры.

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Перейдите в каталог:

cd /etc/openvpn/easy-rsa

Инициализируйте PKI (инфраструктуру открытого ключа). Обратите внимание на точку (.) и пробел перед./varscommand. Это определяет текущий рабочий каталог.

Команда вернет такой результат. Поскольку в каталоге keys пока ничего нет, это нормальный вывод.

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

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

Эта последняя команда создает центр сертификации (CA), вызывая интерактивную команду OpenSSL. На выходе будет предложено подтвердить переменные, которые ранее вы определили в файле Easy-RSA (название страны, организация и т. д.).

Чтобы принять значения по умолчанию, просто нажмите Enter.

ЦС готов.

6: Генерирование ключей и сертификатов сервера

Оставаясь в каталоге /etc/openvpn/easy-rsa, теперь введите команду для создания ключа сервера. Значение server – это переменная export KEY_NAME, которую вы установили в файле Vars Easy-RSA.

./build-key-server server

Команда сгенерирует почти такой же вывод, как при запуске./build-ca, и вы сможете снова нажать Enter для подтверждения значений по умолчанию. Однако на этот раз есть еще две строки:



A challenge password :
An optional company name :

Обе строки оставьте пустыми, просто нажав Enter.

В конце появится еще две строки, в которых нужно ответить y:

Sign the certificate?

Последняя строка выведет:


Data Base Updated

7: Перемещение ключей и сертификатов сервера

OpenVPN будет искать ЦС, сертификат и ключ сервера в /etc/openvpn. Скопируйте их в правильное расположение.

cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

Вы можете убедиться, что операция прошла успешно:

Вы должны увидеть сертификат и файлы ключей сервера.

Теперь сервер OpenVPN готов к запуску. Запустите его и проверьте состояние:

service openvpn start
service openvpn status

Последняя команда ответит:

* openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled)
Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago
Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2505 (code=exited, status=0/SUCCESS)

Сервер OpenVPN работает!

Если же команда сообщает, что VPN не работает, проверьте /var/log/syslog:

Options error: --key fails with "server.key": No such file or directory

Эта ошибка говорит, что server.key был скопирован в /etc/openvpn некорректно. Скопируйте его снова и попробуйте запустить сервер.

8: Генерирование сертификатов и ключей клиента

Ранее вы установили и настроили сервер OpenVPN, создали центр сертификации и сертификат и ключ сервера. На этом этапе нужно использовать CA сервера для создания сертификатов и ключей для каждого клиентского устройства, которое будет подключаться к VPN.

Создание ключей и сертификатов

Примечание : По умолчанию OpenVPN не поддерживает одновременных клиентских подключений к серверу, созданных с помощью одного сертификата и ключа (см. duplicate-cn в /etc/openvpn/server.conf).

Чтобы создать индивидуальные учетные данные для каждого устройства, которое вы собираетесь подключить к VPN, вы должны повторить этот раздел для каждого из них (но при этом нужно менять имя клиента, например client2 или iphone2). При наличии индивидуальных учетных данных устройства можно впоследствии деактивировать в индивидуальном порядке. В этом руководстве в примерах используется имя клиента client1.

Соберите ключ для клиента client1 в каталоге /etc/openvpn/easy-rsa.

./build-key client1

Вам будет снова предложено изменить или подтвердить переменные и эти две строки, которые должны быть пустыми. Нажмите Enter, чтобы принять значения по умолчанию.

Please enter the following "extra" attributes
to be sent with your certificate request
A challenge password :
An optional company name :

Как и раньше, следующие две строки в конце процесса сборки требуют ответа y:

Sign the certificate?
1 out of 1 certificate requests certified, commit?

Если сборка ключей была успешной, результат снова будет выглядеть так:

Write out database with 1 new entries
Data Base Updated

Пример конфигурационного файла клиента нужно скопировать в каталог ключей Easy-RSA и использовать его в качестве шаблона, который будет загружен на клиентские устройства для редактирования. В процессе копирования нужно изменить имя файла с client.conf на client.ovpn, потому что клиенты должны использовать расширение.ovpn.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf

Повторите этот раздел для всех своих клиентов, меняя имя клиента.

Примечание: Имя дубликата client.ovpn не обязательно должно быть связано с клиентским устройством. Клиентское приложение OpenVPN будет использовать имя файла в качестве идентификатора для самого VPN-соединения. Скопируйте client.ovpn с таким названием, которое будет использовать VPN в вашей операционной системе. Например: work.ovpn будет определяться как рабочая сеть, school.ovpn – как школьная и т.д.

Также нужно изменить каждый файл клиента и указать IP-адрес сервера OpenVPN, чтобы клиент знал, к чему подключаться. Откройте client.ovpn, используя nano или другой текстовый редактор.

nano /etc/openvpn/easy-rsa/keys/client.ovpn

Укажите вместо my-server-1 IP-адрес VPN в строке remote.

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 1194

Затем найдите этот раздел и раскомментируйте user nobody and group nogroup, как это было сделано в server.conf. Это не касается ОС Windows.

# Downgrade privileges after initialization (non-Windows only)
user nobody
group no group

Передача ключей и сертификатов на клиентские устройства

Напомним, что клиентские сертификаты и ключи хранятся на сервере OpenVPN в каталоге /etc/openvpn/easy-rsa/keys.

Теперь необходимо перенести файлы сертификата клиента, ключа и профиля в папку на этом клиентском устройстве.

Например, в данном случае файлы должны располагаться в etc/openvpn/easy-rsa/keys/client1.crt и /etc/openvpn/easy-rsa/keys/client1.key

Файлы ca.crt и client.ovpn одинаковы для всех клиентов. Загрузите эти два файла; обратите внимание, что файл ca.crt находится в другом каталоге.

  • /etc/openvpn/easy-rsa/keys/client.ovpn
  • /etc/openvpn/ca.crt

Выбор приложения для передачи зависит от вас и от операционной системы устройства, но рекомендуется выбирать приложения с поддержкой SFTP (протокол передачи файлов SSH) или SCP (Secure Copy). Это передаст файлы клиента по зашифрованному соединению.

Ниже приведен пример команды SCP. Она помещает файл client1.key в каталог Downloads на локальном компьютере.

scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/

Также вы можете использовать следующие приложения и мануалы:

Затем убедитесь, что на клиентском устройстве есть эти файлы:

  • client1.crt
  • client1.key
  • client.ovpn
  • ca.crt

9: Создание единого профиля OpenVPN для клиентов

Существует несколько способов управления клиентскими файлами, но самый простой – это использовать единый профиль. Профиль создается путем изменения файла шаблона client.ovpn и добавления центра сертификации сервера, сертификата клиента и его ключа. После этого в приложение OpenVPN клиента необходимо импортировать только профиль client.ovpn.

В приведенном ниже разделе нужно закомментировать три строки, чтобы включить сертификат и ключ непосредственно в файл client.ovpn. Это должно выглядеть следующим образом:

# SSL/TLS parms.
# . . .
;ca ca.crt
;cert client.crt
;key client.key

Сохраните и закройте файл client.ovpn.

Добавить сертификаты можно с помощью кода. Сначала добавьте ЦС:

echo "" >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo "
" >> /etc/openvpn/easy-rsa/keys/client.ovpn

Затем добавьте сертификат:

echo "" >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo "
" >> /etc/openvpn/easy-rsa/keys/client.ovpn

В конце добавьте ключ:

echo "" >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo "
" >> /etc/openvpn/easy-rsa/keys/client.ovpn

Теперь у вас есть единый профиль, который можно скопировать на клиентское устройство.

10: Установка клиентского профиля

На разных платформах есть более удобные приложения для подключения к серверу OpenVPN. Инструкции для установки клиентов на разных платформах вы найдете в разделе 5 мануала .

Заключение

Теперь у вас есть полностью рабочая виртуальная частная сеть на сервере OpenVPN. Вы можете просматривать веб-страницы и загружать контент, не беспокоясь о злоумышленниках, отслеживающих вашу деятельность.

После того, как вы установили успешное соединение с клиентом, вы можете убедиться, что трафик маршрутизируется через VPN,

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="[email protected]"

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.

# ./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 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 или доменное имя вашего сервера. Затем порт, который мы изменили ранее. В итоге строка может выглядеть так:

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».

Указываем:

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

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

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

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

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

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

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

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

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

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

# tail -f /var/log/syslog

Вконтакте