Указываем на каком IP будет работать OpenVPN сервер (тут 192.168.1.100 – внешний IP сервера):
# Which local IP address should OpenVPN# listen on? (optional)local 192.168.1.100
Задаём OpenVPN сеть
# Configure server mode and supply a VPN subnet# for OpenVPN to draw client addresses from.# The server will take 10.8.0.1 for itself,# the rest will be made available to clients.# Each client will be able to reach the server# on 10.8.0.1. Comment this line out if you are# ethernet bridging. See the man page for more info.server 10.0.0.0 255.255.255.0
Передаём параметр клиентам, благодаря которому весь их трафик будет направляться через OpenVPN
# If enabled, this directive will configure# all clients to redirect their default# network gateway through the VPN, causing# all IP traffic such as web browsing and# and DNS lookups to go through the VPN# (The OpenVPN server machine may need to NAT# or bridge the TUN/TAP interface to the internet# in order for this to work properly).push "redirect-gateway def1 bypass-dhcp"
Теперь зададим DNS-сервера для клиентов:
# Certain Windows-specific network settings# can be pushed to clients, such as DNS# or WINS server addresses. CAVEAT:# http://openvpn.net/faq.html#dhcpcaveats# The addresses below refer to the public# DNS servers provided by opendns.com.push "dhcp-option DNS 10.0.0.1"push "dhcp-option DNS 8.8.8.8"
Изменим пользователя, под которым будет работать OpenVPN демон:
# It's a good idea to reduce the OpenVPN# daemon's privileges after initialization.## You can uncomment this out on# non-Windows systems.user nobodygroup nobody
Меняем настройки логирования:
# Output a short status file showing# current connections, truncated# and rewritten every minute.status /var/log/openvpn-status.log...# By default, log messages will go to the syslog (or# on Windows, if running as a service, they will go to# the "Program FilesOpenVPNlog" directory).# Use log or log-append to override this default.# "log" will truncate the log file on OpenVPN startup,# while "log-append" will append to it. Use one# or the other (but not both).;log openvpn.loglog-append /var/log/openvpn.log
Переходим в созданную нами директорию для сертификатов
cd /etc/openvpn/easy-rsa
Перечитаем файл vars
# source ./varsNOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Удаляем старые ключи:
./clean-all
Создаём корневой сертификат:
./build-ca
После этого шага в каталоге /etc/openvpn/easy-rsa/keys появляются новые CA (Central Authority) сертификаты:
./build-caGenerating a 2048 bit RSA private key..................+++..........................................................+++writing new private key to 'ca.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [RU]:State or Province Name (full name) [NW]:Locality Name (eg, city) [Moscow]:Organization Name (eg, company) [OrgName]:Organizational Unit Name (eg, section) [MyOrganizationalUnit]:Common Name (eg, your name or your server's hostname) [server]:vpn.example.comName [EasyRSA]:
Далее создаём корневой сертификат для самого сервера:
./build-key-server serverGenerating a 2048 bit RSA private key.+++...............................................................+++writing new private key to 'server.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [RU]:State or Province Name (full name) [NW]:Locality Name (eg, city) [Moscow]:Organization Name (eg, company) [OrgName]:Organizational Unit Name (eg, section) [MyOrganizationalUnit]:Common Name (eg, your name or your server's hostname) [server]:vpn.example.comName [EasyRSA]:Email Address [me@myhost.mydomain]:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnfCheck that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName :PRINTABLE:'RU'stateOrProvinceName :PRINTABLE:'NW'localityName :PRINTABLE:'Moscow'organizationName :PRINTABLE:'OrgName'organizationalUnitName:PRINTABLE:'MyOrganizationalUnit'commonName :PRINTABLE:'vpn.example.com'name :PRINTABLE:'EasyRSA'emailAddress :IA5STRING:'me@myhost.mydomain'Certificate is to be certified until Apr 18 12:43:37 2025 GMT (3650 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated
Генерируем ключ Диффи-Хелмана (Diffie Hellman). Алгоритм Диффи-Хелмана позволяет получить двум сторонам общий секретный ключ, использующийся для дальнейшего симметричного шифрования данных:
./build-dhGenerating DH parameters, 2048 bit long safe prime, generator 2This is going to take a long time..............................................+......+................................................+.........................................................................................................................................................+............................................................................................................+..............................................................................................................................................+...................................................................................................+........+.............................................................................................................+............
Процесс занимает от 2 до 5 минут. Можно выпить чашечку кофе.
Приступим к созданию клиентских сертификатов – повторяем отдельно для каждого клиента:
./build-key clientGenerating a 2048 bit RSA private key.....................................+++..+++writing new private key to 'client.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [RU]:State or Province Name (full name) [NW]:Locality Name (eg, city) [Moscow]:Organization Name (eg, company) [OrgName]:Organizational Unit Name (eg, section) [MyOrganizationalUnit]:Common Name (eg, your name or your server's hostname) [client]:Name [EasyRSA]:Email Address [me@myhost.mydomain]:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnfCheck that the request matches the signatureSignature okThe Subject's Distinguished Name is as followscountryName :PRINTABLE:'RU'stateOrProvinceName :PRINTABLE:'NW'localityName :PRINTABLE:'Moscow'organizationName :PRINTABLE:'OrgName'organizationalUnitName:PRINTABLE:'MyOrganizationalUnit'commonName :PRINTABLE:'client'name :PRINTABLE:'EasyRSA'emailAddress :IA5STRING:'me@myhost.mydomain'Certificate is to be certified until Apr 18 12:57:59 2025 GMT (3650 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated
Поскольку сертификаты будут храниться у клиентов, то лучше на данных пунктах задать имя и пароль:
Не знаю по какой причине, но в версии 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:
Затем необходимо немного изменить файл vars, чтоб он правильно работал в CentOS 6.3. Открываем файл /etc/openvpn/easy-rsa/2.0/vars в любимом редакторе и правим:
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 чтобы пакеты от клиентской машины попадая на наш выделенный сервер могли уйти в Интернет, ну и, соответственно, возвращались назад.
Увы, но этот мануал совсем не соответствует реалиям :(
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.3
С тех пор вышло значительное количество обновлений для пакета openvpn.
Там есть изменения. Например необходимо доустанавливать пакет easy-rsa, который теперь по умолчанию не входит в пакет openvpn. Соответственно и пути для файлов меняются.