OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.

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

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm


Устанавливаем OpenVPN

yum -y install openvpn

Добавляем в автозагрузку при старте сервера

chkconfig openvpn on

В каталог /etc/openvpn/ скопируем набор скриптов для быстрой и легкой генерации всех необходимых ключей и сертификатов.

cp -R /usr/share/openvpn/easy-rsa/2.0/ /etc/openvpn/

Переходим в каталог

cd /etc/openvpn/2.0/

Открываем на редактирование файл vars и в самом его конце приводим переменные к такому виду:

export KEY_COUNTRY="UA"
export KEY_PROVINCE=»UA»
export KEY_CITY="Kiev"
export KEY_ORG="yourmir.info"
export KEY_EMAIL="admin@yourmir.info"

Инициализируем переменные

source ./vars

Очищаем директорию keys от старых файлов

./clean-all

Создаем ROOT CERTIFICATE AUTHORITY (CA) сертификат/ключ (в директории /etc/openvpn/2.0/keys/ будут созданы файлы ca.crt и ca.key)

./build-ca

Далее создаем ключ и сертификат для сервера (в директории /etc/openvpn/2.0/keys/ будут созданы файлы server.crt, server.key и server.csr).
Формат команды: ./build-key-server ServerName – где ServerName это название сервера.

./build-key-server server.yourmir.info

Генерируем Diffi e Hellman parameters для сервера. Суть алгоритма Diffie Hellman в том, чтобы наладить защищенное соединение по незащищенным каналам связи. По умолчанию длина файла 1024 бита, что очень даже достаточно. После выполнения этой команды будет создан файл /etc/openvpn/2.0/keys/dh1024.pem

./build-dh

С генерацией файлов для сервера закончено, теперь можно добавлять клиентов вот такой командой (будут созданы файлы pc1.crt, pc1.key и pc1.csr). Благодаря тому, что мы уже отредактировали файл vars и указали значения переменных по умолчанию, нам в большинстве запросов на ввод данных достаточно будет просто нажать Enter.

./build-key pc1

Все необходимые файлы для VPN-сервера будут расположены в /etc/openvpn/ поэтому скопируем их туда из директории /etc/openvpn/2.0/keys/

cp keys/{ca.crt,ca.key,server.yourmir.info.crt,server.yourmir.info.key,dh1024.pem} ../

Далее создаем создаем файл /etc/openvpn/openvpn.conf с следующим содержанием:

local 194.28.85.220
port 1194
proto tcp
dev tun
ca ca.crt
cert server.yourmir.info.crt
key server.yourmir.info.key
dh dh1024.pem
server 10.10.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 0.0.0.0 255.255.255.0"
push "dhcp-option DNS 194.28.85.220"
push "redirect-gateway"
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
mute 10

На VPN-сервере необходимо включить IP Forwarding, так как наш сервер будет маршрутизировать трафик.

echo '1' > /proc/sys/net/ipv4/ip_forward

В файле /etc/sysctl.conf находим такую строку:

net.ipv4.ip_forward = 0

и меняем ее на:

net.ipv4.ip_forward = 1

Для того чтобы трафик VPN-клиентов достигший нашего сервера мог попадать в другие сети и успешно возвращаться нам нужно включить трансляцию сетевых адресов (NAT). Мы это сделаем с помощью iptables вот такой командой:

iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

Настройка VPN-сервера закончена и мы можем его запустить.

service openvpn start

Если вы используете fi rewall то OpenVPN необходимо в нем разрешить. Делается это примерно вот так:

# Allow TUN interface connections to OpenVPN server
iptables -A INPUT -i tun+ -j ACCEPT
# Allow TUN interface connections to be forwarded through other interfaces
iptables -A FORWARD -i tun+ -j ACCEPT
# Allow TAP interface connections to OpenVPN server
iptables -A INPUT -i tap+ -j ACCEPT
# Allow TAP interface connections to be forwarded through other interfaces
iptables -A FORWARD -i tap+ -j ACCEPT

Теперь сгенерированные файлы необходимо перенести на клиентскую машину. Крайне желательно это делать безопасным способом, чтобы файлы не были перехвачены злоумышленниками. На Linux-клиент файлы можно перенести с помощью команды scp, в этом случае весь передаваемые трафик будет зашифрован. Находясь в директории /etc/openvpn/ выполните такую команду:

scp ca.crt 2.0/keys/pc1.key 2.0/keys/pc1.crt root_pc1@194.28.85.225:/etc/openvpn/

где root_pc1 – ваш логин на удаленной машине а 194.28.85.225 – ее IP-адрес. В результате выполнения этой команды на удаленный компьютер мы скопируем файл ca.crt – сертификат CA и сертификат/ключ клиента, они ему понадобятся чтобы подключаться к VPN-серверу.
Далее эти файлы нужно переместить в /etc/openvpn/ из под пользователя root или другого имеющего право на запись в этом каталоге.