imported>Vix |
imported>Supportadmin |
Строка 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.
| |
| полученное значение присваиваем подключаемому клиенту.
| |