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="[email protected]" |
Инициализируем переменные
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 [email protected]:/etc/openvpn/ |
где root_pc1 – ваш логин на удаленной машине а 194.28.85.225 – ее IP-адрес. В результате выполнения этой команды на удаленный компьютер мы скопируем файл ca.crt – сертификат CA и сертификат/ключ клиента, они ему понадобятся чтобы подключаться к VPN-серверу.
Далее эти файлы нужно переместить в /etc/openvpn/ из под пользователя root или другого имеющего право на запись в этом каталоге.