Понадобилось установить на CentOS 5.2 сервер openvpn и сделать авторизацию по сертификатам.
В стандартных репозиториях центоса openvpn нет, поэтому подключаем репозиторий от rpmforge:
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm
Эта команда подключит репозиторий через файл /etc/yum.repos.d/rpmforge.repo, в котором на текущий момент находится версия openvpn 2.0.9
Делаем, соглашаясь во всем с менеджером пакетов:
yum check-update yum install openvpn
Копируем скрипты для генерации сертификатов:
cp -a /usr/share/openvpn/easy-rsa/ /etc/openvpn/
Создаем директорию для хранения серверных сертификатов и ключа:
mkdir /etc/openvpn/keys
Заходим в /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa/
и выполняем команду
chmod +x build-* clean-all
В файле /etc/openvpn/easy-rsa/vars содержатся данные, которые используются при создании сертификата.
Если нет желания, то можно их не редактировать, а вот считывать - обязательно:
source /etc/openvpn/easy-rsa/vars
Создаем сертификаты, не забывая вписывать в Common ip-адрес вашего сервера.
./clean-all ./build-ca ./build-key-server vpnserver ./build-dh
Копируем получившиеся сертификаты и ключи в директорию, где они будут храниться:
cd /etc/openvpn/easy-rsa/keys/ cp ca.crt dh1024.pem vpnserver.crt vpnserver.key /etc/openvpn/keys/
Создаем конфиг для сервера /etc/openvpn/myserver.conf со следующим содержимым:
В данном примере параметры, относящиеся к протоколированию, отключены.
local SERVER-IP port 11940 proto tcp dev tun duplicate-cn script-security 2 ca keys/ca.crt cert keys/vpnserver.crt key keys/vpnserver.key dh keys/dh1024.pem server 192.168.15.0 255.255.255.0 push "dhcp-option DNS 8.8.8.8" push "redirect-gateway" ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo persist-key persist-tun #log openvpn-server-tcp.log #status server-tcp.status verb 3
Обращаю внимание, что в CentOS обязательно необходимо отредактировать файл /etc/init.d/openvpn, иначе демон будет вываливаться с ошибкой out of memory.
Сразу после первой строчки в этот файл дописать:
ulimit -l 10000
Создаем файл /etc/openvpn/start.sh, в который запишем правила NAT и разрешим форвардинг пакетов:
#!/bin/sh /sbin/sysctl net.ipv4.ip_forward=1 /sbin/iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j SNAT --to-source YOUR.SERVER.IP
Выставим разрешения для запуска, добавим скрипт в автозагрузку и запустим его:
chmod +x /etc/openvpn/start.sh echo "/etc/openvpn/start.sh" >> /etc/rc.local /etc/openvpn/start.sh
Установим ДНС-сервер:
yum install bind caching-nameserver
Настраиваем named через файл /etc/named.caching-nameserver.conf
комментируем строку listen-on port 53 { 127.0.0.1; }; Строку allow-query { localhost; }; приводим к виду allow-query { localhost; 192.168.15.0/24; }; Производим такие же замены везде, где есть упоминание localhost;
Добавляем named в автоматический запуск и запускаем:
chkconfig --level 2345 named on /etc/init.d/named start
Запускаем openvpn:
/etc/init.d/openvpn start
Создаем ключи для клиентов, не оставляя Common пустым:
cd /etc/openvpn/easy-rsa ./build-key client01
Клиентский сертификат и ключ будут находиться в /etc/openvpn/easy-rsa/keys.
Пример клиентского конфига client01.ovpn для подключения к серверу:
client tls-client verb 3 dev tun proto tcp remote SERVER-IP 11940 nobind persist-key persist-tun comp-lzo ca ca.crt cert client01.crt key client01.key resolv-retry infinite redirect-gateway push "dhcp-option DNS 8.8.8.8"