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

OpenVPN – это открытое приложение для создания виртуальной частной сети (VPN), которое позволяет безопасно подключаться к VPN (аналогично локальной сети).

В этом мануале мы расскажем, как установить и настроить сервер OpenVPN на машине FreeBSD 10.1 с IPv4 NAT и маршрутизацией. Мануал включает краткие пояснения различных параметров конфигурации.

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

Требования

  • Сервер FreeBSD 10.1. Необходимый объем сервера зависит от количества клиентов, которых вы собираетесь подключить к VPN. Для базовой настройки с небольшим количеством клиентов хватит 519 Мб.
  • Привилегии root или sudo. Чтобы открыть оболочку root, подключитесь к своему пользователю (тут он называется freebsd) и введите команду:

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 комментарии должны начинаться с точки с запятой (;) или хэша (#). В этом примере для комментирования(отключения) параметров конфигурации используются точки с запятой, а для собственно комментариев — хэши.

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

  • port (опционально): порт по умолчанию – 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

Сегодня стандартом являются 2048-битные ключи, хотя вы также можете использовать 4096-битные (что более безопасно, но замедляет согласование).

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

Поскольку оболочкой является tcsh, строки export необходимо заменить на setenv. Это делается с помощью sed перед 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/, очистите каталог, а затем соберите центр сертификации (СА).

./clean-all
./build-ca

Вам будет предложено ввести параметры сертификата:

Country Name (2 letter code) [US]:GB
State or Province Name (full name) [CA]:Somerset
Locality Name (eg, city) [SanFrancisco]:Bath
Organization Name (eg, company) [Fort-Funston]:Callum
Organizational Unit Name (eg, section) [changeme]:VPN
Common Name (eg, your name or your server's hostname) [changeme]:vpn.example.com
Name [changeme]:Callum's VPN CA
Email Address [mail@host.domain]:callum@example.com
Теперь соберите ключ сервера:
./build-key-server server

Снова укажите параметры. Вам не нужен пароль или дополнительное имя компании.

Введите y, чтобы подписать ключ.

Country Name (2 letter code) [US]:GB
State or Province Name (full name) [CA]:Somerset
Locality Name (eg, city) [SanFrancisco]:Bath
Organization Name (eg, company) [Fort-Funston]:Callum
Organizational Unit Name (eg, section) [changeme]:VPN
Common Name (eg, your name or your server's hostname) [server]:vpn.example.com
Name [changeme]:Callum's VPN Server
Email Address [mail@host.domain]:callum@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ENTER
An optional company name []: ENTER
Certificate is to be certified until Feb  5 14:40:15 2025 GMT (3650 days)
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
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/

Выполните следующую команду, где clientName – это имя, которое вы хотите использовать для сертификата данного конкретного клиента.

./build-key clientName

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

Пароль и имя компании не нужны. Нажмите у, чтобы подписать сертификат.

Примечание: Рекомендуется использовать индивидуальные сертификаты для каждого клиента, и этого 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 dhSIZE.pem

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

Повторите этот раздел для сертификата каждого отдельного клиента, который вы хотите создать.

5: Настройка маршрутизации IPv4 NAT

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 – внешний интерфейс.
  • 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 в автозагрузку. Для этого откройте файл:

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/clientName

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

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

cd /usr/local/etc/openvpn/clients/clientName/

Скопируйте клиентский ключ и сертификат, сгенерированный с помощью easy-rsa, и образец файла client.conf. Убедитесь, что вы заменили clientName именем, которое вы использовали ранее для файлов .key и .crt:

cp /usr/local/etc/openvpn/easy-rsa/keys/clientName.crt /usr/local/etc/openvpn/easy-rsa/keys/clientName.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 your_server_ip 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.crt, clientName.crt и clientName.key в файл конфигурации. Используя cat или nano, вы можете скопировать и вставить содержимое и соответствующие переменные OpenVPN. Также можно использовать однострочный скрипт, показанный ниже.

Запустите этот скрипт и по запросу введите имя вашего клиента (clientName). Скрипт добавит файлы сертификатов и ключей в файл 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 или cat. Вы должны увидеть ключ и сертификаты, добавленные в конец файла.

Готово! Все, что осталось сделать сейчас – это передать файл client.conf вашему клиенту. Большинство клиентов предпочитают расширение .ovpn, а не .conf, поэтому нужно переименовать файл локально в my_vpn.ovpn или что-то подобное.

Повторите этот раздел для каждого отдельного клиента.

Заключение

Теперь у вас есть рабочий сервер OpenVPN.

Загрузите клиентскую конфигурацию (/usr/local/etc/openvpn/clients/clientName/client.conf) на локальную машину. Используйте безопасный метод для загрузки файла, такой как SCP или SFTP.

Читайте также: Использование SFTP для безопасного обмена файлами с удаленным сервером

Также на локальном компьютере установите клиент OpenVPN. Tunnelblick хорошо подходит для Mac OS X, а OpenVPN предоставляет клиент для Windows.

Убедитесь, что файл конфигурации клиента назван правильно; обычно это имя типа my_vpn.ovpn.

Дважды кликните по файлу или переместите его в ожидаемый каталог вашего клиента.

Запустите клиент и подключитесь к соответствующему серверу OpenVPN.

Чтобы убедиться, что VPN работает, используйте средство проверки IP-адресов, например http://www.whatismyip.com/. Показанный IP-адрес должен соответствовать IP-адресу вашего сервера OpenVPN.

Tags: , , , ,