Вступление
OpenVPN - это серверное / клиентское приложение с открытым исходным кодом виртуальной частной сети (VPN), которое позволяет безопасно подключаться к виртуальной сети (аналогично локальной сети).
В этом руководстве объясняется, как установить и настроить сервер OpenVPN на компьютере FreeBSD 10.1 с IPv4 NAT и маршрутизацией. Включает краткие пояснения различных параметров конфигурации.
К концу этого учебного курса у вас будет собственный сервер OpenVPN, и у вас будет готовый для загрузки файл конфигурации клиента для подключения к этой сети.
Предпосылки
-
Капля FreeBSD 10.1. Размер капли зависит от того, сколько клиентов вы собираетесь подключить к VPN; 519 МБ хорошо для нескольких клиентов
-
Корневой доступ. sudo предустановлен на DigitalOcean, так что делать нечего
Этот учебник требует root-доступа. В DigitalOcean зайдите на сервер как пользователь по умолчанию * freebsd *, а затем получите доступ к оболочке * root *:
sudo tcsh
Шаг 1 - Установка OpenVPN
Установить OpenVPN с системой + pkg +
довольно просто. Просто запустите эти команды, чтобы обновить списки пакетов и установить программное обеспечение VPN:
pkg update
pkg install openvpn
Это также должно установить пакет + easy-rsa +
, который будет использоваться для генерации пар ключей SSL.
Шаг 2 - Настройка сервера OpenVPN
Для этого урока мы будем основывать наш файл конфигурации на образце, предоставленном OpenVPN. Мы создадим папку конфигурации для OpenVPN:
mkdir /usr/local/etc/openvpn
Скопируйте пример файла + server.conf +
в новый каталог.
cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf
Установите + nano +
или ваш любимый текстовый редактор:
pkg install nano
Откройте файл конфигурации для редактирования:
nano /usr/local/etc/openvpn/server.conf
_
* Примечание: * Формат файла конфигурации OpenVPN ставит комментарии перед точками с запятой (+; +
) или хешами (+ # +
). В этом примере точки с запятой используются для комментирования (отключения) параметров конфигурации, а хэши используются для комментариев.
_
Если вы знаете, какие параметры конфигурации вы хотите изменить, вы можете сделать это на этом этапе.
-
* Необязательно *
+ порт +
: порт по умолчанию - 1194, но вы можете изменить его на что угодно. -
* Необязательно *
+ proto +
: выберите либо+ tcp +
, либо+ udp +
; по умолчанию хорошо -
+ user
и` + group`: установите их в+ nobody
, раскомментировав строки. Это заставит OpenVPN работать с меньшими привилегиями, для безопасности
user nobody
group nobody
_ * Примечание: * Каждая конфигурация может работать только с одним портом и протоколом одновременно. _
Наконец, не забудьте сохранить ваши изменения.
Шаг 3 - Генерация сертификатов и ключей сервера
+ easy-rsa +
упрощает создание сертификатов и ключей.
Сначала скопируйте программу в каталог конфигурации, так как вы будете изменять значения.
cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
Откройте файл + vars +
для редактирования:
nano /usr/local/etc/openvpn/easy-rsa/vars
Измените размер ключа, изменив эту строку:
export KEY_SIZE=
В наши дни стандартом являются 2048-битные ключи, хотя вы также можете использовать 4096-битные, что более безопасно, но замедляет согласование.
Если вам нравится, вы также можете установить сертификат и значения ключей по умолчанию в этом файле, чтобы вам не пришлось вводить их позже.
Поскольку используемая нами оболочка - + tcsh in
, строки` + export` необходимо заменить на + setenv
. Это делается с помощью + used
перед` + source`. Перейдите в наш каталог + easy-rsa +
(обязательно).
cd /usr/local/etc/openvpn/easy-rsa/
Заменить строки:
cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin
Еще из нашего каталога + / usr / local / etc / openvpn / easy-rsa / +
сначала очистите каталог, а затем создайте центр сертификации (CA).
./clean-all
./build-ca
Вам будет предложено установить параметры CA. Заполните их вашими данными:
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [changeme]:
Name [changeme]:
Email Address [[email protected]]:
Теперь создайте ключ сервера:
./build-key-server server
Опять же, установите параметры. Вам не нужен пароль или необязательное название компании.
Введите + y +
, чтобы подписать и зафиксировать ключ:
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:
Email Address [[email protected]]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Certificate is to be certified until Feb 5 14:40:15 2025 GMT (3650 days)
Sign the certificate? [y/n]:
1 out of 1 certificate requests certified, commit? [y/n]
Write out database with 1 new entries
Data Base Updated
Наконец ключ Диффи-Хеллмана должен быть сгенерирован. Это может занять некоторое время в зависимости от размера ключа:
./build-dh
Теперь, когда все ключи и сертификаты сервера сгенерированы, они должны быть скопированы в наш каталог конфигурации OpenVPN.
cd /usr/local/etc/openvpn/easy-rsa/keys/
cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/
Вы закончили с сертификатами сервера! Теперь перейдем к клиентскому сертификату.
Шаг 4 - Генерация клиентских сертификатов
Каждому клиенту также потребуется сертификат и ключ для аутентификации и подключения к VPN. Убедитесь, что вы находитесь в каталоге + / usr / local / etc / openvpn / easy-rsa / +
.
cd /usr/local/etc/openvpn/easy-rsa/
Выполните следующую команду, где ++
- это имя, которое вы хотите использовать для данного конкретного сертификата клиента.
./build-key
Вам будет предложено ввести название страны, название города и т. Д. снова. Процесс такой же, как и для генерации ключа сервера. Это предназначено, чтобы быть информацией клиента, но ничто из этого действительно не имеет значения.
Вам не нужен пароль или название компании. Введите + y +
, чтобы подписать и зафиксировать сертификат.
_ * Примечание: * Рекомендуется использовать разные сертификаты для каждого клиента, и это по умолчанию применяется OpenVPN. Однако, если требуется, это можно отключить в конфигурации OpenVPN (объяснено позже). _
Если вы использовали размер ключа, отличный от + 2048 +
, вам нужно изменить конфигурацию OpenVPN, чтобы она соответствовала имени файла размера ключа, который вы использовали. Если вы не помните, вы можете просмотреть правильное имя файла + dh +
с помощью этой команды:
ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem
Отредактируйте + server.conf +
:
nano /usr/local/etc/openvpn/server.conf
Замените строку + dh dh2048.pem +
на:
dh dh.pem
Если вы выполнили нашу рекомендацию для 2048-битного ключа ранее, вам не нужно вносить никаких изменений.
Повторите этот раздел для каждого отдельного сертификата клиента, который вы хотите создать.
Шаг 5 - Настройка IPv4 NAT Routing
FreeBSD включает в себя + natd +
как часть брандмауэра + ipfw +
, который допускает маршрутизацию NAT и может использоваться для OpenVPN. Чтобы использовать это, отредактируйте + / etc / rc.conf +
:
nano /etc/rc.conf
Добавьте это содержимое внизу:
firewall_enable="YES"
firewall_type="open"
gateway_enable="YES"
natd_enable="YES"
natd_interface="vtnet0"
natd_flags="-dynamic -m"
-
+ firewall_enable +
включает брандмауэр+ ipfw +
, необходимый для+ natd +
-
+ firewall_type =" open "+
разрешает брандмауэру разрешать трафик по умолчанию -
+ gateway_enable +
устанавливает+ net.inet.ip.forwarding +
в+ 1 +
, что разрешает маршрутизацию IPv4 в системе -
+ natd_enable +
включает фактический маршрутизатор NAT -
+ natd_interface +
- внешний интерфейс к Интернету;+ vtnet0 +
используется для DigitalOcean -
+ natd_flags +
делает NAT динамическим, а+ -m +
сохраняет номера портов
Теперь перезагрузите сервер, чтобы загрузить + ipfw +
и + natd +
:
reboot
Войдите снова. После перезагрузки не забудьте снова запустить + sudo tcsh +
, чтобы стать * root *, если вы этого еще не сделали.
Шаг 6 - Настройка конфигурации маршрутизации OpenVPN и DNS
По умолчанию OpenVPN не настроен на указание клиенту маршрутизировать интернет-трафик через VPN. Мы удостоверимся, что он маршрутизирует трафик через OpenVPN, раскомментировав некоторые строки в + / usr / local / etc / openvpn / server.conf +
:
nano /usr/local/etc/openvpn/server.conf
Найдите и раскомментируйте эти три строки:
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Предустановленные DNS-серверы предназначены для OpenDNS, но вы можете установить для них любой DNS, какой вам нравится (например, Google DNS с + 8.8.8.8 +
и + 8.8.4.4 +
).
-
Дополнительные настройки: *
Вы также можете разрешить клиентам напрямую общаться с IP-адресами друг друга, раскомментировав:
client-to-client
Если, как упоминалось ранее, вы хотите использовать одни и те же ключи и сертификаты для нескольких клиентов (что немного менее безопасно), раскомментируйте эту строку:
duplicate-cn
Сжатие может быть включено и отключено с помощью этой строки:
comp-lzo
Ваш шифр может быть установлен вручную, раскомментировав одну из следующих строк:
cipher BF-CBC # Blowfish (default)
cipher AES-128-CBC # AES
cipher DES-EDE3-CBC # Triple-DES
_ * Примечание: * Какой бы шифр вы ни использовали, он также должен быть определен в файле конфигурации клиента, который мы создадим позже. _
Также доступны дополнительные шифры, такие как + aes-256-cbc
.
Шаг 7 - Запуск OpenVPN
Разрешите OpenVPN загружаться при загрузке и загружаться командой + service
, добавив следующую строку в` + / etc / rc.conf`:
nano /etc/rc.conf
Добавьте эти строки внизу файла:
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
Сервер OpenVPN полностью настроен и будет загружаться при загрузке.
Запустите сервер вручную с помощью:
service openvpn start
Ожидаемый результат:
add net 10.8.0.0: gateway 10.8.0.2
Ваш сервер OpenVPN теперь работает.
Шаг 8 - Настройка клиентского файла
На * сервере * мы создадим файл конфигурации для каждого клиента.
Сначала создайте папку для работы в:
mkdir -p /usr/local/etc/openvpn/clients/
Сделайте ++
именем клиента, которое мы установили ранее при создании сертификатов. (Не имеет значения, как именно вы установите это, поскольку это только рабочий каталог.)
Перейдите в новый каталог:
cd /usr/local/etc/openvpn/clients//
Скопируйте клиентский ключ и сертификат, сгенерированный нами с помощью + easy-rsa +
, и пример файла + client.conf +
. Убедитесь, что вы заменили ++
на имя, которое вы использовали ранее для файлов + .key
и` + .crt`:
cp /usr/local/etc/openvpn/easy-rsa/keys/.crt /usr/local/etc/openvpn/easy-rsa/keys/.key ./
cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
cp /usr/local/etc/openvpn/ca.crt ./
Опять же, ++
был тем, что мы использовали ранее.
Отредактируйте файл + client.conf +
:
nano ./client.conf
Обновите строку + remote +
, чтобы включить IP-адрес вашего дроплета (который можно получить с помощью + ifconfig +
) и номер порта; + 1194 +
по умолчанию:
remote 1194
_ _
* Примечание: * Если вы изменили настройки сервера + cipher +
или + comp-lzo +
, это должно быть отражено в файле + client.conf +
. Используйте те же настройки, которые вы делали ранее; например:
cipher aes-256-cbc
;comp-lzo
Этот параметр использует шифр + aes-256-cbc
и отключает сжатие.
Если вы изменили строку + proto +
в конфигурации сервера, это также должно быть отражено в клиенте.
Убедитесь, что эти строки * соответствуют * тому, что вы установили ранее; если вы ничего не меняли на стороне сервера, не меняйте их здесь. _ _
Теперь немного по хозяйству; мы будем встраивать сертификаты и ключ в один файл конфигурации. Это облегчает передачу отдельным клиентам. Кроме того, вы можете отдельно загрузить клиенту файл конфигурации, а также ключ и два файла сертификата.
В том же файле + client.conf
закомментируйте имена файлов сертификатов и ключей:
ca ca.crt
cert client.crt
key client.key
Сохраните ваши изменения.
Наконец, нам нужно встроить файлы + ca.cert
,` + .crt` и + .key
в файл конфигурации. Вы можете копировать и вставлять содержимое, используя + cat +
или + nano +
или что вам наиболее удобно, и соответствующие переменные для OpenVPN, или вы можете использовать однострочный скрипт, показанный ниже.
Запустите этот скрипт и введите ваш «+» при появлении запроса. Сценарий добавляет файлы сертификатов и ключей в файл ` client.conf +` с соответствующими именами переменных и символами новой строки, которых ожидает OpenVPN:
echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf
Убедитесь, что вы прокручиваете полностью вправо, так как это длинная команда.
Посмотрите на готовый файл + client.conf
с помощью` + nano s` или + cat
. Вы должны увидеть ключ и сертификаты, добавленные в файл внизу.
Вы сделали! Все, что нужно сделать сейчас, - это распространить файл + client.conf +
вашему клиенту. Большинство клиентов предпочитают расширение + .ovpn +
вместо + .conf +
, поэтому вы захотите * локально переименовать файл в + my_digitalocean_vpn.ovpn +
или что-то подобное. *
Повторите этот раздел для каждого клиента. Используйте отдельные сертификаты по умолчанию или используйте один и тот же клиентский сертификат на каждом клиенте, если хотите.
Заключение и настройка клиента
Теперь у вас должен быть рабочий сервер OpenVPN!
Загрузите файл конфигурации клиента, который вы создали на последнем шаге (+ / usr / local / etc / openvpn / clients // client.conf +
), на свой * локальный компьютер *. Используйте безопасный метод для загрузки файла, такой как SCP или https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server [SFTP].
Также на локальном компьютере установите клиент OpenVPN. Tunnelblick хорошо работает в Mac OS X, а OpenVPN имеет Windows клиент.
Убедитесь, что ваш файл конфигурации клиента назван так, как ожидается; обычно это имя типа + my_digitalocean_vpn.ovpn +
.
Дважды щелкните файл или переместите его в ожидаемый каталог вашего клиента.
Запустите свой клиент и подключитесь к соответствующему серверу OpenVPN.
Чтобы убедиться, что ваш VPN работает, используйте средство проверки IP-адреса, например http://www.whatismyip.com/. Показанный вами IP-адрес должен соответствовать IP-адресу вашего сервера OpenVPN.
Поздравляем! Вы подключились к вашему новому серверу OpenVPN.