Как настроить и подключиться к частному серверу OpenVPN на FreeBSD 10.1

Вступление

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.

Related