CentOS
Установим репозиторий EPEL:
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
И поставим пакет:
yum install openvpn -y
Настройка сервера OpenVPN
Для 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
./build/build-dist.sh
Распакуем полученный архив:
tar zxvf EasyRSA-git-development.tgz && cd EasyRSA-git-development
Сгенерируем корневой сертификат:
./easyrsa init-pki
./easyrsa build-ca
Попросит дважды ввести новый пароль для ca.crt. Получим:
./pki/ca.crt
Сгенерируем ключи для сервера:
./easyrsa build-server-full server
Попросит дважды ввести новый пароль для PEM и один раз повторить пароль, сгенерированный ранее для ca.crt
Получим:
./pki/private/server.key
Сгенерируем ключи для клиента:
./easyrsa build-client-full client1
Попросит дважды ввести новый пароль для 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/
Создание статического ключа HMAC
Для создания ключа HMAC используйте команду openvpn с опциями —genkey и —secret:
# cd /etc/openvpn
# openvpn —genkey —secret ta.key
Файлы 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.conf конфигурации сервера OpenVPN есть на сайте проекта по адресуopenvpn.net/index.php/open-source/documentation/howto.html#server. Мы предлагаем начать с сокращенной версии этого файла из нашей статьи.
#если используется пароль для ключа сервера то требуется дописать строчку до файла с паролем где и вписать пароль открыто!
askpass /etc/openvpn/pass.txt
#Номер порта
port 1194
#тип порта
proto udp
# Устройство
dev tun
user openvpn
group openvpn
#Где конфиг и где ключи
cd /etc/openvpn
persist-key
persist-tun
tls-server
tls-timeout 120
dh dh.pem
ca ca.crt
cert vpn-server.crt
key server.key
№файл заблокированных пользователей
crl-verify crl.pem
tls-auth /etc/openvpn/ta.key 0
server 10.15.0.0 255.255.255.0
client-config-dir /etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
#Передать клиенту что всё перенаправлять на новый шлюз
push "redirect-gateway"
#передаём клиенту нужный днс
push "dhcp-option DNS 10.15.0.1"
#Передаём клиенту маршрут
route 10.15.0.0 255.255.255.0
#Использовать сжатие
comp-lzo
keepalive 10 120
#Логи
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
#Уровень говорливости лога
verb 3
mute 20
Чтобы запуск сервера OpenVPN произошел успешно, необходимо создать каталоги, сертификаты и ключи, на которые есть ссылки в файлах openssl.cnf и server.conf, а также пользователя openvpn.
Создайте каталог для журнала сервера OpenVPN:
# mkdir /var/log/openvpn/
Ревизия файлов перед запуском OpenVPN
Итак, мы получили из удостоверяющего центра подписанный сертификат сервера OpenVPN, сертификат самого удостоверяющего центра CA, список отзыва сертификатов, создали файл Диффи-Хелмана и ключ HMAC.
Перед тем как запустить демон OpenVPN, нам нужны в каталоге /etc/openvpn/ для Linux или /usr/local/etc/openvpn/ для FreeBSD следующие файлы:
openssl.cnf — файл конфигурации OpenSSL;
server.conf — файл конфигурации сервера OpenVPN;
ca.crt — cертификат удостоверяющего центра;
vpn-server.crt — cертификат сервера OpenVPN;
server.key — приватный ключ сервера OpenVPN, секретный;
crl.pem — cписок отзыва сертификатов;
dh.pem — файл Диффи-Хелмана для обеспечения защиты трафика от расшифровки;
ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда
Проверка результата запуска демона OpenVPN
Если сервер OpenVPN стартовал без ошибок, убедитесь с помощью команды ifconfig в том, что появился интерфейс TUN:
# ifconfig
…
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.15.0.1 P-t-P:10.15.0.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Подготовка файлов конфигурации
Файлы конфигурации, ключи и сертификаты должны находится в каталоге /etc/openvpn.
Далее подготовьте файлы конфигурации openssl.cnf и server.conf.
Файл openssl.cnf, определяющий конфигурацию OpenSSL, используйте точно такой же, как и для сервера OpenVPN.
Если нужно заблокировать выданный ранее сертификат, воспользуйтесь следующей командой:
$ ./easyrsa revoke developer5
Здесь мы отозвали сертификат для клиента developer5.
Далее нужно сгенерить новый файл CRL на сервер OpenVPN
и перезапустить демон OpenVPN.
$ ./easyrsa gen-crl
cp crl.pem /etc/openvpn/
проверка сертификата
cat keys/index.txt
index.txt должен обновиться . Знак ‘R’ (for Revoked) в первой колонке значит что сертификат отозван.
openssl crl -in crl.pem -text
Содержимое файла server.conf для клиента OpenVPN (android)
dev tun
proto udp
remote 192.168.0.54 1194
client
resolv-retry infinite
ca ca.crt
cert developer1.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
persist-key
persist-tun
comp-lzo
verb 3
status-version 3
файл называем client.ovpn
и импортируем в программе под андройд.
iptables
iptables -I INPUT -p udp —dport 1194 -s eth0 -j ACCEPT
iptables -I INPUT -i tun0 -s 172.16.0.0/24 -j ACCEPT