Русский Украинский

Установка OpenVPN для Linux

проверено на:
  • Ubuntu 12.04.5 LTS
  • Debian 7

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

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

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

На серверах VDS/VPS в Украине, по запросу, мы подключим TUN/TAP для корректной работы OpenVPN.


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

Debian/Ubuntu

Для Debian-based дистрибутивов (debian, ubuntu, mint...):

apt-get install -y openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

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

Редактируем переменные:

nano ./vars

Меняем строки и сохраняем файл:

	export KEY_SIZE=1024  # Длина ключа
	export KEY_EXPIRE=3650 # Срок действия ключа в днях

	# описание сертификатов по умолчанию
	export KEY_COUNTRY="RU"
	export KEY_PROVINCE="RU"
	export KEY_CITY="Kiev"
	export KEY_ORG="http://example.com"
	export KEY_EMAIL="org@example.com"

Инициализируем переменные, чистим папку keys и создаем сертификаты:

. ./vars
. ./clean-all

./build-ca			# корневой сертификат
./build-key-server server	# сертификат сервера
./build-dh			# ключ Диффи Хельман

Eсли вы планируете использовать tls-auth, который позволит скрыть порт, на котором сервер слушает vpn подключения, защитить от DoS атак и кое-чего еще, то выполните еще и эту строку:

openvpn --genkey --secret ./keys/ta.key

* Включили tls-auth? Тогда не забудьте передать ta.key клиентам, его надо будет положить рядом с сертификатом пользователя.


Перенесем полученные сертификаты в рабочую папку:

cp ./keys/ca.crt /etc/openvpn
cp ./keys/server.crt /etc/openvpn
cp ./keys/server.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn

Для tls-auth, выполните и эту строку:

cp ./keys/ta.key /etc/openvpn

Создадим сертификаты пользователей, сколько вам нужно (вводить данные не обязательно, поля будут принимать значения переменных по умолчанию, достаточно просто нажимать Enter. В конце будет предложено ввести пароль (Enter export password), он защитит ваш сертификат от импорта недоброжелателями, хорошенько его запомните)

./build-key-pkcs12 windows
./build-key-pkcs12 debian
./build-key-pkcs12 android

* После этого в папке /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ появятся ваши сертификаты android.*, windows.* и другие.


Если захотите создать сертификаты поздней, подключаетесь по SSH, и такие команды:

#	cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
#	. ./vars
#	./build-key-pkcs12 newuser1
#	./build-key-pkcs12 newuser2

Настроим сам сервер

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
nano /etc/openvpn/server.conf

Все настройки по умолчанию нас устроят, меняем, раскомментируем и сохраняем:

	local IP_АДРЕС_ВАШЕГО_СЕРВЕРА
	push "redirect-gateway def1 bypass-dhcp"
	push "dhcp-option DNS 8.8.8.8"
	push "dhcp-option DNS 8.8.4.4"
	client-to-client # раскомментируйте, если хотите иметь доступ между клиентами внутри вашего VPN
	log /var/log/openvpn.log # раскомментируйте, если нужны логи
	duplicate-cn # раскомментируйте, если хотите использовать один сертификат для всех пользователей

	# Для включения tls-auth, необходимо добавить (без #)
	# tls-auth ta.key 0

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

Применим настройки файрвола через rc.local, можно сделать иначе, но остановимся на этом варианте:

nano /etc/rc.local

Добавляем строки до exit 0 и сохраняем:

	iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
	iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
	iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Редактируем файл sysctl.conf:

nano /etc/sysctl.conf

Раскомментируем строчку:

	net.ipv4.ip_forward=1

Отправляем на перезагрузку, чтобы сразу убедиться, что автозапуск работает.

reboot

Всё, серверная часть готова. Уже можно подключаться. Для перехода к следующим этапам, надо выгрузить с нашего сервера сертификаты из папки: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/

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

Windows

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

После установки заходим в папку установки программы: C:\Program Files\OpenVPN\config и создаем файл конфигурации windows.ovpn (обычный текстовый файл) с содержанием:

remote IP_вашего_сервера 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 windows.p12
verb 3
pull

Если вы включили tls-auth на сервере, добавьте в конфиг эту строку:

tls-auth ta.key 1

Создаем batch скрипт (start_my_vpn.cmd) для запуска VPN сессии:

cd C:\some\path\openvpn\
"C:\Program Files\OpenVPN\bin\openvpn.exe" --config C:\some\path\openvpn\windows.ovpn

Скрипт и конфиг кладем в одну папку, в эту же папку кидаем windows.p12 сертификат, брать его тут:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/windows.p12

Готово, ярлык на скрипт кидаем на рабочий стол, запускаем от имени администратора или от пользователя с его правами, при запуске он попросит ввести пароль для «импорта» сертификата.

Enter Private Key Password:

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

Oct 9 21:25:35 Initialization Sequence Completed

Для автостарта туннеля без ввода пароля, можно вместо p12 использовать связку сертификатов ca.crt, windows.key и windows.crt, выглядит это так, вместо:

pkcs12 windows.p12

Пишем:

ca ca.crt
cert windows.crt
key windows.key

Файлы брать все там же:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
и положить в папку с windows.ovpn и start_my_vpn.cmd.

Linux

Cтавим пакет openvpn:

apt-get install openvpn

Cоздаем папку, в любом удобном месте для хранения сертификатов и скрипта подключения к VPN:

mkdir /opt/openvpn

Cоздаем скрипт подключения:

echo 'cd /opt/openvpn
/usr/sbin/openvpn --config /opt/openvpn/debian.ovpn
' > /opt/openvpn/start_vpn.run

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

echo remote IP_ВАШЕГО_СЕРВЕРА 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 debian.p12
verb 3
pull > /opt/openvpn/debian.ovpn

Если вы включили tls-auth на сервере, добавьте в конфиг эту строку:

tls-auth ta.key 1

Файл debian.p12 берем как обычно на сервере /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ # опять же, можно вместо p12 использовать ca.crt, debian.key и debian.crt, как в примере с windows, для того чтобы не вводить пароль для подключения к VPN, это пригодится например для автозапуска VPN.

chmod +x /opt/openvpn/start_vpn.run

Готово. Не забудьте положить debian.p12 или ca.crt, debian.key и debian.crt в папку со скриптом и файлом конфигурации.

Для подключения к VPN, просто выполните с повышенными привилегиями:

/opt/openvpn/start_vpn.run

Android root не требуется)

Устанавливаем на телефон OpenVPN for Android.

Загружаем на карту памяти сертификат p12, брать тут:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/android.p12

Запускаем OpenVPN for Android.

VPN Profiles > Add, вводим любое имя. Приступаем к настройке профиля:

Basic > Server Address: IP адрес вашего VPN сервера, либо имя домена, если вы его привязали
Type: PKCS12 File
Select: Выбираем наш файл *.p12
PKCS12 Password: вводим пароль импорта сертификата, заданный при его генерации.
upd: используйте последнюю версию приложения, в ней проверка remote-cert-tls server включена по умолчанию, либо включите вручную в настройках авторизации проверку сертификата сервера
Если вы включили tls-auth на сервере, включите в настройках профиля tls-auth и выберите ta.key

Готово. Подключаемся и проверяем, текущий статус подключения доступен в панели уведомлений (можно добавить на рабочий стол ярлык для конкретного VPN, он будет стартовать сразу по клику на ярлык, без лишних телодвижений. Если хотите чтобы при каждом подключении спрашивало пароль, просто не сохраняйте его в настройках профиля).


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

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

ping 10.8.0.1

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

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