Разное

Push route openvpn: — PUSH тебе твой собственный ROUTE – youngblogger на hoster-ok.com

Содержание

— PUSH тебе твой собственный ROUTE – youngblogger на hoster-ok.com

К бессонной ночи привёло “молчание логов” OpenVPN сервера при невозможности прочесть файл.

Имеется OpenVPN сервер, к которому подключены VPN клиенты. За некоторыми клиентами находятся сети которые необходимо анонсировать другим клиентам OpenVPN и обеспечить маршрутизацию.

Для этого в OpenVPN предусмотрены четыре параметра находящиеся в двух разных файлах которые позволяют настроить роутинг в сети VPN клиента.

Файл /etc/openvpn/*.conf


push "route 192.168.33.0 255.255.255.0"
route 192.168.33.0 255.255.255.0
client-config-dir ccd-vpn03

client-config-dir определяет каталог в котором будут находиться файлы в которых будут объявлены сети клиентов. Имена файлов должны совпадать с CommonName сертификата клиента за которым находятся сети объявленные в файле. Например если за клиентом с сертификатом у которого CN равен “vpn03.gw01.common-client2” находится сеть 192.168.33.0 255.255.255.0 то файл /etc/openvpn/ccd-vpn03/vpn03.gw01.common-client2


iroute 192.168.33.0 255.255.255.0

При правильном поведении сервер должен посылать VPN клиентам команду PUSH ROUTE но обязан исключать сети самих клиентов которым посылается команда PUSH. Тоесть в нашем случае сервер из всего что отправлял клиенту с сертификатом “vpn03.gw01.common-client2” должен был исключить сеть 192.168.33.0 255.255.255.0 так как она объявлена в файле в директиве iroute. Однако он вёл себя так словно этого файла не существовало и поступал так:


Tue Dec  1 17:25:58 2015 us=889326 vpn03.gw01.common-client2/90.91.92.93:56801 PUSH: Received control message: 'PUSH_REQUEST'
Tue Dec  1 17:25:58 2015 us=889470 vpn03.gw01.common-client2/90.91.92.93:56801 SENT CONTROL [vpn03.gw01.common-client2]: 'PUSH_REPLY,route 10.10.5.0 255.255.255.0,route 192.168.33.0 255.255.255.0,route 192.168.103.0 255.255.255.0,explicit-exit-notify 3,route 10.10.5.1,topology net30,ping 10,ping-restart 60,ifconfig 10.10.5.6 10.10.5.5' (status=1)

На стороне роутера


Tue Dec  1 16:26:00 2015 us=261727 PUSH: Received control message: 'PUSH_REPLY,route 10.10.5.0 255.255.255.0,route 192.168.33.0 255.255.255.0,route 192.168.103.0 255.255.255.0,explicit-exit-notify 3,route 10.10.5.1,topology net30,ping 10,ping-restart 60,ifconfig 10.10.5.6 10.10.5.5'

Видно что и на сервере и на клиенте присутствует маршрут route 192.168.33.0 255.255.255.0 который приводит к вот такой ерунде на стороне клиента:


root@home-anbriz:~# ip route | sort
10.10.5.0/24 via 10.10.5.5 dev tun0 
10.10.5.1 via 10.10.5.5 dev tun0 
10.10.5.5 dev tun0  proto kernel  scope link  src 10.10.5.6 
172.16.88.0/24 dev eth0  proto kernel  scope link  src 172.16.88.226 
192.168.103.0/24 via 10.10.5.5 dev tun0 
192.168.223.0/24 via 10.10.5.5 dev tun0 
192.168.33.0/24 dev br-lan  proto kernel  scope link  src 192.168.33.254 
192.168.33.0/24 via 10.10.5.5 dev tun0 
default via 172.16.88.1 dev eth0  proto static 

Как видно, подствеченные строки указывают один и тот же маршрут через разные интерфейсы. Но то что свой собственный “железный” маршрут прописан через виртуальный интефейс не идёт ни в какие ворота. Вполне логично, что маршрутизация на клиенте “ломается” самым серьёзным образом.

Всё это наводит на мысль что инструкция iroute 192.168.33.0 255.255.255.0 была сервером проигнорирована, либо не связана с CommonName сертификата грубо говоря сервер не признал что у клиента есть свои сети.

Когда файл недоступен первое средство проверить SELinux метки и даже отключить на время SELinux. Но в этом случае мне это не помогло.

Ларчик открылся только утром следующего дня, когда все танцы с бубнами закончились и остались два последних средства strace и отладка исходников.


strace
open("/etc/openvpn/ccd-vpn03/vpn03.gw01.common-client2", O_RDONLY) = -1 EACCES (Permission denied)

И о этом ни единого байта в логах OpenVPN хотя об этом необходимо кричать!


ps ax -o gid,uid,pid,cmd | grep openvpn
   99    99 10883 /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/vpn03.gw01.common.com-server-udp-11967.pid --config vpn03.gw01.common.com-server-udp-11967.conf --cd /etc/openvpn

Процесс выполняется от gid=99 и uid=99, а это nobody nogroup. А права на файл?


[root@gw1 ccd-vpn03]# ls -la
total 16
drwxr-xr-x.  2 root root 4096 Nov 30 11:09 .
drwxr-xr-x. 24 root root 4096 Nov 30 10:59 ..
-rw-------.  1 root root   74 Nov 30 11:09 vpn03.gw01.common-client2
-rw-------.  1 root root   35 Nov 30 03:45 vpn03.gw01.common-client3

Только root может читать писать эти файлы.

В отличии от других конфигурационных файлов /etc/openvpn/ccd-vpn03/vpn03.gw01.common-client2 читается во время подсоединения клиента и ошибку стоит ловить в это время. И читается это файл непосредственно сервисом уже после переключения в nobody nogroup.

Вот для сравнения как выглядят логи сервера с заблокированным файлом и с разблокированным:
Вот как выглядит начало иницииации соединия при рестарте со стороны клиента:

файл нормально прочитан


Tue Dec  1 17:25:56 2015 us=817182 MULTI: new connection by client 'vpn03.gw01.common.com-client2' will cause previous active sessions by this client to be dropped.  Remember to use the --duplicate-cn option if you want multiple clients using the same certificate or username to concurrently connect.
Tue Dec  1 17:25:56 2015 us=817234 OPTIONS IMPORT: reading client specific options from: /etc/openvpn/ccd-vpn03/vpn03.gw01.common.com-client2
Tue Dec  1 17:25:56 2015 us=817347 MULTI: Learn: 10.10.5.6 -> vpn03.gw01.common.com-client2/90.91.92.93:56801

когда файл не может быть прочитан


Tue Dec  1 17:49:00 2015 us=572601 MULTI: new connection by client 'vpn03.gw01.common.com-client2' will cause previous active sessions by this client to be dropped.  Remember to use the --duplicate-cn option if you want multiple clients using the same certificate or username to concurrently connect.
Tue Dec  1 17:49:00 2015 us=572682 MULTI: Learn: 10.10.5.6 -> vpn03.gw01.common.com-client2/90.91.92.93:57091

Как видно ошибки нет. Просто отсутствует строка OPTIONS IMPORT. И из-за этого я потерял несколько часов сна и написал эту статью.

ВЫВОД:
Устанавливая режим работы VPN сервера или клиента под Linux в nobody nogroup проверьте что файлы в каталоге ccd имеют возможность читаться всеми. На остальные файлы логи, статусы и конфиги достаточно что для root установлены права “читать и писать”.

Связываем локальные сети при помощи OpenVPN


 

Имеем центральный офис и три филиала. Все используют разных интернет-провайдеров, и разные технологии.

Локальные сети:

 

Центральный офис: 10.10.10.0 255.255.255.0

Филиал под условным названием npn: 192.168.0.0 255.255.255.0

Филиал под условным названием mg: 192.168.10.0 255.255.255.0

Филиал под условным названием westfood: 192.168.2.0 255.255.255.0

 

Необходимо связать эти сети, для обмена данными 1С между филиалами и центральным офисом, ну и для удобства администрирования. Для этих целей будем использовать кросс-платформенную программу OpenVPN. С помощью нее создадим защищенную виртуальную частную сеть, обьединяющую локальные сети предприятия. Выглядеть это будет так: из любой локальной сети, например с сети westfood (192.168.2.0 255.255.255.0) можно будет попасть на компьютер в любой другой сети, например npn(192.168.0.0 255.255.255.0), введя локальный ip-адрес, например 192.168.0.10 . Причем не важно что у них разные провайдеры. Программа использует только один порт, и не помеха если клиенты за NATом.

 


 

Ставим (и на сервере и на клиентах):

 

sudo su


apt-get install openvpn

 

Создание ключей (производится только на сервере. затем необходимые ключи копируются с сервера на клиенты).

 

Переходим в каталог со скриптами создания ключей шифрования:

 

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0

 

Открываем файл, содержащий переменные для скриптов:

 

nano vars

 

изменяем следующие параметры под свою организацию:

 

export KEY_COUNTRY=»RU»

export KEY_PROVINCE=»PS»

export KEY_CITY=»Pskov»

export KEY_ORG=»MegaHolod»

export KEY_EMAIL=»
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
«

export KEY_DIR=»/etc/openvpn/keys»

 

Последний — директория, куда будут сохраняться созданные ключи.

 

Заносим переменные из только что отредактированного файла в память

source ./vars

 

Перед созданием ключей запускаем скрипт:

./clean-all

 

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

 

Sign the certificate? [y/n]:y

 

1 out of 1 certificate requests certified, commit? [y/n]y

 

Итак создаем  CA ключ:

./build-ca

Создаем DH ключ (нужен только серверу):

./build-dh

Создаем private key для сервера (gate — имя сервера):

./build-key-server gate

Создаем ключи в PKCS #12 формате для машин-клиентов;

./build-key-pkcs12 mg

./build-key-pkcs12 npn

./build-key-pkcs12 westfood

Создаем TLS-ключ (Общий для сервера и клиента):

openvpn —genkey —secret /etc/openvpn/keys/ta.key

Из папки «/etc/openvpn/keys» нужно скопировать ta.key и *.p12 соответствующий клиенту на машины-клиенты.

 

Настраиваем сервер (создаем файл-конфиг и заполняем его):

 

touch /etc/openvpn/server.conf


nano /etc/openvpn/server.conf

 

port 17993 # порт, на котором будет слушать сервер

proto tcp # протокол (по умолчанию udp)

dev tun # тип устройства (tun или tap)

############################ KEYS #######################################

tls-server # явно указывает, что данный хост является tls-server

tls-auth keys/ta.key 0 # 0-сервер , 1- для конфига клиента

ca /etc/openvpn/keys/ca.crt # файл сертификата для CA

cert /etc/openvpn/keys/gate.crt # сертификат сервера

key /etc/openvpn/keys/gate.key # ключ сервера

dh /etc/openvpn/keys/dh2024.pem # файл с ключем Диффи-Хелмана

########################## END KEYS #####################################

# автоматически присваивает адреса всем клиентам (DHCP) в указанном

# диапазоне с маской сети. Данная опция заменяет ifconfig и может

# работаеть только с TLS-клиентами в режиме TUN, соответственно

# использование сертификатов обязательно.

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt # Тут будут храниться ip адреса клиентов

push «route 10.10.10.0 255.255.255.0» # передача клиенту маршрута к сетке,

# в которой сервер.

# каждые 10 секунд посылать ping на удаленный хост, и, если за 60 секунд

# не было получено ни одного пакета — то перезапускать туннель.

keepalive 10 60

# параметр сжатия трафика, идущего через виртуальный туннель.

# Может принимать значения yes, no, adaptive.

# Последнее используется по умолчанию.

comp-lzo

# Для улучшения безопасности рекомендовано запускать

# все сервисы с минимальными правами. Openvpn будет работать от имени nobody.

user nobody

group nogroup

persist-key # указывает не перечитавать файлы ключей при перезапуске туннеля

persist-tun # данная опция оставляет без изменения устройства tun/tap

#при перезапуске OpenVPN.

# сервер работает в режиме демона

daemon

############################ LOGS #######################################

status openvpn-status.log # указывает путь к статус-файлу,

# в котором содержится информация о текущих соединениях и

#  информация о интерфейсах TUN/TAP

log-append  openvpn.log # дописывать сообщения в лог-файл, а не перезаписывать.

verb 4 # уровень логирования

mute 20 # в лог будет записываться только по 20 сообщений из одной категории

########################### END LOGS ####################################

client-to-client # позволяет клиентам видеть друг друга (сети)

client-config-dir /etc/openvpn/ccd # папка содержащая маршруты к сетям

# клиентов и посылаемые клиентам ip адреса клиента и сервера

ccd-exclusive # каждому клиенту свои настройки

management localhost 7505

tun-mtu 1500 # устанавливает максимальный размер MTU

tun-mtu-extra 32

mssfix 1450

# маршруты к сетям клиентов

route 192.168.10.0 255.255.255.0 10.8.0.2

route 192.168.0.0 255.255.255.0 10.8.0.2

route 192.168.2.0 255.255.255.0 10.8.0.2

 

Настройки маршрутизации к клиентским сетям и выдача им ip.

 

Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). С учетом перечисленных условий для клиентов и сервера подойдут пары IP-адресов со следующими парами последних октетов:

[  1,  2]   [  5,  6]   [  9, 10]   [ 13, 14]   [ 17, 18]   [ 21, 22]   [ 25, 26]   [ 29, 30]   [ 33, 34]   [ 37, 38]

[ 41, 42]   [ 45, 46]   [ 49, 50]   [ 53, 54]   [ 57, 58]   [ 61, 62]   [ 65, 66]   [ 69, 70]   [ 73, 74]   [ 77, 78]

[ 81, 82]   [ 85, 86]   [ 89, 90]   [ 93, 94]   [ 97, 98]   [101,102]   [105,106]   [109,110]   [113,114]   [117,118]

[121,122]   [125,126]   [129,130]   [133,134]   [137,138]   [141,142]   [145,146]   [149,150]   [153,154]   [157,158]

[161,162]   [165,166]   [169,170]   [173,174]   [177,178]   [181,182]   [185,186]   [189,190]   [193,194]   [197,198]

[201,202]   [205,206]   [209,210]   [213,214]   [217,218]   [221,222]   [225,226]   [229,230]   [233,234]   [237,238]

[241,242]   [245,246]   [249,250]   [253,254]

 

Создаем на сервере файлы для каждого клиента:

 

touch /etc/openvpn/ccd/npn


nano /etc/openvpn/ccd/npn

 

iroute 192.168.0.0 255.255.255.0

ifconfig-push 10.8.0.5 10.8.0.6 255.255.255.252

 

# iroute — маршрут к сети клиента под названием npn

# ifconfig-push <ip клиента> <ip сервера> <маска /30>

# посылает клиенту ай-пи адрес клиента и сервера

 

для других сетей аналогично:

 

touch /etc/openvpn/ccd/mg


nano /etc/openvpn/ccd/mg

 

iroute 192.168.10.0 255.255.255.0

ifconfig-push 10.8.0.9 10.8.0.10 255.255.255.252

 

touch /etc/openvpn/ccd/westfood


nano /etc/openvpn/ccd/westfood

 

iroute 192.168.2.0 255.255.255.0

ifconfig-push 10.8.0.13 10.8.0.14 255.255.255.252

 

Правила для IPTABLES.

 

Для того что-бы это все работало, в фаерволе (iptables), если он используется, нужно разрешить трафик. Пример куска моего скрипта настройки, касающегося openvpn:

 

#!/bin/bash

###################################################

# Переменные

###################################################


#указываем внешний ip сервера и внешн. сетевой интерфейс

INET_IP1=195.239.136.ххх

INET_IFACE1=eth3


# указываем внутренний ip сервера и внутр. сетевой интерфейс

LAN_IP=10.10.10.4

LAN_IFACE=eth0


# указываем сетевой интерфейс VPN, и сеть, ему принадлежащую

VPN_IFACE=tun0

VPN_RANGE=10.8.0.0/24


# внутренняя сеть

LAN_RANGE=10.10.10.0/24


# сетевой интерфейс петли и ip

LO_IFACE=lo

LO_IP=127.0.0.1


###################################################

#OpenVPN

###################################################


# разрешаем трафик между локальной сетью и VPN

# (необходимо для возможности доступа к серверу по внутреннему ip. c клиента)

$ip -A FORWARD -p all -i $LAN_IFACE -o $VPN_IFACE -j ACCEPT

$ip -A FORWARD -p all -o $LAN_IFACE -i $VPN_IFACE -j ACCEPT


# разрешаем входящий и исходящий трафик для vpn-интерфейса

# (необходимо для возможности установки vpn соединения)

$ip -A INPUT -p all -i $VPN_IFACE -j ACCEPT

$ip -A OUTPUT -p all -o $VPN_IFACE -j ACCEPT


# разрешаем icmp пакеты через vpn

# (необходимо для пинга)

$ip -A INPUT -p icmp -m icmp -i $VPN_IFACE —icmp-type echo-request -j ACCEPT

$ip -A OUTPUT -p icmp -m icmp -o $VPN_IFACE —icmp-type echo-request -j ACCEPT


$ip -A FORWARD -p icmp -m icmp -i $VPN_IFACE  -o $LAN_IFACE —icmp-type echo-request -j ACCEPT

$ip -A FORWARD -p icmp -m icmp -o $VPN_IFACE  -i $LAN_IFACE —icmp-type echo-request -j ACCEPT


$ip -A INPUT -p icmp -m icmp -i $VPN_IFACE —icmp-type echo-reply -j ACCEPT

$ip -A OUTPUT -p icmp -m icmp -o $VPN_IFACE —icmp-type echo-reply -j ACCEPT


$ip -A FORWARD -p icmp -m icmp -i $VPN_IFACE  -o $LAN_IFACE —icmp-type echo-reply -j ACCEPT

$ip -A FORWARD -p icmp -m icmp -o $VPN_IFACE  -i $LAN_IFACE —icmp-type echo-reply -j ACCEPT

 

 

Теперь на машинах-клиентах создаем конфиг:

 

touch /etc/openvpn/client.conf


nano /etc/openvpn/client.conf

 

client

dev tun  # тип устройства tun или tap

#dev-node OpenVPN # раскоментировать если клиент под виндовс

# для виндовс нужно указать название

# создаваемого сетевого адаптера

proto tcp # протокол. по умолчанию udp

remote 195.239.136.ххх 17993 # ip и порт сервера

remote 93.153.252.ххх 17993

resolv-retry infinite # для dyndns

persist-key # указывает не перечитавать файлы ключей при перезапуске туннеля

persist-tun # данная опция оставляет без изменения устройства tun/tap

###############KEY######################

tls-client

# пути к файлам ключей, которые мы скопировали с сервера

pkcs12 /etc/openvpn/keys/westfood.p12

tls-auth /etc/openvpn/keys/ta.key 1

#############END_KEY####################

# параметр сжатия трафика, идущего через виртуальный туннель.

# Может принимать значения yes, no, adaptive.

# Последнее используется по умолчанию.

comp-lzo

verb 4 # уровень логирования

tun-mtu 1500 # устанавливает максимальный размер MTU

tun-mtu-extra 32

mssfix 1450

route-delay 5 # посылать маршруты через 5 сек. после установки vpn-канала

management localhost 7505

# show-net-up # раскоментировать, если клиент под виндовс

# если в конфиг OpenVPN вставить show-net-up, то OpenVPN запросит

# windows через API всю таблицу маршрутизации и выведет её в лог

#ip-win32 manual # раскоментировать, если клиент под виндовс

 

Запускаем на сервере, а затем и на клиентах демон openvpn:

 

/etc/init.d/openvpn start

 

Выходим из под рута:

 

exit

 

OpenVPN и роутинг между сетями — Хабр Q&A

Есть 2 сервера, соединённые между собой через OpenVPN. Задача — сделать доступными ресурсы внутренних сетей этих сервером между собой.
Сервер #1 (который так же является сервером OpenVPN):
eth0 — 192.168.0.1
eth2 — external interface
tap0 — 10.8.0.1

Конфиг OpenVPN (лишнее вырезано):

#Порт

port 1194

#Протокол

proto udp

#Тип интерфейса

dev tap0

#Режим работы сервера

mode server

#Серверу назначается первый адрес из первой подсети

ifconfig 10.8.0.1 255.255.255.0

#Клиентам

ifconfig-pool 10.8.0.10 10.8.0.100

#Системе объявляется маршрут на всю OpenVPN-сеть

route 10.8.0.0 255.255.255.0

#Передаётся маршрут на всю OpenVPN-сеть клиентам

push «route 192.168.0.0 255.255.255.0»

#Шлюз длы вышеуказанных маршрутов

push «route-gateway 10.8.0.1»

Сервер #2

eth0 — external interface

eth2 — 192.168.1.1

tap0 — 10.8.0.11

Конфиг OpenVPN (лишнее вырезано):

#Режим работы

client

#Тип интерфейса

dev tap

#Протокол

proto udp

#Адресс сервера и порт

remote ip 1194

#принимать команды push от сервера.то есть позволять переконфигурировать клиента

pull

Сейчас всё подключается и работает и сервера друг друга пингуют (по 192.168.*.1), а вот в сеть дальше уже как то не алло. С сервера 2 пингую машинку

192.168.1.1# ping 192.168.0.254

PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data.

^C

— 192.168.0.254 ping statistics — 5 packets transmitted, 0 received, 100% packet loss, time 4548ms

а сервере 1 запускаю tcpdump:

192.168.0.1# tcpdump -i tap0 icmp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on tap0, link-type EN10MB (Ethernet), capture size 65535 bytes

12:19:42.862971 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 1, length 64

12:19:43.862806 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 2, length 64

12:19:44.862721 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 3, length 64

12:19:45.862667 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 4, length 64

12:19:46.862640 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 5, length 64

в iptables только одно правило:

iptables -A FORWARD -p ALL -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT

Вопрос №1: что я не докрутил?

Вопрос №2: что я не докрутил что у при пинге с 1-го сервера машин за вторым сервером tcpdump вообще молчит?

Как добавить маршрут за OpenVPN сервером, блог Престиж Компьютер

Привет всем!

Привет всем. Хочу поделиться простой вещью, как для Windows клиентов в конфиге OpenVPN прописать сети, которые находятся за OpenVPN сервером. Если кратко, то вот она заветная строчка:

route 192.168.170.0 255.255.255.0 10.0.0.1

А теперь давайте по подробнее. Итак, давайте представим ситуацию, что у нас есть некий офис, внутри которого есть сеть, к примеру 192.168.170.0/24. В офисе OpenVPN сервер поднят на Mikrotik, который в свою очередь знает о нужной нам сети 192.168.170.0/24. И вот для этого нам поможет вышеуказанная строчка. Эту строчку можно прочитать так: о сети 192.168.170.0 с маской 255.255.255.0 знает роутер с ip адресом 10.0.0.1. И поэтому, если хочешь попасть в сеть 192.168.170.0, то иди через роутер 10.0.0.1. В свою очередь ip адрес 10.0.0.1 будет принадлежать серверу OpenVPN на Mikrotik. Кстати, очень важно, что бы параметр redirect-gateway def1 был закомментирован, иначе тогда весь трафик пойдёт через OpenVPN сервер.

Давайте я приведу конфиг, который 100% работает на Windows 10 с последним клиентом OpenVPN. Подключение производиться к OpenVPN серверу на Mikrotik.


# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

# Use the same setting as you are using on
# the server.
# On some systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
#dev tap
dev tun

# Are we connecting to a TCP or
# UDP server?  Use the same setting as
# on the server. For MikroTik only TCP
proto tcp-client

# Change 'myremote' to be your remote host,
# or comment out to enter a listening
# server mode.
remote xx.xx.xx.xx  # Здесь нужно написать ip адерс вашего сервера

# Reconfigure this line to use a different
# port number than the default of 1194.
port 1194

# Most clients don't need to bind to
# a specific local port number.
nobind

# Try to preserve some state across restarts.
persist-key
persist-tun

# SSL/TLS client
tls-client

# Chech server serificate in key-usage
remote-cert-tls server

# 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 cert_export_CA.crt
cert cert_export_CLIENT.crt
key  cert_export_CLIENT.key

# moderate verbosity
verb 4
mute 10

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
cipher AES-128-CBC

# cipher algorithm
auth SHA1

# Username and password file
auth-user-pass secret

# Nocache for auth
auth-nocache

# Pushing the redirect-gateway option to clients
# will cause all IP network traffic originating
# on client machines to pass through the OpenVPN
# server. 
;redirect-gateway def1

route 192.168.150.0 255.255.255.0 10.10.10.1

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

route print

И смотрим таблицу маршрутизации. Если наш маршрут добавился, то всё работает правильно.

создание полноценного openVPN gateway / Хабр

OpenVPN — это система, позволяющая создавать шифрованные туннели между компьютерами по технологии VPN (Virtual Private Network, виртуальная частная сеть).

Основные плюсы такой модели:

  • Просто: настройка занимает менее часа и не требует специальных знаний.
  • Экономно: трафик сжимается lzo.
  • Безопасно: весь трафик шифруется, а клиенты разделены между собой.
  • Иногда по-другому просто никак. 🙂

Несмотря на эти пункты, нормальной статьи о настройке OpenVPN на Хабрахабре я не нашел. Чтож, попытаюсь исправить это своими силами.

Я специально стараюсь не углубляться в технические подробности, но и расписывать принципы сборки ядра и установки ПО в вашем дистрибутиве не буду — это выходит за пределы статьи.

За основу возьмем OpenVPN-2.0.9 и Gentoo Linux в качестве сервера и Linux либо Windows в качестве клиента.

Определися с желаемым.

Примем за основу то, что наш сервер распологается в удаленном датацентре. Т.е. попадать на него мы будет через интернет.

После установки шифрованного туннеля между клиентом и сервером, сервер будет NAT-ить все наши пакеты в Интернет. Также, сервер будет обслуживать DNS и являться firewall-ом для виртуальной локальной сети.

Внешний IP нашего сервера (того, который будет openVPN): 212.212.212.212

Внутренний IP сервера (видимый из туннеля): 10.10.0.1

Пул внутренних адресов openVPN: 10.10.0.2 — 10.10.0.128

Название нашей сети: vpnet

Имя сервера: vpsrv

Имя клиента: vpclient

Зачем нужен внешний IP, думаю, понятно. Внутренний IP нужен для соединения с сервером после поднятия туннеля. Пул адресов — это адреса, которые сервер выдает подключившимся клиентам.

Название сети — это имена конф. файлов и имя сервера в этих конф. файлах. Имена клиента и сервера = имена файлов ключей.

На сервере установлен Gentoo Linux 2008.0, обновленный до последних версий. Ядро — 2.6.29. Вся настройка будет выполняться по SSH.

Настройка ядра.

Замечу сразу, на этом этапе нужно быть крайне осторожным и внимательным. Если кто забыл.

Ядро должно содержать опции ниже на сервере. На клиенте нужны только TUN и ipv4.

В ядре нам понадобится следующий функционал, привожу выдержку из конфига:

CONFIG_NF_NAT=m

CONFIG_NF_NAT_PPTP=m

CONFIG_NETFILTER=y

CONFIG_TUN=m

Ну и разумеется поддержка ipv4, сетевой карты и прочего железа. Собираем и устанавливаем ядро. Можно воспользоваться genkernel. Перезагружаемся.

Настройка сервера.
Установка ПО.

Если 🙂 сервер вернулся из ребута, перейдем к установке ПО.

emerge --sync

emerge openvpn bind bind-tools iptables

Ждем, иногда долго. После установки переходим в /etc/init.d/ и выполняем:

ln -s openvpn openvpn.vpnet

rc-update add openvpn.vpnet default

rc-update add named default

rc-update iptables default

./iptables save

Создав symlink на самого себя, мы указали openvpn, что нужно использовать конфигурацию vpnet. В будущем запускаем его только так:

/etc/init.d/openvpn.vpnet start

Сейчас запускать не нужно, ибо запускать пока нечего. 🙂

Помимо этого мы добавили iptables, named и openvpn в автозагрузку.

Создадим нужные каталоги и файлы:

mkdir /etc/openvpn/vpnet/

mkdir /etc/openvpn/vpnet/keys

touch /var/log/openvpn.log

touch /etc/openvpn/vpnet.conf

Генерация ключей.

Перейдем в /usr/share/openvpn/easy-rsa/. Откроем файл vars и впишем настроим параметры:

export EASY_RSA="/usr/share/openvpn/easy-rsa/" #Путь к easy-rsa.

export KEY_CONFIG="$EASY_RSA/openssl.cnf" #Конфиг OpenSSL

export KEY_DIR="/etc/openvpn/vpnet/keys" #Каталог, в котором мы будем держать ключи.

export KEY_SIZE=1024 # Размер ключа

export CA_EXPIRE=3650 # Срок действия CA

export KEY_EXPIRE=3650 # Срок действия ключа

export KEY_COUNTRY="RU" # Двухбуквенный код страны

export KEY_PROVINCE="XX" # Province, не актуально

export KEY_CITY="Town" # Город

export KEY_ORG="Companyname" # Компания

export KEY_EMAIL="[email protected]" # Email

Естественно, значения (компания, путь к ключам и easy-rsa, email) нужно поменять на подходящие вам.

Имопртируем переменные: source ./vars

Теперь создадим ключи.

./clean-all # Убиваем старые ключи, если они были.

openvpn --genkey --secret ta.key # Ключ TLS-auth

./build-dh #Ключ Диффи-Хеллмана.

./pkitool --initca # Certificate Authority для сервера.

./pkitool --server vpsrv # Сертификат сервера.

./pkitool vpclient # Сертификат клиента.

И перенесем остатки в нужное место:

mv ./ta.key /etc/openvpn/vpnet/keys

Все, ключи готовы.

Настройка сервера.

Переходим в /etc/openvpn/, открываем vpnet.conf и пишем туда:

mode server

tls-server

proto tcp-server

dev tap

port 5555 # Порт

daemon

tls-auth /etc/openvpn/vpnet/keys/ta.key 0

ca /etc/openvpn/vpnet/keys/ca.crt

cert /etc/openvpn/vpnet/keys/vpsrv.crt

key /etc/openvpn/vpnet/keys/vpsrv.key

dh /etc/openvpn/vpnet/keys/dh2024.pem

ifconfig 10.10.0.1 255.255.255.0 # Внутренний IP сервера

ifconfig-pool 10.10.0.2 10.10.0.128 # Пул адресов.

push "redirect-gateway def1" # Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать.

push "route-gateway 10.10.0.1"

duplicate-cn

verb 3

cipher DES-EDE3-CBC # Тип шифрования.

persist-key

log-append /var/log/openvpn.log # Лог-файл.

persist-tun

comp-lzo

Все опции, в принципе, понятны. Особо важные я отметил комментариями. Пути и названия, адреса — нужно подправить под себя.

Теперь сервер можно запустить командой /etc/init.d/openvpn.vpnet start

Если возникнут проблемы, подробности можно прочитать в log-файле.

NAT

Чтобы сервер выпускал наши пакеты во внешнюю сеть нам нужно настроить NAT. Это просто.

Готовим и запускаем iptables:

/etc/init.d/iptables save

/etc/init.d/iptables start

Включаем поддержку IP forwarding:

sysctl net.ipv4.ip_forward=1

echo "sysctl net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Добавляем правило firewall:

iptables -v -t nat -A POSTROUTING -o EXTERNAL_IF -s VPN_NET/24 -j SNAT --to-source SERVER_IP

EXTERNAL_IF, VPN_NET и SERVER_IP заменить на внешний интерфейс, сеть VPN и внешний (!) IP сервера соответственно.

Снова делаем /etc/init.d/iptables save, чтобы правило применялось при загрузке системы.

Все, можно работать.

Настройка клиента.

Устанавливаем ПО, создаем пути:

emerge openvpn

cd /etc/init.d/

ln -s openvpn openvpn.vpnet-client

rc-update add openvpn.vpnet-client default

mkdir /etc/openvpn/vpnet

mkdir /etc/openvpn/vpnet/client_keys

touch /etc/openvpn/vpnet-client.conf

Берем с сервера файлы:

ca.crt

vpclient.crt

vpclient.key

ta.key

и закидываем их в /etc/openvpn/vpnet/client_keys/ на клиенте.

Редактируем /etc/openvpn/vpnet-client.conf:

tls-client

proto tcp-client

remote 212.212.212.212

dev tap

port 5555

cd /etc/openvpn/vpnet

pull

tls-auth /etc/openvpn/vpnet/client_keys/ta.key 1

ca /etc/openvpn/vpnet/client_keys/ca.crt

cert /etc/openvpn/vpnet/client_keys/vpclient.crt

key /etc/openvpn/vpnet/client_keys/vpclient.key

cipher DES-EDE3-CBC

log-append /var/log/openvpn.log

comp-lzo

Опции шифрования и компрессии на клиенте и сервере должны совпадать.

Запускаем клиент. Автоматически установится соединение с сервером, создастся туннель, default gateway — сервер VPN. Если все сделано правильно, то можно ходить в интернет.

Настройка закончена.

Могу ответить на вопросы в комментариях.

openvpn | Шпаргалки админа

Изначально эту статью я писал для Хабра, но чуть позже решил продублировать в Блог.

Не так давно передо мною встала задача соединить в единую сеть филиалы одной крупкой компании, разбросанные по Сибири. Главная проблема была в том, что OpenVPN надо было заставить работать поверх нестабильного PPPoE попутно пустив весь трафик через OpenVPN

Первоначальная цель была в экономии денег на Интернет трафике в филиалах т.к. в удалённых районах цена безлимитного ADSL с шириной в 256кб/с стоила порядка 7-10т.р. в месяц, а интернет был жизненно необходим.
Вся радость была в том, что почти все филиалы имели подключения одного провайдера, в котором существовало понятие локального и пирингово трафика, а в Главном офисе был выделенный широкий Интернет (другой провайдер, но волей случая он был лоялен к провайдеру филиалов и у него был “пиринговый трафик” с ценой около 6 копеек за мегабайт).

1. proxy

Самое быстрое решение это было обычный каскад proxy серверов, так и было сделано т.к. раньше все филиалы раздавали интернет у себя прямо модемом, то нужно было всем выделить по 1 системнику, который бы выполнял роль шлюза, системники были не подарки, кто даст 800й пень, кто 233, в общем у кого что было.. Хотя сегодня за 4-7 т.р. можно собрать достойный шлюз, но хозяин-барин, хочу говорит без затрат!

На эти шлюзы была установлена ubuntu 8.04 LTS настроена в виде шлюза, чтоб воткнул в локальную сеть, в модем и в розетку, и сразу всё работало т.к. во многих филиалах, админы могли только нажать “Any key” на клавиатуре пользователя, но не беда, дело шло, постепенно 7 филиалов перенастроило свои модемы, и воткнули шлюзы 🙂

сразу же поднимали прокси каскадом, заруливали туда http трафик, но как мы все знаем, хттп трафик это всего некий % от общего трафика, перейдя на более простые тарифы, экономия была, но условная, ведь нерадивый админ или пользователь мог например через torrent стянуть что-то весомое, что сулило попаданием на деньги филиалу…

Попутно появлялись другие задачи в центральном офисе – перенос компаративного почтаря, шлюза, портала настроенного году в 2002 и не тронутого с тех пор, но это заслуживает отдельной статьи…
А нас пока интересует просто сеть…

2. OpenVPN

Эту штуку я видел в первый раз, был некий страх перед первым знакомством, далее чтение мануалов и интернетов, закатав рукава я полез ставить 🙂

2.1 Сервер
имеет 2 сетевых адаптера eth2 (192.168.5.x) – Локальная сеть и eth0 (real ip 111.111.111.111) Интернет с широким каналом.

[cc lang=”bash”]apt-get install openvpn[/cc]

Далее создаём файл конфигурации сервера
[cc lang=”bash”]touch /etc/openvpn/server.conf[/cc]

при загрузке системы автоматически поднимаются все VPN соединения, для которых в папке /etc/openvpn есть соответствующие файлы с расширением .conf

у меня он получился примерно таким.

[cc lang=”bash”]port 1194 #Порт
proto udp #Протокол
dev tun #Название виртуального устройства
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh2024.pem
server 10.10.10.0 255.255.255.0 # vpn subnet
ifconfig-pool-persist ipp.txt # Тут будут храниться ip адреса клиентов
push “route 192.168.5.0 255.255.255.0″ # home
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 4
mute 20
client-to-client
client-config-dir /etc/openvpn/ccd # Тут будут настройки для каждого филиала
route 192.168.0.0 255.255.255.0 # Маршрут от сервера до филиала 1
route 192.168.1.0 255.255.255.0 # Маршрут от сервера до филиала 2
[/cc]

Создаём каталог, в котором будут хранится индивидуальные настройки клиентов:

[cc lang=”bash”]mkdir /etc/openvpn/ccd[/cc]

Теперь необходимо создать ключи и сертификаты для шифрования и авторизации

[cc lang=”bash”]cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
source ./vars
./clean-all
./build-ca[/cc]

UPD1
если у вас получается как-то так
[cc lang=”bash”]
# source ./vars
**************************************************************
No /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf file could be found
Further invocations will fail
**************************************************************
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys
[/cc]

или вот так

[cc lang=”bash”]
# ./build-ca
grep: /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf: Нет такого файла или каталога
pkitool: KEY_CONFIG (set by the ./vars script) is pointing to the wrong
version of openssl.cnf: /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
The correct version should have a comment that says: easy-rsa version 2.x
[/cc]

то скорее всего нет файла openssl.cnf я вышел из ситуации примерно так
[cc lang=”bash”]
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl-1.0.0.cnf /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
[/cc]
и тут снова продолжаем на том моменте где был косяк.

Теперь создадим сертификат и приватный ключ для сервера:

[cc lang=”bash”]./build-key-server server[/cc]

Создаём ключ для клиента (если клиентов несколько, процедуру придётся повторить):

[cc lang=”bash”]./build-key client1[/cc]

для каждого клиента должно быть указано своё уникальное имя (в данном случае client1).
Процедура подключения Win клиентов описана тут

если новый клиент создаётся спустя некоторое время, процедура будет выглядеть следующим образом:

[cc lang=”bash”]cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
source ./vars
./build-key client2[/cc]

Генерируем параметры Диффи-Хеллмана:

[cc lang=”bash”]./build-dh[/cc]

Помещаем следующие файлы в директорию /etc/openvpn/

[cc lang=”bash”] * ca.crt
* server.crt
* dh2024.pem
* server.key [/cc]

Создаём файл /etc/openvpn/ipp.txt

Конфигурационный файл клиентской машины /etc/openvpn/client.conf у меня получился примерно таким

[cc lang=”bash”]remote 111.111.111.111 1194
client
dev tun
proto udp
resolv-retry infinite # this is necessary for DynDNS
nobind
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 4
mute 20
redirect-gateway
#show-net-up
verb 4[/cc]

Теперь необходимо скопировать с сервера в папку /etc/openvpn/ сгенерированные клиентские ключи и авторитарный сертификат сервера:

[cc lang=”bash”] * ca.crt
* client1.crt
* client1.key [/cc]

Если за клиентом скрывается сеть 192.168.1.х то, чтоб сервер видел её нужно добавить на сервер маршрут до неё.

На сервере создаём файл /etc/openvpn/ccd/client1 такого содержания:

[cc lang=”bash”]iroute 192.168.1.0 255.255.255.0
# роутинг на сеть филиала2, чтоб 2 филиала знали друг друга
#push “route 192.168.100.0 255.255.255.0”
#Заворачиваем весь трафик в OpenVPN
push “redirect-gateway def1″[/cc]

Вот тут собственно и случилась самая злая проблема у меня.

OpenVPN получив директиву
[cc lang=”bash”]push “redirect-gateway def1″[/cc]
(при наличии ‘pull’ в своей конфигурации), клиент не удаляет старый маршрут, а добавляет в таблицу маршрутизации записи вида:
[cc lang=”bash”] 0.0.0.0/1 via 192.168.231.5 dev tun0
128.0.0.0/1 via 192.168.231.5 dev tun0[/cc]
и если openvpn идёт по ethernet то всё работает и радует админа и пользователей, но великий ppp любит поднимать вот такой маршрут.
[cc lang=”bash”]0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0 [/cc]

И вот OpenVPN ругается примерно вот так
[cc lang=”bash”]Jul 2 19:28:53 ino ovpn-client[14465]: NOTE: unable to redirect default gateway — Cannot read current default gateway from system [/cc]

Решение этой проблемы искалось долго и нудно, хотя оно на поверхности. если в этом “кривом” маршруте ppp указывать шлюз вместо 0.0.0.0 реальный шлюз, то ОpenVPN видит этот маршрут и добавляет свой без проблем.

Поэтому я создал файл
[cc lang=”bash”]/etc/ppp/ip-up.d/routing[/cc]
В который прописал небольшой скрипт. (прошу ногами не пинать, я очень ленивый, и полноценный скрипт определения шлюза и правки маршрутов писать не стал, а сделал как простой костыль)
Буду очень рад, если кто-то предложит более логичный, надёжный, и универсальный метод правки маршрутов на лету.
Пока ещё нет уверенности, что всё будет на 100% работать при обрывах ppp, Но жизнь покажет, если что – поправлю топик.

[cc lang=”bash”]#! /bin/sh
#Определяем выданный шлюз по умолчанию у меня он всегда разный но в сети 222.х.х.х
gw1=`ip route show | grep 222 | awk ‘{print $1}’`
# Удаляем 0.0.0.0 0.0.0.0
route del default
# Добавляем маршрут с верным шлюзом
route add -net default gw ${gw1} dev ppp0[/cc]

Делаем его исполняемым
[cc lang=”bash”]chmod ug+x /etc/ppp/ip-up.d/routing[/cc]

После чего ребут, спустя некоторое время сервер перестал пинговаться по внешнему ипу, но стал отзываться по внутреннему – 10.10.10.26

ЗЫ Прошу принять во внимание, что файрволл шлюза и сервера и клиента надо поправить, для того, чтоб у пользователей был жизненно важный интернет.
Например я, сделал это так:
[cc lang=”bash”]-A POSTROUTING -s 192.168.0.0/255.255.0.0 -j MASQUERADE[/cc]
Тут не указана привязка ни к внешнему интерфейсу, ни ip 🙂
когда по разным причинам у нас не будет openvpn то у пользователей будет прямой инет, а когда он появится, то весь трафик полетит через него.

Заключение

В жизни эта система собирается поэтапно, сначала запускается впн сервер и впн клиент, пингуют друг друга по адресам 10.10.10.х дальше добавляются маршруты до сетей, что стоят за сервером и клиентом, пингуются проверяются, когда всё будет стабильно и надёжно добавляем директиву
[cc lang=”bash”]push “redirect-gateway def1″[/cc]
И снова добиваемся работы и жизни, всё было проделано не выходя из офиса, на шлюзах филиалов, были подписаны сетевые интерфейсы, чтоб админ просто воткнул сетевые кабеля и питание, позвонил мне, а дальше я уже по ssh настраивал на рабочий лад.

Ах да, чуть не забыл, о самом главном – profit

Помимо того, что теперь вся сеть обращается к серверам и сервисам филиалов и центра по внутренним ip адресам, так ещё и финансовая экономия.

Раньше каждый филиал тратил на интернет в среднем по 7 000р. в месяц, сейчас в месяц каждый из них платит по 550р. за доступ к пирингу, интернет не расходуется (кроме центрального), для начала было запущено 7 филиалов, дальше будет больше.
получается, что за год при старой схеме компания тратила бы на интернет 588 000р., а при текущей схеме в год будет потрачено 46 200р.

Что дальше?

А теперь, на этой всей хе…. мы попробуем взлететь! я попробую развернуть IP Телефонию, чтоб минимизировать расходы на Телефонные междугородние переговоры между филиалами, связать софтАТС с аппаратными в филиалах, о чём обязательно напишу. Удачи

update1 Много вопросов возникло к термину “Крупная компания” попробую прояснить.

Крупная она в Сибири, центр имеет штат 200 сотрудников, филиалы от 20 до 60, к каждому филиалу ещё крепятся 10-20 объектов. по 5-15 человек. филиалов менее 30ти.

Компания крайне не поворотлива, основной контроль идёт от государства, оборудование, компания делает некие шаги в сторону ИТ развития 🙂

Update2
И так, после тестирования выявилось, что если надолго опустить сервер управы, то клиенты не охотно поднимают openvpn и трафик может пойти прямо в дорогой инет.
Также если принудительно рвётся ADSL канал, то опенвпн вроде и пытается стартануть заново, но что-то у него это не получается, так и ходит по кругу.
пробовал всякие опции и keepalive и ping-restart и прочее… не помогало…

Поэтому пишем небольшой скрипт, который будет проверять состояние дел.
[cc lang=”bash”]touch /usr/bin/vpn_keepalive.sh[/cc]

C содержанием.

[cc lang=”bash”]#! /bin/sh
# Нужна ли нам отладка, рас комментировать нужное
#debug_out=/dev/null
debug_out=/dev/stdout
#NEXTHOP Это хост внутри ВПН сети
# я взял внутренний ип OpenVPN сервера
NEXTHOP=192.168.5.1
# Комманда перезапуска Опенвпн
OPEN_VPN_CMD=”sudo /etc/init.d/openvpn restart”
PING=/bin/ping

logger_opts=”-t $0″
if [ “$debug_out” = “/dev/stdout” ]
then
logger_opts=”$logger_opts -s”
fi
pckts_rcvd=`$PING -c 8 -q -W 2 $NEXTHOP | grep transm | awk ‘{print $4}’`
echo “host: $NEXTHOP, pckts_rcvd: $pckts_rcvd” >$debug_out
if [ $pckts_rcvd -eq 0 ]
then
echo “Connection with $NEXTHOP lost, resetting” | logger $logopts
$OPEN_VPN_CMD > $debug_out
else
echo “Connection with $NEXTHOP up, no action” | logger $logopts
fi[/cc]

Делаем его исполняемым
[cc lang=”bash”]chmod ug+x /usr/bin/vpn_keepalive.sh[/cc]

Скрипт пингует хост, и если 0 пакетов вернулось, то выполнит команду рестарта.
после чего всё гарантированно поднимается, вливаются верные маршруты, и трафик идёт через ВПН трафик

Кидаем этот скрипт в крон
[cc lang=”bash”]crontab -e[/cc]

например каждые 2 минуты.
[cc lang=”bash”]0-59/2 * * * * /usr/bin/vpn_keepalive.sh[/cc]

И всё если дебаг включен, то в логах (syslog) будет отмечено вот так.
[cc lang=”bash”]logger: Connection with 192.168.5.1 up, no action[/cc]

Удачи!

Команды OpenVPN

главная
— Статьи — Удаленный доступ (VPN)

Дата обновления: 18.03.2020

Теги: OpenVPN

OpenVPN — очень гибкое, удобное, а главное быстрое и безопасное, решение для построения виртуальных частных сетей VPN. В данной статье я попытаюсь наиболее подробно описать основные команды, используемые в OpenVPN.

Приведенные в статье команды без «—» (двумя знаками дефиса) перед командой должны быть использованы в конфигурационном файле, команды с «—» в начале используются только из командной строки. Подробности использования команд и их параметры — man openvpn.

remote < host > — определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.

local < host > — определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.

dev < device > — определяет какой использовать тип устройства tun или tap. Например:
dev tun
или
dev tap
При одном из таких указаний будет использован свободный интерфейс tun или tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.

port < port number > — указывает на каком порту будет работать OpenVPN (локально и удаленно).

proto < proto > — какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server. С первыми двумя все ясно, а на последних двух остановимся чуть подробнее:
tcp-client — сам пытается установить соединение
tcp-server — только ждет подключений
Примечательно, что с использованием протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)

remote-random — если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключаться. Применяется для балансировки нагрузки.

float — позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.

ipchange < cmd > — выполняет скрипт или команду указанную в < cmd >, если IP сменился. Пример:
ipchange script-ip.sh

connect-retry < seconds > — пробует переподключиться через указанное время в секундах, если соединение было разорвано.

connect-retry-max < n > — максимальное количество повторов если соединение было разорвано

resolv-retry < seconds > — если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.

lport < port > — указывает на локальный порт для использования OpenVPN

rport < port > — аналогично для удаленного порта. Пример:
rport 8000 — OpenVPN будет пытаться подключится к удаленному порту 8000

nobind — использовать динамический порт для подключения (только для клиента)

shaper < bytes > — указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)

tun-mtu < mtu size > — устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование:
tun-mtu 1200

dev-node < interface name > — устанавливает имя виртуального интерфейса. Например:
dev-node openvpn1

ifconfig — устанавливает локальный IP и маску подсети для туннельного интерфейса. Например:
ifconfig 10.3.0.1 255.255.255.0

server < network > < mask > — автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работаеть только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например:
server 10.3.0.0 255.255.255.0
Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.

server-bridge < gateway > < mask > < pool > — сервер в режиме моста для TAP устройств. Пример:
server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254
Клиентам будут выданы адреса в диапазоне 10.3.0.128 — 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.

mode server — переключает OpenVPN в режим сервера (начиная с 2-й версии)

mode p2p — данная опция идет по умолчанию.

Опции в режиме сервера

push < options > — передача клиенту конфигурационных параметров. Пример:
push «route 192.168.0.0 255.255.255.0»

Аналогично с помощью push клиенту могут передаваться следующие параметры:

route
route-gateway
route-delay
redirect-gateway
inactive
ping, ping-exit, ping-restart
persist-key, persist-tun
comp-lzo
dhcp-option
ip-win32

Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11:
push «dhcp-option DNS 11.11.11.11»

comp-lzo — параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.
Например:
comp-lzo yes — принудительно включить сжатие
comp-lzo no — принудительно отключить сжатие
comp-lzo adaptive — адаптивный режим.

Команды и параметры при работе с сертификатами x509 и параметрами шифрования

cipher < alg > — указываем алгоритм шифрования. Например:
cipher AES-256-CBC
Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).

keysize < n > — размер ключа в битах. Например:
keysize 128

auth < alg > — алгоритм хэширования. Пример:
auth SHA1

df < file > — файл с ключем Диффи-Хелмана

ca < file > — файл сертификата для CA

cert < file > — сертификат локальной машины

key < file > — локальный ключ машины

tls-server — явно указывает, что данный хост является tls-server

tls-client — соответственно tls-client

pkcs12 < file > — указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример:
pkcs12 /file

crl-verify < file > — список отозванных сертификатов, т.е. blacklist.

no-replay — отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!

no-iv — отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!

Последние две опции очень сильно снижают безопасность OpenVPN, крайне не рекомендуется их использование.

secret < file > — включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой —genkey, файл. Например:
secret key.txt

Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки:
openvpn —show-ciphers

Алгоритмы хэширования:
openvpn —show-digests

Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления)
openvpn —show-tls

Показать все доступные крипто-устройства в системе (если такие имеются):
openvpn —show-engines

Для улучшения безопасности рекомендовано запускать все сервисы с минимальными правами. Следующими двумя командами мы укажем с правами какого пользователя и группы будет работать openvpn:

user nobody
group nogroup

Где, соответственно, nobody и nogroup имена пользователя и группы.

Команды для управления маршрутизацией

Обозначение: VPN-хост — удаленная сторона (удаленный хост)

route < network > — устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример:
route 10.0.10.0 255.255.255.252

route-gateway < IP > — устанавливает шлюз на VPN-хосте. Пример:
route-gateway 192.168.0.22
После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22

route-delay < seconds > — указывает подождать n-секунд перед установкой маршрутов. Пример:
route-delay 5
Т.е. через 5 секунд после установки туннеля будут заданы маршруты.

route-up < cmd > — выполнить скрипт или программу < cmd > после установки маршрутов. Пример:
route-up /script.sh

redirect-gateway — установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.

Команды для управления туннелем

ping < seconds > — указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10

ping-restart < seconds > — если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример:
ping-restart 60 — если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.

ping-timer-rem — позволяет перезапускать туннель, только когда указан удаленный адрес.

persist-tun — данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.

persist-key — указывает не перечитавать файлы ключей при перезапуске туннеля.

resolv-retry < seconds > — устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример:
resolv-retry 86400
inactive < seconds > — после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример:
inactive 120

ping-exit < seconds > — если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример:
ping-exit 120

keepalive < seconds > < seconds > — является совмещением сразу двух команд — ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример:
keepalive 10 180
Означает следующее: каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.

persist-local-ip < IP > — оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.

persist-remote-ip < IP > — оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip 192.168.50.1

Методы аутентификации

auth-user-pass-verify < script > < method > — указывается только на серверной стороне.
< script > — путь к скрипту, который будет производить авторизацию. Скрипт должен возвращать 0 если авторизация успешна, и соответственно, 1 если авторизация не успешна.
< method > — метод авторизации, может быть двух типов: via-env и via-file

auth-user-pass < file >— указывается на клиентской стороне. Параметр не обязателен, если он отсутствует то будет предложено ввести пару логин/пароль.
должен содержать имя пользователя и пароль в двух строчках:
username
password

client-cert-not-required — отключает авторизацию по сертификатам.

Работа с прокси

OpenVPN без проблем может работать через http и socks прокси.

http-proxy < server port [auth] > — указываем адрес и порт прокси-сервера.
http-proxy 192.168.0.12 8080

Если требуется авторизация на прокси-сервере:

http-proxy < server port authfile > — где authfile — файл содержащий две строки (имя пользователя и пароль) или stdin (будет запрошено имя пользователя и пароль).

Так же после authfile требуется указать метод авторизации. Можно оставить auto для автоматического выбора метода авторизации или указать явно через auth-method.
auth-method может быть трех видов «none», «basic» или «ntlm».
Используется в OpenVPN начиная с версии 2.1.

http-proxy-retry — переподключаться, если соединение было разорвано.

http-proxy-timeout < seconds > — считать соеденение с прокси-сервером разорванным после n-секунд неактивности. Например:
http-proxy-timeout 5

socks-proxy < server port > — указываем сокс-прокси сервер. Пример:
socks-proxy 192.168.0.12 8080

socks-proxy-retry — переподключаться, если соединение было разорвано.

auto-proxy — автоматически определять прокси-сервер. Требуется версия OpenVPN 2.1 и выше. 

Скриптинг

up < command >— выполнить команду после запуска устройства TUN/TAP. Пример:
up script-up.sh

up-delay < seconds > — подождать n-секунд перед запуском команды указанной в up. Пример:
up-delay 5

down < command > — выполнить команду когда интерфейс TUN/TAP выключится. Пример:
down script-down.sh

down-pre — выполнить команду, указанную в down перед выключением интерфейса TUN/TAP

up-restart < command > — выполнить команду после каждого реконнекта

route-up < command > — выполнить команду после установки сетевых маршрутов. Пример:
route-up script.sh

learn-address < command > — выполнить указанную команду, если ip удаленной стороны изменился.

ipchange < command > — выполнить команду, если ip сервера изменился.

client-connect < command > — выполнить команду, когда клиент подключился.

client-disconnect < command > — выполнить команду, когда клиент отключился.

Команды отладки и поиска неисправностей

verb < verbosity level > — устанавливает уровень информативности отладочных сообщений. Может принимать параметр от 0 до 11. По умолчанию verb равен 1.
При уровне verb 5 и выше в логе будут встречаться подобные записи: RwrW. R (read), W (write) — соответственно чтение и запись. Большая буква обозначает, что пакет был считан (R) или записан (W) на виртуальном устройстве TUN/TAP, а маленькие — считан (r) и записан (w) в туннеле.

mute < number of messages > — если значение установлено в 10, то в лог будет записываться только по 10 сообщений из одной категории.

Логирование

log < file > — указываем лог-файл. Если данный параметр не указан, то весь вывод openvpn будет производиться в stdout.

log-append < file > — дописывать сообщения в лог-файл, а не перезаписывать.

status < file > — указывает путь к статус-файлу, в котором содержится информация о текущих соединениях и информация о интерфейсах TUN/TAP.

Разные вопросы

В. Чем отличаются виртуальные устройства tun и tap?
О. TUN — туннель, соединение по которому указывается по типу: локальный IP < — > удаленный IP. Например, при явном указании ifconfig:
—ifconfig 10.3.0.2 10.3.0.1
в этом примере 10.3.0.2 — локальный IP, 10.3.0.1 — удаленный IP
TAP — эмулирует виртуальную ethernet карточку, для которой требуется указывать локальный IP и маску подсети. Например:
—ifconfig 10.3.0.2 255.255.255.0

В. Для чего нужны файлы serial и index.txt при генерации ключей с easy-rsa?
О. Эти два файла используются в качестве временной базы данных, используемой при генерации ключей. Должны находиться в том каталоге, где и ключи.

Авторизуйтесь для добавления комментариев!

openvpn Windows

Smnwm

: 21.11.2006
#: 46,548
: 369

: 07, 2013 22:26: openvpn Windows

_________________
CJIABHO
!

mallexx

: 22.07.2003
#: 8,017
: 100

: 3

: 08, 2013 10:16:

Smnwm

: 21.11.2006
#: 46,548
: 369

: 08, 2013 16:46:

_________________
CJIABHO
vlaryk
Гуру сетей

: 28.01.2009
#: 75,624
: 8484
:

: 157

: 08, 2013 18:53:

_________________
, «», «»

Windows!
Smnwm

: 21.11.2006
#: 46,548
: 369

: 08, 2013 23:49:

_________________
CJIABHO
vlaryk
Гуру сетей

: 28.01.2009
#: 75,624
: 8484
:

: 157

: 09, 2013 0:47:

_________________
, «», «»

Windows!
mallexx

: 22.07.2003
#: 8,017
: 100

: 3

: 11, 2013 11:17:

Smnwm

: 21.11.2006
#: 46,548
: 369

: 18, 2013 22:31:

_________________
CJIABHO
mallexx

: 22.07.2003
#: 8,017
: 100

: 3

: 19, 2013 15:00:

Smnwm

: 21.11.2006
#: 46,548
: 369

: 19, 2013 21:29:

_________________
CJIABHO

!
.
optimism.ru

.

Минутку …

Включите файлы cookie и перезагрузите страницу.

Этот процесс автоматический. Ваш браузер в ближайшее время перенаправит вас на запрошенный контент.

Подождите до 5 секунд…

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + ( !! []) + !! [] + !! []) + (+ !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] +! ! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] ))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [ ] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) — [])) »

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) — [] + []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + ( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []))

+ ((! + [] + (!! []) + !! [ ] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! [ ]) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (+ !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [ ]) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! [ ]) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] — (! ! [])) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + ( ! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ((! + [] + (!! []) + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! [ ]) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! [ ]) — []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [ ] + (!! []) — []) + (! + [] + (!! []) + !! [])) / + ((+ !! [] + []) + (! + [ ] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) +! ! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) +! ! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [])) / + ( (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) +! ! [] + !! []) + (! + [] + (!! []) + !! [ ])) / + ((! + [] + (!! []) + !! [] + []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + ( !! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + ( ! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! [ ]) + !! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) +! ! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] +! ! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + ( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (! ! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! [] ) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] ) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (+ !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + ( !! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (! ! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) — []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) ) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — ( !! [])) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (+ !! [] ) + (! + [] + (!! []) + !! [] + !! []))

.

Минутку …

Включите файлы cookie и перезагрузите страницу.

Этот процесс автоматический. Ваш браузер в ближайшее время перенаправит вас на запрошенный контент.

Подождите до 5 секунд…

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! [ ]) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] +! ! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [ ] + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) — [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] +! ! [] + !! [] + []) + (! + [] + (!! []) — []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) +! ! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [ ] — (!! [])) + (! + [] — (!! [])) + (+ !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + ( + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [ ] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! [] ) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] +! ! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [ ] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ (( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + ( !! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) +! ! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [ ] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [ ]) + (! + [] + (!! []) + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] +! ! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [ ] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [])) / + ((! + [] + ( !! []) + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + ( !! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (! ! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! [] ) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! [ ]) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! [] ) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! []) ) / + ((! + [] + (!! []) + !! [] + []) + (! + [] — (!! [])) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + ( !! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) — []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! [ ]) + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! [ ]) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] +! ! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] — (!! [])) + (! + [] + (!! [] ) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + []) + ( ! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! [ ]) + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ ( (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] +! ! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! [ ]) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + ( !! []) + !! []) + (! + [] + (!! []) — []) + (+ !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] — (!! [])))

+ ((! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) +! ! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + ( ! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [ ]) + (+ !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + ( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) — []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] +! ! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [ ] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] +! ! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + ( !! []) + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) +! ! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! []) + (! + [] + (!! []) + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ( (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + [] ) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] +! ! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! []) + (+ !! []) + ( ! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] +

.

Минутку …

Включите файлы cookie и перезагрузите страницу.

Этот процесс автоматический. Ваш браузер в ближайшее время перенаправит вас на запрошенный контент.

Подождите до 5 секунд…

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [ ] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + ( !! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + [] ) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + ( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + ( !! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] +! ! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + ( ! + [] — (!! [])) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [ ] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []))

+ ((! + [] + (!! [] ) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) — []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [ ]) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [])) / + ((! + [] + (!! []) +! ! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [ ] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) — []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (! ! [])) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [ ] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ((! + [] + (!! []) — [] + []) + (+ !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] + (!! []) +! ! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] ) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []))

+ ( (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (! ! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] — (!! [])) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) — []) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! [] + !! [] +! ! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) — []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (+ !! []) + (! + [ ] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] ) + (! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + ( !! []) + !! [])) / + ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (+ !! [ ]) + (! + [] + (!! []) + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []))

+ ((! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + !! [] + []) + (! + [] + (!! []) + !! [] + !! []) + (+ !! []) + ( ! + [] — (!! [])) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! []) + (! + [] + (!! []) + !! [] + !! [] +! ! [] + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! [] + !! []) + (+ !! [])) / + ((! + [] + (!! []) + !! [] + [] ) + (+ !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! [] + !! []) + ( ! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (! + [] + (!! []) + !! [] + !! [] + !! [] + !! []) + (+ !! []) + (! + [] + (!! []) + !! [] + !! []) + ( ! + [] + (!! []) — []) + (! + [] + (!! []) + !! [] + !! []))

+ ((!

.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *