Установка и настройка OpenVPN

Опубликовано nekit - ср, 29/08/2012 - 15:56

В данной статье описывается один из методов организации доступа к локальным ресурсам удаленной сети посредством технологии VPN. Я знаю всего пару хороших VPN серверов, работающих под FreeBSD, которые позволяют решить широкий круг задач: MPD и OpenVPN. Каждый из них обладает своими достоинствами и недостатками, поэтому выбирать какой ставить, следует в зависимости от поставленной задачи. К примеру, с помощью MPD можно сделать VPN сервер, авторизующий клиентов только по паре логин/пароль, к которому можно подключиться стандартными средствами Windows. В тоже время для подключения к OpenVPN, клиенту будет необходим, как минимум, определенный сертификат, а так же одноименное клиентское приложение. Зато OpenVPN позволяет организовать соединение, которое работает на втором уровне сетевой модели OSI, что открывает доступ для широковещательного трафика. Именно поэтому был выбран сервер OpenVPN для решения следующей задачи: организация доступа пользователям к локальным ресурсам удаленной сети, с возможностью циркуляции по соединению широковещательного трафика.

Итак, идем в порты и устанавливаем OpenVPN. На момент написания статьи в портах доступен сервер версии 2.2.2. В окне параметров сборки я ничего не изменял.
  1. # cd /usr/ports/security/openvpn
  2. # make install clean
Далее необходимо создать сертификаты для сервера и нарисовать конфигурационный файл. Для создания сертификатов с портом также ставится набор скриптов, который находится тут - /usr/local/share/doc/openvpn/easy-rsa/2.0. Для удобства, я скопировал их в папку с конфигурационными файлами OpenVPN - /usr/local/etc/openvpn.
  1. # mkdir /usr/local/etc/openvpn/easy-rsa
  2. # cp -R /usr/local/share/doc/openvpn/easy-rsa/2.0 /usr/local/etc/openvpn/easy-rsa
Теперь надо отредактировать конфигурационный файл для скриптов - /usr/local/etc/openvpn/easy-rsa/vars. Я изменил только эти параметры:
  1. # Если у вас паранойя, то увеличьте это значение до 2048 бит.
  2. # Это замедлит процесс согласования TLS и генерацию
  3. # ключа Диффи-Хеллмана.
  4. export KEY_SIZE=1024
  5.  
  6. # Время жизни сертификатов.
  7. export CA_EXPIRE=9999
  8. export KEY_EXPIRE=9999
  9.  
  10. # Эти значения используются при создании сертификатов.
  11. # Они всегда должны быть заданы.
  12. export KEY_COUNTRY="RU"
  13. export KEY_PROVINCE="Russia"
  14. export KEY_CITY="Yekaterinburg"
  15. export KEY_ORG="www.example.org"
  16. export KEY_EMAIL="nekit@info-x.org"
  17. export KEY_CN="vpn.example.org"
  18. export KEY_NAME="Nekit"
Теперь можно приступить к созданию сертификатов. Для этого переключаемся в стандартную оболочку и инициализируем переменные окружения. Все действия осуществляются в директории - /usr/local/etc/openvpn/easy-rsa.
  1. ### Переключаемся в стандартную оболочку
  2. # sh
  3.  
  4. ### Инициализируем переменные окружения
  5. # . ./vars
  6. # ./clean-all
Создаем главный сертификат и ключ:
  1. # ./build-ca
  2. Generating a 1024 bit RSA private key
  3. .................++++++
  4. ..............++++++
  5. writing new private key to 'ca.key'
  6. -----
  7. You are about to be asked to enter information that will be incorporated
  8. into your certificate request.
  9. What you are about to enter is what is called a Distinguished Name or a DN.
  10. There are quite a few fields but you can leave some blank
  11. For some fields there will be a default value,
  12. If you enter '.', the field will be left blank.
  13. -----
  14. Country Name (2 letter code) [RU]:
  15. State or Province Name (full name) [Russia]:
  16. Locality Name (eg, city) [Yekaterinburg]:
  17. Organization Name (eg, company) [www.example.org]:
  18. Organizational Unit Name (eg, section) [none]:
  19. Common Name (eg, your name or your server's hostname) [vpn.example.org]:
  20. Name [Nekit]:
  21. Email Address [nekit@info-x.org]:
Генерируем сертификат и ключ для сервера:
  1. # openvpn --genkey --secret /usr/local/etc/openvpn/easy-rsa/keys/ta.key
  2. # ./build-key-server server
  3. Generating a 1024 bit RSA private key
  4. ............................................................................................++++++
  5. .....++++++
  6. writing new private key to 'server.key'
  7. -----
  8. You are about to be asked to enter information that will be incorporated
  9. into your certificate request.
  10. What you are about to enter is what is called a Distinguished Name or a DN.
  11. There are quite a few fields but you can leave some blank
  12. For some fields there will be a default value,
  13. If you enter '.', the field will be left blank.
  14. -----
  15. Country Name (2 letter code) [RU]:
  16. State or Province Name (full name) [Russia]:
  17. Locality Name (eg, city) [Yekaterinburg]:
  18. Organization Name (eg, company) [www.example.org]:
  19. Organizational Unit Name (eg, section) [none]:
  20. Common Name (eg, your name or your server's hostname) [server]:
  21. Name [Nekit]:
  22. Email Address [nekit@info-x.org]:
  23.  
  24. Please enter the following 'extra' attributes
  25. to be sent with your certificate request
  26. A challenge password []:
  27. An optional company name []:
  28. Using configuration from /usr/local/etc/openvpn/test/openssl-0.9.8.cnf
  29. Check that the request matches the signature
  30. Signature ok
  31. The Subject's Distinguished Name is as follows
  32. countryName           :PRINTABLE:'RU'
  33. stateOrProvinceName   :PRINTABLE:'Russia'
  34. localityName          :PRINTABLE:'Yekaterinburg'
  35. organizationName      :PRINTABLE:'www.example.org'
  36. organizationalUnitName:PRINTABLE:'none'
  37. commonName            :PRINTABLE:'server'
  38. name                  :PRINTABLE:'Nekit'
  39. emailAddress          :IA5STRING:'nekit@info-x.org'
  40. Certificate is to be certified until Jan 13 16:39:10 2040 GMT (9999 days)
  41. Sign the certificate? [y/n]:y
  42.  
  43. 1 out of 1 certificate requests certified, commit? [y/n]y
  44. Write out database with 1 new entries
  45. Data Base Updated
Генерируем ключ Диффи-Хеллмана:
  1. # ./build-dh
  2. Generating DH parameters, 1024 bit long safe prime, generator 2
  3. This is going to take a long time
  4. ........+.............................................+........
Все файлы после работы скриптов помещаются в директорию keys. Теперь можно переходить к настройке сервера. Приводим файл /usr/local/etc/openvpn/server.conf примерно к такому виду:
  1. # На каком IP адресе сервер будет принимать соединения от клиентов.
  2. # Можно не задавать, тогда сервер будет принимать подключения на всех интерфейсах.
  3. ;local a.b.c.d
  4.  
  5. # На какой порт принимать соединения?
  6. port 1194
  7.  
  8. # TCP или UDP сервер?
  9. ;proto tcp
  10. proto udp
  11.  
  12. # "dev tun" создаст маршрутизируемый IP туннель.
  13. # "dev tap" создаст Ethernet туннель.
  14. # Укажите здесь, например, "dev tap0", если вам нужно сделать мост.
  15. # Также вам нужно будет перед запуском сервера создать интерфейс
  16. # с таким же именем.
  17. dev tap0
  18. ;dev tun
  19.  
  20. # Корневой сертификат SSL/TLS. Сервер и каждый клиент должны иметь
  21. # собственные сертификаты и ключи. Но корневой сертификат (только он)
  22. # один для всех.
  23. ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt
  24. cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt
  25. key /usr/local/etc/openvpn/easy-rsa/keys/server.key
  26.  
  27. # Ключ Диффи-Хеллмана.
  28. dh /usr/local/etc/openvpn/easy-rsa/keys/dh1024.pem
  29.  
  30. # Данный параметр говорит OpenVPN работать в качестве сервера
  31. # и использовать указанную здесь подсеть. Первый из подсети адрес
  32. # сервер возьмет себе, остальные же будут выдаваться клиентам.
  33. # Закомментируйте данный параметр, если вам нужен режим моста.
  34. #server 10.8.0.0 255.255.255.0
  35.  
  36. # В этом файле сервер сохраняет данные вида: клиент <-> IP адрес.
  37. # Если сервер аварийно завершится, то после возобновления работы
  38. # сервера, восстановивший соединение клиент получит тот же
  39. # IP адрес, который был до обрыва.
  40. #ifconfig-pool-persist ipp.txt
  41.  
  42. # Включить режим сервера для моста. Только сначала вам необходимо
  43. # подготовить в ОС мост и добавить в него TAP интерфейс. Здесь
  44. # указывается 4 параметра: IP и маска моста, а также пул адресов,
  45. # адреса из которого будут выданы клиентам.
  46. #server-bridge 192.168.7.250 255.255.255.0 192.168.7.51 192.168.7.100
  47.  
  48. # Смысл такой же, как и в предыдущем параметре, только выдачей
  49. # адресов клиентам будет заниматься DHCP сервер (должен быть настроен отдельно).
  50. server-bridge nogw
  51.  
  52. # Маршруты, которые будут добавлены на клиентской машине
  53. # при подключении.
  54. ;push "route 192.168.10.0 255.255.255.0"
  55. ;push "route 192.168.20.0 255.255.255.0"
  56.  
  57. # Если раскомментировать данный параметр, то для клиентов
  58. # эта машина будет шлюзом по умолчанию.
  59. ;push "redirect-gateway def1 bypass-dhcp"
  60.  
  61. # Можно передать клиенту дополнительные параметры для сетевого
  62. # подключения, например адреса DNS или WINS серверов.
  63. # За дополнительной информацией идти по этой ссылке:
  64. # http://openvpn.net/faq.html#dhcpcaveats
  65. ;push "dhcp-option DNS 208.67.222.222"
  66. ;push "dhcp-option DNS 208.67.220.220"
  67.  
  68. # Раскомменитруйте данный параметр, чтобы клиенты могла видеть
  69. # друг друга. По умолчанию клиенты могут отправлять запросы
  70. # только серверу.
  71. client-to-client
  72.  
  73. # Раскомментируйте данный параметр, если вы хотите разрешить
  74. # подключение нескольких клиентов с одинаковым значением поля
  75. # Common Name в сертификате.
  76. duplicate-cn
  77.  
  78. # Проверять каждые 10 секунд жив ли клиент. Если за 120 секунд он
  79. # не откликнется, то соединение будет разорвано.
  80. keepalive 10 120
  81.  
  82. # Для дополнительной безопасности (block DoS attacks and
  83. # UDP port flooding) сгенерируйте ключ командой
  84. #   openvpn --genkey --secret ta.key
  85. # и укажите путь к нему здесь. Второй параметр должен быть
  86. # '0' для сервера и '1' для клиента.
  87. tls-auth /usr/local/etc/openvpn/easy-rsa/keys/ta.key 0 # This file is secret
  88.  
  89. cipher BF-CBC        # Blowfish (default)
  90. ;cipher AES-128-CBC   # AES
  91. ;cipher DES-EDE3-CBC  # Triple-DES
  92.  
  93. # Разрешить компрессию трафика по соединению.
  94. # Если включено на сервере, то у клиента тоже должно быть.
  95. comp-lzo yes
  96.  
  97. # Максимальное количество одновременных соединений.
  98. max-clients 100
  99.  
  100. # Группа и пользователь, под которыми будет работать демон сервера.
  101. user nobody
  102. group nobody
  103.  
  104. persist-key
  105. persist-tun
  106.  
  107. # Выводить информацию о текущих подключениях в данный файл.
  108. # Файл обнуляется каждую минуту, а запись идет с самого начала.
  109. status /var/log/openvpn/openvpn-status.log
  110.  
  111. # Писать логи в файл.
  112. log         /var/log/openvpn/openvpn.log
  113. log-append  /var/log/openvpn/openvpn.log
  114.  
  115. # Уровень отладки:
  116. # 0 - выводятся только фатальные ошибки
  117. # 4 - рекомендуется
  118. # 5 и 6  - помогут при отладке
  119. # 9 - выводится все подряд
  120. verb 3
  121.  
  122. # Не больше указанного здесь количества одинаковых (повторяющихся)
  123. # сообщений будет выведено в файл.
  124. ;mute 20
Стоит обратить внимание на выбранный сетевой интерфейс tap (который эмулирует канал Ethernet), именно по нему может циркулировать широковещательный трафик. После создания конфига необходимо разрешить в /etc/rc.conf запуск OpenVPN при старте системы, а также настроить автоматическое создание и конфигурирование интерфейсов bridge и tap. Сначала добавляем необходимые модули в /boot/loader.conf:
  1. if_bridge_load="YES"
  2. if_tap_load="YES"
Теперь делаем примерно такие записи в /etc/rc.conf:
  1. cloned_interfaces="bridge0 tap0"
  2. ifconfig_nfe0="up"
  3. ifconfig_tap0="up"
  4. ifconfig_bridge0="inet 192.168.7.250 netmask 0xffffff00 broadcast 192.168.7.255 addm nfe0 addm tap0"
  5.  
  6. openvpn_enable="YES"
  7. openvpn_if="tap"
  8. openvpn_configfile="/usr/local/etc/openvpn/server.conf"
Чтобы не перезагружать компьютер можно выполнить следующие команды, которые создают мост, добавляют в него интерфейсы и запускают OpenVPN:
  1. # kldload if_tap
  2. # kldload if_bridge
  3.  
  4. # ifconfig tap0 create
  5. # ifconfig bridge0 create
  6. # ifconfig bridge0 addm nfe0
  7. # ifconfig bridge0 addm tap0
  8. # ifconfig bridge0 inet 192.168.7.250 netmask 0xffffff00
  9.  
  10. # service openvpn start
Можно проверить запустился ли сервер:
  1. # sockstat -4 -l | grep openvpn
  2. nobody   openvpn    1316  4  udp4   *:1194                *:*
Если сервер OpenVPN не запустился, значит нужно смотреть логи и искать ошибку. Если все заработало, то можно приступить к настройке клиента. С клиентом все проще, для его работы нужно сгенерировать сертификат и нарисовать конфиг. Также клиенту надо будет предоставить ранее сгенерированный корневой сертификат. Генерируем сертификат для клиента:
  1. # pwd
  2. /usr/local/etc/openvpn/easy-rsa
  3.  
  4. # sh
  5. # . ./vars
  6. # ./build-key client
  7. Generating a 1024 bit RSA private key
  8. .....................................++++++
  9. .........++++++
  10. writing new private key to 'client.key'
  11. -----
  12. You are about to be asked to enter information that will be incorporated
  13. into your certificate request.
  14. What you are about to enter is what is called a Distinguished Name or a DN.
  15. There are quite a few fields but you can leave some blank
  16. For some fields there will be a default value,
  17. If you enter '.', the field will be left blank.
  18. -----
  19. Country Name (2 letter code) [RU]:
  20. State or Province Name (full name) [Russia]:
  21. Locality Name (eg, city) [Yekaterinburg]:
  22. Organization Name (eg, company) [www.example.org]:
  23. Organizational Unit Name (eg, section) [none]:
  24. Common Name (eg, your name or your server's hostname) [client]:
  25. Name [Nekit]:
  26. Email Address [nekit@info-x.org]:
  27.  
  28. Please enter the following 'extra' attributes
  29. to be sent with your certificate request
  30. A challenge password []:
  31. An optional company name []:
  32. Using configuration from /usr/local/etc/openvpn/test/openssl-0.9.8.cnf
  33. Check that the request matches the signature
  34. Signature ok
  35. The Subject's Distinguished Name is as follows
  36. countryName           :PRINTABLE:'RU'
  37. stateOrProvinceName   :PRINTABLE:'Russia'
  38. localityName          :PRINTABLE:'Yekaterinburg'
  39. organizationName      :PRINTABLE:'www.example.org'
  40. organizationalUnitName:PRINTABLE:'none'
  41. commonName            :PRINTABLE:'client'
  42. name                  :PRINTABLE:'Nekit'
  43. emailAddress          :IA5STRING:'nekit@info-x.org'
  44. Certificate is to be certified until Jan 14 06:13:31 2040 GMT (9999 days)
  45. Sign the certificate? [y/n]:y
  46.  
  47. 1 out of 1 certificate requests certified, commit? [y/n]y
  48. Write out database with 1 new entries
  49. Data Base Updated
Теперь можно установить клиент OpenVPN. Я буду устанавливать и настраивать его на винде. Скачать дистрибутив OpenVPN для Windows можно отсюда. По оканчании установки идем в папку куда был установлен OpenVPN и создаем в ней подпапку config. В папке config должны находиться следующие файлы:
  • Корневой сертификат
  • Клиентский сертификат и ключ
  • Ключ, созданный для дополнительной защиты (его можно и не использовать, но если сервер его использует, то и клиент должен)
Также там должен быть конфигурационный файл (с расширением *.ovpn), содержание которого имеет такой вид:
  1. client
  2.  
  3. # Адрес сервера
  4. remote vpn.example.org 1194
  5.  
  6. # Использовать TCP или UDP?
  7. proto udp
  8.  
  9. # Проверить доступность сервера. Данная опция может быть полезна
  10. # людям, которые выходят в интернет через соединения, которые
  11. # часто обрываются.
  12. resolv-retry infinite
  13.  
  14. nobind
  15.  
  16. dev tap
  17. ;dev tun
  18.  
  19. ca ca.crt
  20. cert client.crt
  21. key client.key
  22.  
  23. keepalive 10 120
  24. tls-auth ta.key 1
  25. cipher BF-CBC        # Blowfish (default)
  26. comp-lzo
  27. persist-key
  28. persist-tun
Когда все приготовления закончены, тогда можно запускать OpenVPN и подключаться к серверу. Если что-то идет не так, то читаем логи и ищем ошибки. Также, за помощью можно обратиться в форум.

сб, 16/01/2016 - 21:45

пн, 06/07/2020 - 20:03

вт, 07/07/2020 - 11:47

вт, 07/07/2020 - 11:55

вт, 07/07/2020 - 12:37

Добавить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.