«Debian сертификаты openvpn» и «Child Process»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
м (Vix переименовал страницу Debian squeeze open-vpn в Debian сертификаты openvpn)
 
imported>Supportadmin
(Новая страница: «Node обеспечивает трёх-направленный POPEN (3) для модуля child_process. Поток данных можно направля…»)
 
Строка 1: Строка 1:
Описаний установки и настройки системы Open VPN в интернете очень много, но как правило все рекомендации сводятся или к общему описанию того как должна быть организована эта система или пошаговая настройка какого то конкретного дистрибутива Linux или BSD зачастую без толковых описаний своих действий.
Node обеспечивает трёх-направленный POPEN (3) для модуля child_process.
  Все что здесь будет описано выполнялось на '''Linux Debian Squeeze'''. Все действия я буду подробно описывать, что и зачем выполняется,
  в случае если кто то воспользуется этой статьей для настройки на другом дистрибутиве '''Linux''' или операционной системе.
* Первый этап это установка необходимых пакетов, в моем случае из стандартного репозитария: '''openvpn и openvpn-blacklist''', с подтверждением всех необходимых зависимостей которые запросит программа '''aptitude'''.
* Вторым этапом установка программы '''tinyca''', с помощью которой мы будем генерировать ключи и сертификаты для своего сервера и клиентов, так же я объясню почему предпочтительнее  использование именно этой программы, а не встроенных средств пакета '''openvpn'''.
* В каталоге /etc/openvpn/ создаем каталог easy-rsa а в нем keys (тут будут находиться наши ключи):
  mkdir /etc/openvpn/easy-rsa
  mkdir /etc/openvpn/easy-rsa/keys
* Генерируем 2048 битный ключ с помощью алгоритма '''Диффи Хеллмана''' в /etc/openvpn/easy-rsa/keys
  cd  /etc/openvpn/easy-rsa/keys
  openssl dhparam -out dh2048.pem 2048
* Следующим шагом будет генерация ключей с помощью  '''tinyca''', запускаем программу:
[[Файл:Tiny1.png]]
* Пример заполнения полей для создания открытого ключа:
'''tinyca - генерация основного сертификата'''
[[Файл:Tiny2.png]]
* Пример создания сертификатов для сервера и клиента:
'''tinyca - создание сертификатов для сервера и клиента'''
[[Файл:Tiny5.png]]
* Пример экспорта ключа для сервера и клиента - клик правой кнопкой мышки на сертификат или иконку вверху '''export''':
'''tinyca - экспорт сертификатов в формате PKCS#12'''
[[Файл:Tiny3.png]]
*'''tinyca - экспорт сертификатов пароль основного ключа!'''
[[Файл:Tiny4.png]]
* Теперь копируем ключ сервера в  /etc/openvpn/easy-rsa/keys и настраиваем /etc/openvpn/server.conf по примеру:
  mode server
  tls-server
  daemon
  local 83.221.170.103
  port 1194
  proto tcp-server
  # - используемый тип устройства и номер
  dev tap0
  #указываем файл с ключем сервера
  pkcs12 /etc/openvpn/easy-rsa/keys/server_crt.p12
  #указываем файл Диффи Хельман
  dh /etc/openvpn/easy-rsa/keys/dh2048.pem
  #задаем IP-адрес сервера и маску подсети
  ifconfig 10.10.10.1 255.255.255.0
  #### clients ip
  client-config-dir ccd
  push "route 10.10.10.0 255.255.255.0 10.10.10.1"
  keepalive 10 120 # пинг каждые 10 секунд для поддержания канала связи
  client-to-client
  #########
  #auth MD5
  # включаем шифрацию пакетов
  cipher BF-CBC
  keepalive 10 120
  # сжатие трафика
  comp-lzo
  # максимум клиентов
  max-clients 100
  # Не перечитывать ключи после получения
  # SIGUSR1 или ping-restart
  persist-key
  # Не закрывать и переоткрывать TUN\TAP
  # устройство, после получения
  # SIGUSR1 или ping-restart
  persist-tun
  # логгирование (не забудьте создать эту дирректорию /var/log/openvpn/)
  status /var/log/openvpn/openvpn-status.log
  log /var/log/openvpn/openvpn.log
  # Уровень информации для отладки
  verb 5
* Выполняем команду разрешающую dh 2048
  touch /usr/share/openssl-blacklist/blacklist.RSA-2048


* Разрешаем трансляцию ip адресов openvpn
Поток данных можно направлять через стандартные stdin, stdout и stderr дочернего процесса в полностью неблокирующем стиле. (Заметим, что некоторые программы используют внутреннюю линейную буферизации строк ввода/вывода. Это не влияет node.js, но это означает что информация, передаваемая дочернему процессу "потребляется" им не сразу.)
    mcedit /etc/sysctl.conf


    net.ipv4.conf.default.rp_filter=1
Для создания дочернего процесса используйте require('child_process').spawn() или require('child_process').fork(). Семантика каждого немного отличается, и описана ниже.
    net.ipv4.conf.all.rp_filter=1
 
* Фиксируем размер MTU не больше основного канала..
  echo "1">/proc/sys/net/ipv4/ip_no_pmtu_disc
 
* Теперь необходимо прописать то, что будут получать клиенты по dhcp, когда пройдет авторизация, файлы должны лежать в /etc/openvpn/ccd
  echo >klient.crt
  mcedit /etc/openvpn/ccd/klient.crt (имя файла - это имя common name сертификата в программе '''tinyca'''; по нему и происходит присвоение...)
  ### далее настройки в файле klient.crt
  # приcваиваем ip-адрес
  ifconfig-push 10.10.10.11 255.255.255.0
  # присваиваем наш внутренний dns server
  push dhcp-option DNS 10.10.10.1
  # присваиваем dns domain suffix - для win машин очень актуально
  push dhcp-option DOMAIN org
  # роутинг на сети центрального офиса
  push "route 10.10.10.0 255.255.255.0 10.10.10.1"
  # если необходимо то и на другие сети..
  push "route 192.168.5.0 255.255.255.0 10.10.10.1"
 
* теперь запуск сервера в работу:
    /etc/init.d/openvpn start
* следующий этап, настройка клиента openvpn.
 
'''Пример конфигурационного файла клиента:'''
 
client
# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
##;dev tap
dev tap0
# Are we connecting to a TCP or
# UDP server?  Use the same setting as
# on the server.
#proto udp
proto tcp
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
#remote my-server-1 1194
##;remote my-server-2 1194
remote 83.221.170.103 1194
# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite
# Most clients don't need to bind to
# a specific local port number.
nobind
# Downgrade privileges after initialization (non-Windows only)
#user nobody
#group nobody
# Try to preserve some state across restarts.
persist-key
persist-tun
# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here.  See the man page
# if your proxy server requires
# authentication.
#;http-proxy-retry # retry on connection failures
#;http-proxy [proxy server] [proxy port #]
# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
#;mute-replay-warnings
# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key
dh dh2048.pem
### - сертификат клиента!
pkcs12 client-crt.p12
# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server".  This is an
# important precaution to protect against
# a potential attack discussed here:
#  http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server".  The build-key-server
# script in the easy-rsa folder will do this.
ns-cert-type server
# If a tls-auth key is used on the server
# then every client must also have the key.
#;tls-auth ta.key 1
# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
#;cipher x
#cipher AES-128-CBC
# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo
# Set log file verbosity.
verb 4
# Silence repeating messages
mute 20
 
и на последок, канал внутри канала необходимо также настраивать, например если у вас MTU на внешнем 1500,
значит внутренний канал VPN MTU не должен быть больше, а рекомендуемый параметр в данном случае 1496 или 1442
выставляется на клинете параметром '''tun-mtu'''
tun-mtu 1496
 
опыт показывает, что при соединении по 3G MTU канала как правило не выше 1400, чаще 962 - 1276
соответственно берем параметр внешнего канала и отнимаем 62.
полученное значение присваиваем подключаемому клиенту.

Версия от 13:27, 24 августа 2013

Node обеспечивает трёх-направленный POPEN (3) для модуля child_process.

Поток данных можно направлять через стандартные stdin, stdout и stderr дочернего процесса в полностью неблокирующем стиле. (Заметим, что некоторые программы используют внутреннюю линейную буферизации строк ввода/вывода. Это не влияет node.js, но это означает что информация, передаваемая дочернему процессу "потребляется" им не сразу.)

Для создания дочернего процесса используйте require('child_process').spawn() или require('child_process').fork(). Семантика каждого немного отличается, и описана ниже.