Установка OpenVPN

Материал из Энциклопедия хостинга
Перейти к: навигация, поиск

Содержание

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

Эта инструкция может быть использована как на Linux VPS на виртуализации KVM так и на выделенных серверах.

На виртуализациях OpenVZ и FreeBSD-Jail устройство TUN/TAP работать не будет!


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

Debian/Ubuntu

Рекомендую шаблон Debian-8-x86_64 Для Debian-based дистрибутивов (debian, ubuntu, mint...):

apt-get install -y openvpn

Настройка сервера OpenVPN на Linux

Для openvpn > 2.3

Для OpenVPN версии выше 2.3 набор скриптов easy-rsa не входит в инсталляцию по умолчанию, а скачивается отдельно: Распаковываем структуру ключей:

mkdir /src; cd /src && wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
cd easy-rsa-master
mv vars.example vars
./easyrsa init-pki

Создаём центр CA: ./easyrsa build-ca

Получим:

./pki/ca.crt
./pki/private/ca.key

Сгенерируем запрос сертификата без пароля:

./easyrsa gen-req server nopass

Подписываем запрос:

./easyrsa sign-req server server

Получим:

./pki/issued/server.crt


Сгенерируем ключи для клиента:

./easyrsa gen-req client nopass
./easyrsa sign-req client client

Попросит ввести новый пароль для PEM и один раз повторить пароль, сгенерированный ранее для ca.crt

Получим:

./pki/private/client1.key
./pki/issued/client1.crt


Сгенерируем файл с параметрами Диффи-Хеллмана (dh.pem):

./easyrsa gen-dh

Это может занять продолжительное время.

Получим:

./pki/dh.pem


Перенесём полученные файлы в /etc/openvpn/ для удобства:

mv ./pki/dh.pem /etc/openvpn/dh1024.pem
mv ./pki/private/client1.key /etc/openvpn/
mv ./pki/private/server.key /etc/openvpn/
mv ./pki/ca.crt /etc/openvpn/
mv ./pki/issued/client1.crt /etc/openvpn/
mv ./pki/issued/server.crt /etc/openvpn/

Файлы client1.crt, client1.key, ca.crt нужно скопировать на компьютер клиента, который будет подключаться к OpenVPN-серверу:

cd /etc/openvpn
mkdir ovpn-client
cp -rp  client1.crt client1.key ca.crt ./ovpn-client/
zip ovpn-client.zip ./ovpn-client/*

Для openvpn < 2.3

Теперь нужно создать папку /etc/openvpn (если она еще не создана) и скопировать туда папку с сертификатами и файлами конфигурации. Примеры того и другого лежат с корне архива .tar.gz, если была установка из source, иначе они будут разбросаны по всей системы на усмотрение того, кто делал rpm. Вот некоторые варианты, где можно найти эти папки:

  • /usr/share/doc/openvpn # для Debian/Ubuntu
  • /etc/share/openvpn
  • /usr/share/doc/packages/openvpn

Итак, надо скопировать папки easy-rsa и sample-config-files. На самом деле, примеры файлов конфигурации можно не копировать, а скопировать оттуда только файл server.conf.

mkdir /etc/openvpn;cd /etc/openvpn
cp -pr /usr/share/doc/openvpn/examples/easy-rsa ./
cp -pr /usr/share/doc/openvpn/examples/sample-config-files ./

Генерируем сертификаты:

/etc/openvpn/easy-rsa/2.0
. ./vars
./clean-all
./build-ca

Будут спрашивать данные для сертификата, лучше отвечать ближе к правде, хотя и не обязательно. Важно обязательно что-то писать в поле, не оставлять пустыми.

./build-key-server server

Аналогично, отвечать нужно на все вопросы. Common name должно быть "server". На 2 последних вопроса нужно ответить "y".

./build-dh

Теперь делаем сертификат для клиента. Если у нас несколько клиентов, то повторяем этот шаг несколько раз, меняя имя/номер клиента.

./build-key client1

Если Вы хотите защитить сертификат паролем то используйте вместо предыдущей команды эту:

./build-key-pass client1

Важно в поле Common Name вписать соответствующее имя клиента (совпадающее с параметром команды ./build-key), в нашем случае это "client1".

Теперь все созданные сертификаты и ключи нужно переместить в /etc/openvpn/ (или же прописать правильные пути в конфигурации сервера до них).

конфигурационный файл сервера

Он должен находится в /etc/openvpn и называться server.conf. Пример конфигурационного файла server.conf с рабочего OpenVPN сервера:

port 1194
proto tcp
dev tun
ca ca.crt 
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log
log-append  openvpn.log
verb 3
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"


В опциях

ca, cert, key, dh

можно использовать абсолютные пути до файлов пути относительно директории /etc/openvpn.


Пример использования абсолютных путей:

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

Сохраняем файл.

Выполняем

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

На VPS на базе Virtuozzo вместо первой команды надо выполнить:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source IP_АДРЕС_ВАШЕГО_ВДС

Запускаем OpenVPN:

service openvpn start

Для Debian можно также использовать такой синтаксис в команде запуска:

/etc/init.d/openvpn start

Для openvpn > 2.3 при запуске потребуется ввести парольную фразу, заданную на этапе создания серверного сертификата.

Установка клиента OpenVPN

Windows

Теперь ставим OpenVPN клиент для Windows. Его можно скачать здесь: http://openvpn.se.

Работа файла конфигурации проверена на версии клиента openvpn-2.1_rc19

После установки заходим в папку установки программы, например: C:\Program and Files\OpenVPN\sample-config. Открываем текстовым редактором (блокнотом) файл client.ovpn и пишем в строке

remote my-server-1 1194

IP своего сервера вместо my-server-1. Больше ничего не трогаем, сохраняем и закрываем файл.

Последнее что надо сделать, это скачать с сервера 3 файла сертификатов в эту же папку, где только что редактировали файл. Итак, скачать нужно следующие файлы:

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client1.crt
/etc/openvpn/easy-rsa/keys/client1.key

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

Все готово для подключения и проверки.

Нажимаем правой кнопкой на файл client.ovpn и выбираем Start OpenVPN on this config file. Убеждаемся, что соединение установлено правильно.

Linux

Устанавливаем клиент (команды для разных ОС):

yum install -y openvpn
apt-get install -y openvpn

Кладем три файла, сгенерированных на сервере в директорию /etc/openvpn/:

client1.key
client1.crt
ca.crt

Создаем/редактируем файл конфигурации:

vi /etc/openvpn/openvpn.conf


Со следующим содержимым:

remote <IP.вашего.сервера> 1194
push "redirect-gateway def1"
tls-client
remote-cert-tls server
nobind
proto tcp-client
dev tun0
pull
resolv-retry infinite
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
persist-tun
persist-key
verb 3
route-method exe
route-delay 2

Подключитесь вручную с помощью такой команды:

openvpn --config /etc/openvpn/openvpn.conf

Для openvpn > 2.3 при запуске потребуется ввести парольную фразу, заданную на этапе создания клиентского сертификата.


Проверка корректности работы OpenVPN

Выполняем команду пинг до сервера по его внутреннему адресу 10.8.0.1:

ping 10.8.0.1


Проверяем свой внешний IP-адрес на каком-нибудь сайте вроде 2ip.ru (должен видеться адрес вашего сервера).

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

Частые вопросы

Я хочу чтобы все мои запросы шли с одного IP, как это сделать?

Решение

Описание технологии

Берём сервер с внешним IP на Firstvds и делаем VPN (Виртуальная частная сеть) между ним и домашним компьютером. После чего устанавливаем на тот сервер прокси, пробрасываем порты и радуемся внешнему IP, причём (актуально для помегабайтных тарифов), защищённого от паразитного трафика, вызванного SYN и UDP-флудом, сканированием портов и т.п. От паразитного трафика на открытых TCP-портах спасения нет.

Заказываем сервер

Вам необходим сервер на виртуализации KVM. Лучше VDS-KVM-Разгон, но подойдет и тариф Старт. На других виртуализациях (OpenVZ) устройство TUN/TAP работать не будет.

Решение проблем с сервером за VPN

Ниженаписанное актуально, скорее всего, только для *nix. Под Windows дефолтным поведением вроде бы является более «правильное».

DNAT не изменяет адрес источника пакета. Поэтому пакеты через VPN приходят к нам с IP-адресом отправителя и, соответственно, на домашнем сервере маршрутизируются не через VPN, а через внешний интерфейс и отбрасываются отправителем (то есть соединение установить не получается). Решается проблема так:

  • Добавляем в /etc/iproute2/rt_tables таблицу маршрутизации, например, 128 VPN.
  • Добавляем в конфиг клиента openvpn up /etc/openvpn/up
  • Пишем скрипт /etc/openvpn/up:
#!/bin/bash
ip route add 0/0 dev tun0 src 10.8.0.6 table VPN
ip route prepend default via 10.8.0.6 table VPN
ip rule add from 10.8.0.6 table VPN

После перезапуска openvpn всё должно работать.

Заключение

Получить внешний IP можно без слёзных звонков в саппорт НТК. Достаточно всего лишь иметь прямые руки, желание и немного денег :)

Постоянно исправляемый оригинал тут: http://thelogin.ru/wiki/White_IP_HOWTO

Смотрите также

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты

Заметили ошибку?

Выделите ее и нажмите CTRL+ENTER