Настройка OpenVPN в Ubuntu/Debian
Configuring OpenVPN on Ubuntu
источник https://serverspace.io/support/help/configuring-openvpn-on-ubuntu/
OpenVPN - это открытая реализация одной из технологий VPN, предназначенная для организации защищенных виртуальных частных сетей между географически удаленными локальными сетями, а также отдельными клиентами. Безопасность туннеля обеспечивается шифрованием с использованием OpenSSL.
Как работает OpenVPN?
По завершении настройки сервера и его запуска он перейдет в режим ожидания приема и перенаправления внешних защищенных SSL-соединений на виртуальный сетевой адаптер (tun / tap).
При желании маршрутизацию сервера можно настроить так, чтобы интернет-трафик клиента проходил через сервер и становился трафиком сервера. В этом случае OpenVPN будет выполнять прокси-трафик.
Что требуется от операционной системы?
Перед установкой OpenVPN необходимо убедиться в правильности основных параметров.
У сервера есть как минимум один «белый» статический IP-адрес. Те. Сервер должен быть доступен из Интернета. Если адрес динамический, но сервер остается доступным из глобальной сети, используйте службы DynDNS.
Разрешено скачивать и устанавливать пакеты из официальных репозиториев. Чтобы проверить, запустите cat /tc/apt/sources.list. Строки с инструкциями из репозиториев необходимо раскомментировать (в начале строки не должно быть знака «#»).
Необходимо правильно указать сетевые параметры - имя хоста, параметры DNS-серверов.
Приступаем к установке.
Все шаги по установке будут выполняться пользователем root.
Обновление информации о репозитории:
sudo apt-get update
Установите текущие обновления системы и установленные программы:
sudo apt-get upgrade
Установите OpenVPN:
sudo apt-get install openvpn
Важно. В базовых репозиториях часто отсутствует последняя версия пакета. Разработчики OpenVPN ведут свой репозиторий, как его настроить, можно узнать на официальном сайте.
Таким же образом установите пакет easy-rsa:
sudo apt-get install easy-rsa
Действия после установки
Размещаем скрипты easy-rsa:
cd /etc/openvpn/ && make-cadir easy-rsa
Готовим открытые ключи (PKI - Public Key Infrastructure):
Заходим в / etc / openvpn / easy-rsa directory:
cd /etc/openvpn/easy-rsa
Создание символической ссылки на файл конфигурации openssl:
ln -s openssl-1.0.0.cnf openssl.cnf
Инициализируем скрипт vars:
source ./vars
Система сообщит: ПРИМЕЧАНИЕ. Если вы запустите ./clean-all, я сделаю rm -rf для / etc / openvpn / easy-rsa / keys.
Осуществляем ./clean-all
Чтобы создать центр сертификации, запустите сценарий:
./build-ca
В процессе работы программа задаст несколько вопросов. На них следует отвечать латинскими буквами. Если вы не заполните какое-либо поле, программа подставит значения по умолчанию, обычно указанные в скобках.
Создайте ключ сервера
Чтобы создать ключ сервера, выполните команду:
./build-key-server server
Следует отметить, что процесс аналогичен генерации сертификата центра сертификации, однако перед подписанием сертификата программа задаст 2 уточняющих вопроса. Если все правильно, ответьте «у».
Генерация клиентских ключей
Аналогично генерации серверных ключей создаются и клиентские ключи:
./build-key client1
Следует отметить, что созданный client1.key не имеет парольной и криптографической защиты. Это может привести к тому, что любой пользователь, завладевший файлом, может попытаться подключиться к серверу. Если такая угроза существует, лучше сгенерировать ключи другим скриптом:
./build-key-pass client2
Сценарий запросит кодовую фразу в самом начале. Кроме того, процесс ничем не отличается от генерации ключей сервера и простого клиента.
Помните, что имена ключей должны быть уникальными. Один пользователь - один ключ с уникальным именем.
Бывает, что в процессе работы сервера, по прошествии некоторого времени, необходимо создать один или несколько сертификатов. Для этого вам нужно будет повторно инициализировать скрипт vars и только после этого запустить процесс генерации ключа:
cd /etc/openvpn/easy-rsa
source ./vars
./build-key client3
Благодаря протоколу Диффи-Хеллмана две или несколько сторон могут получить один секретный ключ, что позволит построить безопасный канал связи. Ключи генерируются командой:
./build-dh
Результат будет примерно таким.
Когда программа будет завершена, файл dh2048.pem появится в каталоге / etc / openvpn / easy-rsa / keys /
Перемещение сертификатов и ключей
Сервер
Ключи и сертификаты созданы. Пришло время раздать их пользователям и скопировать серверные ключи в соответствующие каталоги на сервере.
Заходим в каталог с ключами:
cd /etc/openvpn/easy-rsa/keys
Копируем только необходимые серверу файлы:
cp ca.crt ca.key dh2048.pem server.crt server.key /etc/openvpn
Важно понимать, что указанные выше файлы являются основой работы и безопасности VPN-сервера. Потеря или замена этих файлов может иметь крайне негативные последствия. Важно хранить их в надежном месте и не передавать по открытым каналам связи.
Клиенты
Клиенту потребуется всего 3 файла ca.crt, client1.crt, client1.key. Каждому клиенту нужно давать только свои ключи. Эти файлы могут быть помещены в каталог / etc / openvpn на клиентском компьютере, если он работает под управлением ОС Linux.
В Windows они должны быть помещены в каталог пользователя.
Настройка сервера и клиента
Сервер
Большинство установленных программ в Linux имеют так называемые файлы примеров. Эти файлы содержат примеры конфигурации и их объяснения. OpenVPN не стал исключением. Распакуйте файл конфигурации сервера в каталог / etc / openvpn:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Сервер готов к работе с полученным файлом. Он настроен с возможностью туннелирования, но не может проксировать, то есть отправлять клиентский трафик от своего имени. Почини это.
Сначала проверьте, какие файлы находятся в каталоге / etc / openvpn:
ls /etc/openvpn
Откройте файл конфигурации:
nano /etc/openvpn/server.conf
И проверяем соответствие прописанных в конфигурации файлов файлам в каталоге. Интересные строки после »корневого сертификата SSL / TLS (ca), сертификата (cert) и закрытого ключа (ключа)».
Если названия отличаются от существующих, необходимо внести необходимые исправления. Выйдите из редактора, нажав Ctrl + X.
Запускаем сервер:
/etc/init.d/openvpn start
Проверяем результат запуска:
/etc/init.d/openvpn status
Настройки клиента.
Предполагается, что пакет OpenVPN уже установлен на стороне клиента.
Скопируйте файл настроек клиента в домашний каталог пользователя:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /root
Скопируйте сгенерированные ключи - client1.key, client1.crt, ca.crt:
cd /etc/openvpn/easy-rsa/keys
cp client1.key client1.crt ca.crt /root
Редактируем файл конфигурации клиента:
nano /root/client.conf
Находим закомментированные строки («# Имя хоста / IP и порт сервера» )“# The hostname / IP and port of the server”. Для удаленного параметра измените my-server-1 на IP-адрес сервера или его доменное имя.
В том же файле ниже мы находим блок «# SSL / TLS parms.». Редактирование названий ключей.
Выходим из редактирования комбинацией Ctrl + X. На вопрос о сохранении изменений отвечаем «Y». Имя файла остается без изменений.
Перенесите файлы client1.key, client1.crt, ca.crt и client.conf на клиентский компьютер, с которого будет происходить подключение к серверу OpenVPN.
Важный! Некоторые клиентские реализации OpenVPN работают только с файлами * .ovpn. В таких случаях достаточно изменить расширение (переименовать) файл с client.conf на client.ovpn.
Подключаемся к серверу командой:
openvpn openvpn.conf
Следует отметить, что проксирование до сих пор не настроено. В то же время, когда клиентская машина подключена к серверу OpenVPN, доступ в Интернет прекращается. Это связано с тем, что созданный адаптер TUN, а вместо него сам сервер является шлюзом по умолчанию.
Настройка маршрутизации.
На сервере отредактируйте файл server.conf:
nano /etc/openvpn/server.conf
Находим в файле следующую строку и удаляем “;” символ перед ним, таким образом раскомментируя его:
push "redirect-gateway def1 bypass-dhcp"
Сохраните и закройте редактор.
Редактируем файл / etc / sysctl:
nano /etc/sysctl.conf
В конце файла добавьте следующую строку:
net.ipv4.ip_forward=1
Это позволит системе пересылать трафик между интерфейсами, но изменения вступят в силу только после перезагрузки. Сохраните файл и закройте редактор.
Разрешить пересылку пакетов без перезагрузки сервера:
echo 1 > /proc/sys/net/ipv4/ip_forward
Настройте NAT в iptables. Вводим команды по очереди:
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
Вы также можете просто ввести их в файл /etc/rc.local до строки «exit 0» или настроить брандмауэр.
Сервер готов к использованию. Однако задача состоит в том, чтобы весь трафик проксировать, и поэтому необходимо настроить пересылку DNS-запросов. Настроить.
Установить dnsmasq
Если установка выполняется в ОС Ubuntu:
sudo apt-get install dnsmasq
Хотя в большинстве современных версий ОС Ubuntu dnsmasq уже предустановлен, в более старых версиях вы должны сделать это:
sudo apt-get install dnsmasq && dpkg-reconfigure resolvconf
Может открыться диалоговое окно мастера установки. В нем будет 2 вопроса. В первом случае на вопрос «подготовить /etc/resolv.conf для динамических обновлений» ответ будет «Да», а в следующем: «Добавить исходный файл в динамический файл?» ответьте «Нет».
Для ОС Debian 7:
sudo apt-get install dnsmasq resolvconf
Отредактируйте файл настроек dnsmasq:
nano /etc/dnsmasq.conf
Добавьте следующие параметры:
listen-address=10.8.0.1
bind-interfaces
Сохраните файл и закройте редактор.
Редактирование файла сетевых настроек:
nano /etc/network/interfaces
Необходимо указать адрес DNS-серверов в соответствующих разделах настроек адаптера:
dns-nameservers 8.8.8.8 8.8.4.4
Возможно, это действие уже было выполнено. Повторять это не нужно.
Учитывая особенность запуска и последующей работы dnsmasq - возможность сбоя перед инициализацией виртуального tun-адаптера, добавьте в файл rc.local перед «exit 0» следующую строку:
/etc/init.d/dnsmasq restart
Теперь позвольте клиентам сервера OpenVPN использовать DNS. В редакторе nano раскомментируйте строку:
push "dhcp-option DNS 10.8.0.1"
Исправляем изменения в файле.
Перезагрузите сервер:
reboot
Проверка работы
Мы переподключаемся к серверу. Мы пытаемся открыть веб-сайт для проверки IP-адреса. Результатом должен быть IP-адрес сервера.