Настройка OpenVPN на CentOS 6.x

openvpn.net
Не знаю по какой причине, но в версии CentOS 6.x отсутствует такой чудесный пакет как OpenVPN. А он частенько бывает нам необходим. К счастью существует достаточно дополнительных репозитариев, где все это есть.

Итак, приступим.
Первым делом подключим репозитарий, в котором есть наш пакет. В моем примере это будет repoforge.
Заходим в консоль сервера, например, в папку /root, скачиваем необходимый нам rpm пакет, содержащий установку rpmforge и устанавливаем его:

# cd /root
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm

Далее, необходимо проверить установлен и активен ли у нас tun/tap интерфейс:
# sudo cat /dev/net/tun

В результате выполнения этой команды, должно появиться сообщение вида
# cat: /dev/net/tun: File descriptor in bad state
Это значит что с интерфейсом все нормально.
Далее устанавливаем, собственно, сам OpenVPN:
# yum install openvpn

А вот дальше начинается самое интересное. Нам нужно сгенерировать ключи для OpenVPN. Для этого копируем соответствующий инструментарий в /etc/openvpn:
# cp -r /usr/share/doc/openvpn-2.2.2/easy-rsa/ /etc/openvpn/

Затем необходимо немного изменить файл vars, чтоб он правильно работал в CentOS 6.3. Открываем файл /etc/openvpn/easy-rsa/2.0/vars в любимом редакторе и правим:
# vi /etc/openvpn/easy-rsa/2.0/vars
меняем строку 29 с:
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
на:
export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

Сохраняемся и выходим.
Далее генерируем ключи:
# chmod 755 /etc/openvpn/easy-rsa/2.0/*
#cd /etc/openvpn/easy-rsa/2.0
# source /etc/openvpn/easy-rsa/2.0/vars
# /etc/openvpn/easy-rsa/2.0/clean-all
# chmod 755 /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/pkitool
# /etc/openvpn/easy-rsa/2.0/build-ca
# /etc/openvpn/easy-rsa/2.0/build-key-server server
# /etc/openvpn/easy-rsa/2.0/build-dh
# /etc/openvpn/easy-rsa/2.0/build-key client1
# /etc/openvpn/easy-rsa/2.0/build-key client2

Копируем полученные ключи в папку /etc/openvpn
cp -r /etc/openvpn/easy-rsa/2.0/keys/* /etc/openvpn/

и конфигурационный файл server.conf туда же:
cp /usr/share/doc/openvpn-*/sample-config-files/server.conf /etc/openvpn/

Правим его.
Ниже приведу мой конфиг:
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 10 120
comp-lzo
max-clients 5
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log         /var/log/openvpn.log
verb 0

Теперь включаем форвард в ядре. Для этого изменяем в файле /etc/sysctl.conf

# vi /etc/sysctl.conf
строку
net.ipv4.ip_forward = 0
на строку:
net.ipv4.ip_forward = 1

После этого включаем трансляцию адресов NAT чтобы пакеты от клиентской машины попадая на наш выделенный сервер могли уйти в Интернет, ну и, соответственно, возвращались назад.
 
/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Для VPS на базе OpenVZ команда выглядит так:
 
/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source xxx.xxx.xxx.xxx

где xxx.xxx.xxx.xxx - это Ip адрес сетевого интерфейса вашего VPS.
Сохраняем конфиг iptables:
 
iptables-save > /etc/sysconfig/iptables

Перезагружаем OpenVPN и радуемся настроенному VPN.

 
# service openvpn restart

Более подробно о настройке OpenVPN я писал статье Установка и настройка OpenVPN в CentOS 4. Здесь же описаны основные шаги по установке пакета под centos 6.x

Постоянная ссылка на статью Настройка OpenVPN на CentOS 6.x

Увы, но этот мануал совсем не

Увы, но этот мануал совсем не соответствует реалиям :(

1. Например, команда

# sudo cat /dev/net/tun

выдает:

cat: /dev/net/tun: Операция не позволяется

Или это так и должно быть? Вы вообще не написали, что же должна выдавать эта ваша команда в случае наличия или отсутствия tun.

2. Или:
> А вот дальше начинается самое интересное. Нам нужно сгенерировать ключи для OpenVPN.
> Для этого копируем соответствующий инструментарий в /etc/openvpn:
> # cp -r /usr/share/doc/openvpn-2.2.2/easy-rsa/ /etc/openvpn/

- а вот нету этого каталога .../easy-rsa/ в системе и все тут! И что дальше?

3. Идем дальше:
> Затем необходимо немного изменить файл vars, чтоб он правильно работал в CentOS 6.3.
> Открываем файл /etc/openvpn/easy-rsa/2.0/vars в любимом редакторе и правим:
# vi /etc/openvpn/easy-rsa/2.0/vars
меняем строку 29 с:
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
на:
export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

Оч интерсное заявление! Получается, что создатели OpenVPN дураки, и лишь один автор статьи Д'Артаньян и нашел ошибку, и знает как ее исправить?
То хотя бы объяснил тогда, почему именно так, а не иначе, нужно исправлять эту строку, потому что никакой связи с версией 6.3 в этих строках не наблюдается.
А если бы версия была 6.5 или 6.6, тогда как - для каждой подверсии CentOS создавать свой уникальный мануал по установке???

Уважаемый автор, если вы уж производится какие-то свои шаманства, то хотя бы потрудитесь пояснять, почему именно так вы делаете.

И т.д. и т.п. В-общем, статья написана наспех и содержит ряд погрешностей и недомолвок.
С ее помощью мне так и не удалось установить OpenVPN на CentOS 6.6.
И что самое противное, что все подобные статьи на эту же тему не похожи друг друга.

Отсюда возникает печальный чисто философский вопрос: почему заурядная установка сервера OpenVPN разными авторами реализуется по разному?
Во-первых, это как минимум, свидетельствует об отсутствии унификации подхода (а его многообразие в таком деле и нахрен не нужно), во-вторых, это вызывает недоверие к каждому из этих авторов, которые мутят на свой лад и соответственно своему уровню подготовки.
Должен быть единый унифицированный и понятный подход, а не нужно оригинальничать - это вызывает только ошибки и недоумение.

Совершенно верно Вы отметили.

Совершенно верно Вы отметили. Этот мануал для centos 6.x
Конечно, для современных дистрибутивов он не подходит.

Не понял вашу реплику. Ведь я

Не понял вашу реплику. Ведь я и веду речь как раз о CentOS самой свежей версии - 6.6, и опубликованые мною замечания касаются именно его.

В моей заметке речь шла о

В моей заметке речь шла о Centos 6.3
С тех пор вышло значительное количество обновлений для пакета openvpn.
Там есть изменения. Например необходимо доустанавливать пакет easy-rsa, который теперь по умолчанию не входит в пакет openvpn. Соответственно и пути для файлов меняются.
Возможно попозже я напишу заметку по произошедшим изменениям в установке openvpn для более новых дистрибутивов.

Если в Вашей заметке речь

Если в Вашей заметке речь шла, как вы говорите, о версии 6.3, то не вводите людей в заблуждение и исправьте, пожалуйста, название заметки на 6.3
(а не 6.x, которое, как Вы сами признали, не соответствует положению вещей).

Если в Вашей заметке речь

Если в Вашей заметке речь шла, как вы говорите, о версии 6.3, то не вводите людей в заблуждение и исправьте, пожалуйста, название заметки на 6.3
(а не 6.x, которое, как Вы сами признали, не соответствует положению вещей).

Более подробно о настройке

Более подробно о настройке OpenVPN я писал статье Установка и настройка OpenVPN в CentOS 4.
Писать-то писал, но куда она делась?

Так вот же

По поводу OpenVZ там нужно

По поводу OpenVZ там нужно еще добавить модули IPtables, ip_conntrack для работы трансляции адресов
вот в этой инструкции актуальная инфа как это делать (см ниже0)
на вики и форуме openVZ инфа оказалась бесполезной....
http://dedicatesupport.com/content/nastroika-iptables-v-vds-na-baze-openvz

Добрый день. Спасибо за

Добрый день.

Спасибо за статью, все написано грамотно и по делу. Установил openvpn за пару минут. Подключение происходит, в логе ошибок нет, но IP не меняется. Что я делаю не так?

Спасибо.

Сталкивался, надо запустить

Сталкивался, надо запустить клиент OpenVpn от имени Администратора

centos меня расстраивает так

centos меня расстраивает так же сильно как и федора.

я перешел на дебиан. там все есть.

на моих серверах фряха -

на моих серверах фряха - доволен. а вот с центосом дружу не особо ((

Вот уж чушь ))

Вот уж чушь :)))