Это старая версия документа!


OpenVPN


Так как в SlackWare 12.0 OpenVPN уже установлен (если нет, просто качаем и ставим :), просто переходим к его настройке:

  • eth0(22.22.22.22) - внешний интерфейс и IP-адрес сервера
  • eth1(192.168.10.250) - внутренний интерфейс и IP-адрес сервера
  • tap0(192.168.111.1) - VPN интерфейс и IP-адрес сервера
  • 192.168.10.244 - внутренний DNS сервер

Генерация сертификатов и ключей

Если у Вас нет необходимости создавать свой центр сертификации, и вы будете генерировать ключи только для OpenVPN, можно воспользоваться набором скриптов Easy RSA, который поставляются в комплекте с OpenVPN. Они находятся в директории с документацией: /usr/share/doc/openvpn-версия/easy-rsa.

В первую очередь следует перейти в эту директорию.

 # cd /usr/share/doc/openvpn-2.0.5/easy-rsa

Теперь отредактируйте файл vars.

 export D=`pwd`
 export KEY_CONFIG=$D/openssl.cnf
 export KEY_DIR=/etc/openvpn/keys
 echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
 export KEY_SIZE=1024
 export KEY_COUNTRY=RU
 export KEY_PROVINCE=RU
 export KEY_CITY=MOSCOW
 export KEY_ORG="MYORG"
 export KEY_EMAIL="it@myorg.ru"

Этот файл предназначен для установок переменных среды окружения, перед генерацией ключей. Запускаем его при помощи точки:

 # . ./vars
 NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
 #

Теперь запускаем программу очистки (на всякий пожарный, т.е. очистит весь каталог с ключами).

 # ./clean-all
 #

Осталось запустить процесс генерации ключей и сертификата СА.

 # ./build-ca
 Generating a 1024 bit RSA private key
 ..................++++++
 ......................................................++++++
 writing new private key to 'ca.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into 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 blank
 For 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) [RU]:
 Locality Name (eg, city) [MOSCOW]:
 Organization Name (eg, company) [MYORG]:
 Organizational Unit Name (eg, section) []:myorg
 Common Name (eg, your name or your server's hostname) []:vpnsrv.myorg
 Email Address [it@myorg.ru]:
 #

Некоторые поля заполняются автоматически, ведь не зря мы изменяли содержимое файла vars. Хотя ответы по умолчанию можно было поместить в конфигурационный файл программы openssh ― openssl.cnf.

В директории /etc/openvpn появилась директория keys, в которой находятся файлы сертификата и ключ. Теперь следует создать ключ и сертификат для сервера.

 # ./build-key-server vpnsrv.myorg
 Generating a 1024 bit RSA private key
 ...++++++
 ..++++++
 writing new private key to 'vpnsrv.myorg.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into 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 blank
 For 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) [RU]:
 Locality Name (eg, city) [MOSCOW]:
 Organization Name (eg, company) [MYORG]:
 Organizational Unit Name (eg, section) []:myorg
 Common Name (eg, your name or your server's hostname) []:vpnsrv.myorg
 Email Address [it@myorg.ru]: 
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:password
 An optional company name []:
 Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf
 Check that the request matches the signature
 Signature ok
 The Subject's Distinguished Name is as follows 
 
 countryName           :PRINTABLE:'RU'
 stateOrProvinceName   :PRINTABLE:'RU'
 localityName          :PRINTABLE:'MOSCOW'
 organizationName      :PRINTABLE:'MYORG'
 organizationalUnitName:PRINTABLE:'myorg'
 commonName            :PRINTABLE:'vpnsrv.myorg'
 emailAddress          :IA5STRING:'it@myorg.ru'
 Certificate is to be certified until Dec 11 14:31:19 2015 GMT (3650 days)
 Sign the certificate? [y/n]:y
 
 1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 #

Сгенерируем сертификаты и ключи для клиентской машины. (для каждой новой машины лучше генерировать сертификат по ее имени)

 # ./build-key mashina_01
 Generating a 1024 bit RSA private key
 .......++++++
 .............................................++++++
 writing new private key to 'mashina_01.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into 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 blank
 For 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) [RU]:
 Locality Name (eg, city) [MOSCOW]:
 Organization Name (eg, company) [MYORG]:
 Organizational Unit Name (eg, section) []: myorg
 Common Name (eg, your name or your server's hostname) []:mashina_01
 Email Address [it@myorg.ru]:user@yandex.ru 
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:password
 An optional company name []:
 Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf
 DEBUG[load_index]: unique_subject = "yes"
 Check that the request matches the signature
 Signature ok
 The Subject's Distinguished Name is as follows
 countryName           :PRINTABLE:'RU'
 stateOrProvinceName   :PRINTABLE:'RU'
 localityName          :PRINTABLE:'MOSCOW'
 organizationName      :PRINTABLE:'MYORG'
 commonName            :PRINTABLE:'mashina_01'
 emailAddress          :IA5STRING:'user@yandex.ru'
 Certificate is to be certified until Dec 11 14:39:59 2015 GMT (3650 days)
 Sign the certificate? [y/n]:y 
 
 1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 #

В заключении следует создать Diffie Hellman параметры.

 # ./build-dh
 Generating DH parameters, 1024 bit long safe prime, generator 2
 This is going to take a long time
 ..+.......................................................................+...+
 .....+.....+...................................................................
 ............................+..................+.+...........+.................
 ...+.....++*++*++*
 #

И создать секретный ключ.

 # openvpn --genkey --secret /etc/openvpn/keys/ta.key

Посмотрим содержимое директории /etc/openvpn/keys:

 
 # ls /etc/openvpn/keys/
 01.pem                ca.key               index.txt.old
 02.pem                dh1024.pem           serial      
 03.pem                mashina_01.crt       serial.old
 vpnsrv.myorg.crt      mashina_01.csr       ta.key 
 vpnsrv.myorg.csr      mashina_01.key       
 vpnsrv.myorg.key      index.txt            
 ca.crt                index.txt.attr
                       index.txt.attr.old
 #

Теперь необходимо разобраться какие файлы куда помещать.

Файл Машина Назначение Доступ
ca.crt Сервер и клиенты Сертификат корневого СА Публичный
ca.key Только на сервере Необходим для подписи других сертификатов Секретный
1024.pem Только на сервере Diffie Hellman параметры Публичный
vpnsrv.myorg.crt Только на сервере Сертификат сервера Публичный
vpnsrv.myorg.key Только на сервере Ключ сервера Секретный
mashina_01.crt Только на клиенте Сертификат клиента Публичный
mashina_01.key Только на клиенте Ключ клиента Секретный
ta.key Сервер и клиенты Ключ аутентификации Секретный

Файлы *.csr можно удалить.

Скопируйте все необходимые файлы на клиенты в директорию /etc/openvpn/keys. Для клиента mashina_01, я скопировал четыре файла: ca.crt, ta.key, mashina_01.crt и mashina_01.key.

На всякий пожарный проверьте действительность создаваемых сертификатов.

 #openssl verify -CApath /etc/openvpn/keys -CAfile ca.crt -purpose sslclient mashina_01.crt

Для сервера следует изменить значение поля -purpose на sslserver.

Теперь настраиваем сервер. Для этого создаём файл /etc/openvpn/openvpn.conf :

 cd /etc/openvpn
 local 22.22.22.22 # внешний IP-адрес
 proto udp # протокол
 port 1194 # порт
 comp-lzo  # компрессия
 verb 3    # уровень логов 
 log-append /var/log/openvpn.log  # где логии лежат
 daemon
 dev tap   # интерфейс
 persist-tun
 persist-key
 mode server
 tls-server
 ifconfig-pool 192.168.111.2 192.168.111.52 # устанавливаем диапазон выдаваемых адресов
 ifconfig 192.168.111.1 255.255.255.0 192.168.10.250
 client-to-client
 push "route 192.168.111.0 255.255.255.0"
 push "route-gateway 192.168.111.1"
 push "redirect-gateway"
 push "dhcp-option DNS 192.168.111.1"
 push "dhcp-option DNS 192.168.10.244"
 cipher DES-EDE3-CBC
 ca /etc/openvpn/keys/ca.crt
 dh /etc/openvpn/keys/dh1024.pem
 cert /etc/openvpn/keys/vpnserv.myorg.crt
 key /etc/openvpn/keys/vpnserv.myorg.key
 tls-auth /etc/openvpn/keys/ta.key 0 # 0 – означает сервер, 1 - клиент
 user nobody  # понижаем права 
 group nobody
 keepalive 10 600 # опрашиваем каждые 10 сек., если в течении 10 мин отклика нет – отрубаем!
 #duplicate-cn # расскомментарить, если один сертификат на всех пользователей.

Настраиваем iptables :

 LAN_IP="192.168.10.250"
 LAN_IP_RANGE="192.168.10.0/24"
 LAN_IFACE="eth0"
 
 VPN_IP="192.168.111.1"
 VPN_IP_RANGE="192.168.111.0/24"
 VPN_IFACE="tap0"
 
 iptables -A INPUT -p udp --dport 1194 -j ACCEPT
 iptables -A INPUT -i tap+ -j ACCEPT
 iptables -A FORWARD -s 192.168.111.0/24 -d 0.0.0.0/0 -j ACCEPT
 iptables -t nat -A POSTROUTING -s $VPN_IP_RANGE -o $LAN_IFACE -j MASQUERADE 

Настраиваем клиента (Win XP)

Скачиваем ТУТ файл и устанавливаем на клиенте.
Устанавливаем в каталог, например, C:\OpenVPN , создаем там подкаталог key и копируем туда наши клиентские ключи : ca.crt, ta.key, mashina_01.crt и mashina_01.key.

В каталоге C:\OpenVPN\config создаём файл client.ovpn с содержимым:

 client
 dev tap
 proto udp
 remote 22.22.22.22 1194
 resolv-retry infinite
 nobind
 persist-key
 persist-tun
 ca C:\\OpenVPN\\key\\ca.crt
 cert C:\\OpenVPN\\key\\mashina_01.crt
 key C:\\OpenVPN\\key\\mashina_01.key
 tls-auth C:\\OpenVPN\\key\\ta.key 1
 cipher DES-EDE3-CBC
 comp-lzo
 verb 3
 mute 5
 ping 10
 mtu-test
 tun-mtu 1500
 tun-mtu-extra 32
 mssfix 1450
 pull
 route-method exe
 explicit-exit-notify 10
 show-net-up

И соединяемся… - иконка с двумя компьютерами с землёй, правый клик на них - connect
Всё, дальше работаем как с локалкой.

Настраиваем клиента (Linux Slackware)

Скачиваем KVpnc (клиент VPN под KDE) и устанавливаем.
В каталог /etc/openvpn/keys скидываем наши клиентские ключи и сертификаты : ca.crt, ta.key, mashina_01.crt и mashina_01.key.
И создаем файл /etc/openvpn/openvpn.conf со следующим содержимым:

 client
 dev tap0
 proto udp
 remote 22.22.22.22 1194
 resolv-retry infinite
 nobind
 persist-key
 persist-tun
 ca /etc/openvpn/keys/ca.crt
 cert /etc/openvpn/keys/mashina_01.crt
 key /etc/openvpn/keys/mashina_01.key
 tls-auth /etc/openvpn/keys/ta.key 1
 cipher DES-EDE3-CBC
 comp-lzo
 verb 3
 mute 5
 ping 10
 mtu-test
 tun-mtu 1500
 tun-mtu-extra 32
 mssfix 1450
 pull
 route-method exe
 explicit-exit-notify 10

Запускаем KVpnc и импортируем наш файл openvpn.conf

Указываем его место расположение

И получив сообщение об успешном импорте, соединяемся нажав на кнопку «'Connect».

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


=== Ссылался на…. ====
http://wiki.kryukov.biz/wiki/Openvpn
http://www.nexttel.kz/asd-ovpn.htm
http://www.hackedpro.org/index.php?name=Pages&op=page&pid=29&pagenum=1

Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:openvpn (generated for current page)