Tls error tls handshake failed mikrotik

Настраиваю openVPN сервер на mikritilk. Не работает Может кто подскажет куда копать? Сертификаты сгенерил easy-rsa для сервера и клиента. в резудьтате клиент open vpn не коннектится к серверу лог прилагаю Wed Mar 12 18 58;39 58;57 2014 NOTE 58; OpenV..

Настраиваю openVPN сервер на mikritilk. Не работает))

Может кто подскажет куда копать?

Сертификаты сгенерил easy-rsa для сервера и клиента.
в резудьтате клиент open vpn не коннектится к серверу лог прилагаю

Код: Выделить всё

Wed Mar 12 18:39:57 2014 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Wed Mar 12 18:39:57 2014 Re-using SSL/TLS context
Wed Mar 12 18:39:57 2014 Control Channel MTU parms [ L:1543 D:140 EF:40 EB:0 ET:0 EL:0 ]
Wed Mar 12 18:39:57 2014 Socket Buffers: R=[8192->8192] S=[8192->8192]
Wed Mar 12 18:39:57 2014 MANAGEMENT: >STATE:1394635197,RESOLVE,,,
Wed Mar 12 18:39:58 2014 Data Channel MTU parms [ L:1543 D:1450 EF:43 EB:4 ET:0 EL:0 ]
Wed Mar 12 18:39:58 2014 Local Options String: 'V4,dev-type tun,link-mtu 1543,tun-mtu 1500,proto TCPv4_CLIENT,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
Wed Mar 12 18:39:58 2014 Expected Remote Options String: 'V4,dev-type tun,link-mtu 1543,tun-mtu 1500,proto TCPv4_SERVER,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
Wed Mar 12 18:39:58 2014 Local Options hash (VER=V4): 'db02a8f8'
Wed Mar 12 18:39:58 2014 Expected Remote Options hash (VER=V4): '7e068940'
Wed Mar 12 18:39:58 2014 Attempting to establish TCP connection with [AF_INET]58.108.2х5.х6:1194
Wed Mar 12 18:39:58 2014 MANAGEMENT: >STATE:1394635198,TCP_CONNECT,,,
Wed Mar 12 18:39:58 2014 TCP connection established with [AF_INET]58.108.2х5.х6:1194
Wed Mar 12 18:39:58 2014 TCPv4_CLIENT link local: [undef]
Wed Mar 12 18:39:58 2014 TCPv4_CLIENT link remote: [AF_INET]58.108.2х5.х6:1194
Wed Mar 12 18:39:58 2014 MANAGEMENT: >STATE:1394635198,WAIT,,,
Wed Mar 12 18:39:58 2014 MANAGEMENT: >STATE:1394635198,AUTH,,,
Wed Mar 12 18:39:58 2014 TLS: Initial packet from [AF_INET]58.108.2х5.х6:1194, sid=10c6a7e7 7257b949
Wed Mar 12 18:39:58 2014 VERIFY OK: depth=1, C=RU, ST=MR, L=SanFrancisco, O=home, OU=otdel, CN=server, name=changeme, emailAddress=sххyan@ya.ru
Wed Mar 12 18:39:58 2014 VERIFY OK: nsCertType=SERVER
Wed Mar 12 18:39:58 2014 VERIFY OK: depth=0, C=RU, ST=MR, L=SanFrancisco, O=OpenVPN, OU=changeme, CN=server, name=changeme, emailAddress=stххan@ya.ru
[b]Wed Mar 12 18:40:58 2014 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Wed Mar 12 18:40:58 2014 TLS Error: TLS handshake failed
Wed Mar 12 18:40:58 2014 Fatal TLS error (check_tls_errors_co), restarting[/b]
Wed Mar 12 18:40:58 2014 TCP/UDP: Closing socket
Wed Mar 12 18:40:58 2014 SIGUSR1[soft,tls-error] received, process restarting
Wed Mar 12 18:40:58 2014 MANAGEMENT: >STATE:1394635258,RECONNECTING,tls-error,,
Wed Mar 12 18:40:58 2014 Restart pause, 5 second(s)

файл конфиг ovpn прилагаю

Код: Выделить всё

client
dev tun

proto tcp
remote ххххххх
resolv-retry infinite
nobind
persist-key
persist-tun

ca ca_voip.crt
cert client_voip.crt
key client_voip.key

ns-cert-type server
verb 5

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

Во-первых: полноценного ethernet туннеля OpenVPN микротик сделать не в состоянии, потому что отсутствует напрочь возможность выдавать IP адреса OVPN клиентам по DHCP, все адреса выдаёт только сам микротик, как его не крути и с чем вокруг него не прыгай;
Во-вторых: не поддерживается сжатие заголовков;
В-третьих: работает только по tcp, в то время как предпочитаемый для OpenVPN — udp.
и если я правильно понимаю, даже на железках с аппаратным ускорением шифрования, опенвпн всё равно будет работать в софтовом режиме, т.е. возможность аппаратного ускорения не задействуется.

Всё это вместе взятое немного раздражает, но с этим, как я считаю, можно смирится, потому что такая реализация имеет ряд плюсов:

  • Безопасность, опенвпн с реализацией авторизации по сертификату очень надёжный канал.
  • В отличии от ipsec у нас практически нет никаких проблем с nat.
  • Возможность настроить клиента для подключения по безопасному каналу практически с любого устройства.
  • Относительная простота настройки, в микротике опенвпн поднимается практически в два щелчка, если сравнивать настройку через конфиг в других железках или ОС.

Итак, настройку я условно разделю на две части, это настройка сервера (на железке) и настройка клиента (windows).

Как настроить клиента для CentOS (Linux) читаем в этой статейке.

Подготовка

Пожалуй подготовительный этап следует начать с генерации сертификатов, поскольку passphrase авторизация считается менее защищённой из-за MITM уязвимости, а мы же не хотим что бы кто-то кроме нас самих мог получить доступ к нашей корпоративной сети. Подробно процесс по созданию сертификатов описан здесь. Добавлю лишь что для самого микротика надо генерировать сертификат сервера, а для клиента сертификат клиента.

После создания сертификатов нам понадобится публичные сертификаты CA и для самого микротика, а так же закрытый ключ микротика, копируем их

открываем WinBox на микротике, переходим в раздел Files и жмём на кнопку Paste

winbox paste

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

file list

После этого сертификаты необходимо импортировать, для этого идём в раздел System — Certificates и жмём кнопку Import, я первым импортировал публичный сертификат CA

ca

дальше импортируем публичный сертификат микротика

mikrotik-crt

и закрытый ключ для него

mikrotik-key

должна получится примерно такая картинка, обращаем внимание что напротив сертификата микротика должно стоять KT

certificates

следующим шагом создаём пул IP адресов для наших OVPN клиентов IP — Pool, жмём кнопку +, я добавил диапазон 172.21.108.2-172.21.108.14, и назвал пул ovpn

следующим этапом создаём PPP профиль, соответственно заходим в раздел PPP вкладка Profiles добавляем профиль кнопкой +, вводим имя, локальный адрес микротика с которым будут работы нашим клиенты, должен лежать в подсети с созданным ранее пулом адресов и указываем пул, остальное оставляем без изменений

ppp-profiles

Включение

после этого настраиваем сам OpenVPN сервер, делается это в разделе PPP вкладка Interface, кнопка OVPN Server, ставим галку Enabled, mode выставляем ethernet, выбираем созданный ранее профиль, а также ставим галку Require Client Certificate и выбираем сертификат микротика, маску по желанию можно поменять. Снимаем галочку с md5, этот метод хэширования сейчас считается небезопасным.

ovpn-server

Осталось совсем немного, нужно создать пользователя, переходим в раздел PPP — Secrets, вводим имя пользователя, пароль, указываем сервис и профиль.

new ppp secret

Поскольку мы используем сертификаты, надо что бы время на клиенте и на сервере совпадало, поэтому настраиваем sntp клиента, что бы микротик мог синхронизировать время, делается это в разделе System — SNTP Client. Я указал локальный SNTP сервер, вы можете использовать любой публичный сервер в интернете (например ntp3.stratum2.ru и 0.europe.pool.ntp.org) или указать свой внутренний.

system-sntp

Осталось настроить разрешающее правило фаервола, переходим в раздел IP — Firewall вкладка Filter Rules.

firewall-new

Здесь надо указать In. Interface (или In. Interface list) — интерфейс по которому к Вам приходит интернет, остальное как на скриншоте.

winbox firewall rule

Созданное правило должно находится выше запрещающих правил.

На этом настройка сервера завершена, переходим к настройке клиента.

Настройка клиента OpenVPN Windows для микротика

Не все версии RouterOS нормально работают с OpenVPN. Например версия RouterOS ниже 6.36 не работает с версиями OpenVPN выше 2.3.10. Поэтому не забывайте периодически обновлять RouterOS.

При получении ошибки:
OpenSSL: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca

Обновите прошивку!
И проверьте что бы в сертификатах на микротике был импортирован ca.crt!

OpenSSL: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
При возникновении этой ошибки обновляем прошивку. Заново импортируем сертификаты в микротике(не надо их генерировать снова, просто удалить и снова добавить)

Конфиг файл тестировался для OpenVPN 2.5.4, последнего на момент написания статьи и RouterOS 6.47.6

О том где загрузить и как установить OpenVPN клиент описано в статье по созданию сертификатов.

После установки нам необходимо будет переходим в каталог с установленным OpenVPN. Затем добавляем файл client.ovpn в каталог config следующего содержания:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

proto tcpclient

# в этой строчке мы указываем адрес в интернете нашего микротика

remote 123.123.123.123

dev tap

nobind

persistkey

tlsclient

#указываем имена публичного CA сертификата

ca ca.crt

# публичного сертификата клиента

cert client.crt

# и его закрытый ключ

key  client.key

#каждые 10 секунд проверять туннель, если нет ответа 120 секунд, переподключаться

keepalive 10 120

verb 3

cipher AES256CBC

auth SHA1

pull

#проверка сертификата сервера

#https://openvpn.net/index.php/open-source/documentation/howto.html#mitm

remotecerttls server

# эта строка задаёт файл с логином-паролем которые мы прописывали в PPP-Secrets на микротике

authuserpass auth.cfg

# в этой части мы задаём настройки сетей которые находятся за микротиком,

# в моём случае 192.168.1.0 с маской 255.255.255.0 это сеть,

# а 172.21.108.1 это адрес микротика который мы указывали в PPP профиле

routemethod exe

routedelay 2

route 192.168.1.0 255.255.255.0 172.21.108.1

Так же копируем в эту папку публичные сертификаты CA и клиента, и закрытый ключ клиента. Создаём файл auth.cfg вида

где user — имя пользователя, 123 — пароль, которые мы задавали в PPP-Secrets на микротике

На этом настройка клиента завершена, запускаем OpenVPN GUI и он начинает подключение

Внимание! В Win7 с включённым UAC, а также на Win8 и Win8.1 не зависимо от того включён или выключен UAC запускаем OpenVPN GUI только в режиме Запускать от имени администратора! В противном случаем у Вас не добавятся маршруты или и вовсе не произойдёт подключения.

openvpn win client connection

при успешном подключении в трее появится сообщение

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

Please check the log .

2017-07-17 20:58:59 Log cleared.
2017-07-17 20:59:53 MANAGEMENT: CMD 'hold release'
2017-07-17 20:59:53 MANAGEMENT: CMD 'bytecount 2'
2017-07-17 20:59:53 MANAGEMENT: CMD 'state on'
2017-07-17 20:59:53 MANAGEMENT: CMD 'proxy NONE'
2017-07-17 20:59:54 WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.
2017-07-17 20:59:54 New OpenVPN Status (TCP_CONNECT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
2017-07-17 20:59:54 New OpenVPN Status (TCP_CONNECT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
2017-07-17 20:59:54 Control Channel MTU parms [ L:1623 D:1210 EF:40 EB:0 ET:0 EL:3 ]
2017-07-17 20:59:54 Data Channel MTU parms [ L:1623 D:1450 EF:123 EB:406 ET:0 EL:3 ]
2017-07-17 20:59:54 Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1543,tun-mtu 1500,proto TCPv4_CLIENT,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
2017-07-17 20:59:54 Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1543,tun-mtu 1500,proto TCPv4_SERVER,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
2017-07-17 20:59:54 TCP/UDP: Preserving recently used remote address: [AF_INET]78.39.102.99:443
2017-07-17 20:59:54 Socket Buffers: R=[1048576->1048576] S=[524288->524288]
2017-07-17 20:59:54 Attempting to establish TCP connection with [AF_INET]78.39.102.99:443 [nonblock]
2017-07-17 20:59:54 MANAGEMENT: >STATE:1500308994,TCP_CONNECT,,,,,,
2017-07-17 20:59:54 MANAGEMENT: CMD 'needok 'PROTECTFD' ok'
2017-07-17 20:59:55 TCP connection established with [AF_INET]78.39.102.99:443
2017-07-17 20:59:55 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
2017-07-17 20:59:55 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
2017-07-17 20:59:55 MANAGEMENT: CMD 'needok 'PROTECTFD' ok'
2017-07-17 20:59:55 TCP_CLIENT link local: (not bound)
2017-07-17 20:59:55 TCP_CLIENT link remote: [AF_INET]78.39.102.99:443
2017-07-17 20:59:55 MANAGEMENT: >STATE:1500308995,WAIT,,,,,,
2017-07-17 20:59:56 New OpenVPN Status (AUTH->LEVEL_CONNECTING_SERVER_REPLIED): ,,,,,
2017-07-17 20:59:56 New OpenVPN Status (AUTH->LEVEL_CONNECTING_SERVER_REPLIED): ,,,,,
2017-07-17 20:59:56 MANAGEMENT: >STATE:1500308996,AUTH,,,,,,
2017-07-17 20:59:56 TLS: Initial packet from [AF_INET]78.39.102.99:443, sid=24c7051d 0b92d5ba
2017-07-17 20:59:58 OpenSSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
2017-07-17 20:59:58 New OpenVPN Status (RECONNECTING->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): tls-error,,,,,
2017-07-17 20:59:58 New OpenVPN Status (RECONNECTING->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): tls-error,,,,,
2017-07-17 20:59:58 TLS_ERROR: BIO read tls_read_plaintext error
2017-07-17 20:59:58 TLS Error: TLS object -> incoming plaintext read error
2017-07-17 20:59:58 TLS Error: TLS handshake failed
2017-07-17 20:59:58 Fatal TLS error (check_tls_errors_co), restarting
2017-07-17 20:59:58 TCP/UDP: Closing socket
2017-07-17 20:59:58 SIGUSR1[soft,tls-error] received, process restarting
2017-07-17 20:59:58 MANAGEMENT: >STATE:1500308998,RECONNECTING,tls-error,,,,,
2017-07-17 20:59:58 New OpenVPN Status (CONNECTRETRY->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): 128
2017-07-17 20:59:58 New OpenVPN Status (CONNECTRETRY->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): 128
2017-07-17 20:59:58 Waiting 128s seconds between connection attempt

I am configuring OpenVPN 2.3.6-1 on my Arch Linux server in order to encrypt SMB traffic over the public Internet. When I test the setup on one of my Linux virtual machine clients, I get the error: TLS Error: TLS handshake failed.

I quickly read (OpenVPN on OpenVZ TLS Error: TLS handshake failed (google suggested solutions not helping)) and tried to switch from the default UDP to TCP, but that only caused the client to repeatedly report that the connection timed out. I also tried disabling the cipher and TLS authentication, but that caused the server to fail with Assertion failed at crypto_openssl.c:523. In both instances, the required changes were made to both the client and server configurations.

I have been following the instructions at (https://wiki.archlinux.org/index.php/OpenVPN) to set up OpenVPN and the instructions at (https://wiki.archlinux.org/index.php/Create_a_Public_Key_Infrastructure_Using_the_easy-rsa_Scripts) to create the keys and certificates. The only deviations I have made from these instructions have been specifying my own computers’ names and their corresponding key/certificate file names.

See also my original question about securing SMB traffic over the Internet: (Simple encryption for Samba shares)

Can anybody explain how I can solve this issue?

Details:

Server: Arch Linux (up to date) connected directly to gateway via ethernet cable. No iptables.

Client: Arch Linux (up to date) virtual machine on VirtualBox 4.3.28r100309 Windows 8.1 host, bridged network adapter. No iptables. Windows Firewall disabled.

Gateway: Port forwarding for port 1194 enabled, no firewall restrictions.

Here are the configuration files on the server and client, respectively. I created these according to the instructions on the Arch Wiki.

/etc/openvpn/server.conf (Non-comment lines only):

port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server-name.crt
key /etc/openvpn/server-name.key
dh /etc/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

/etc/openvpn/client.conf (Non-comment lines only):

client
dev tun
proto udp
remote [my public IP here] 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client-name.crt
key /etc/openvpn/client-name.key
remote-cert-tls server
tls-auth /etc/openvpn/ta.key 1
comp-lzo
verb 3

Here are the outputs of running openvpn on the machines with the above configurations. I started the server first, then the client.

The output of openvpn /etc/openvpn/server.conf on the server:

Thu Jul 30 17:02:53 2015 OpenVPN 2.3.6 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Dec  2 2014
Thu Jul 30 17:02:53 2015 library versions: OpenSSL 1.0.2d 9 Jul 2015, LZO 2.09
Thu Jul 30 17:02:53 2015 NOTE: your local LAN uses the extremely common subnet address 192.168.0.x or 192.168.1.x.  Be aware that this might create routing conflicts if you connect to the VPN server from public locations such as internet cafes that use the same subnet.
Thu Jul 30 17:02:53 2015 Diffie-Hellman initialized with 2048 bit key
Thu Jul 30 17:02:53 2015 Control Channel Authentication: using '/etc/openvpn/ta.key' as a OpenVPN static key file
Thu Jul 30 17:02:53 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 17:02:53 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 17:02:53 2015 Socket Buffers: R=[212992->131072] S=[212992->131072]
Thu Jul 30 17:02:53 2015 ROUTE_GATEWAY 192.168.0.1/255.255.255.0 IFACE=enp5s0 HWADDR=##:##:##:##:##:##
Thu Jul 30 17:02:53 2015 TUN/TAP device tun0 opened
Thu Jul 30 17:02:53 2015 TUN/TAP TX queue length set to 100
Thu Jul 30 17:02:53 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Jul 30 17:02:53 2015 /usr/bin/ip link set dev tun0 up mtu 1500
Thu Jul 30 17:02:53 2015 /usr/bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
Thu Jul 30 17:02:53 2015 /usr/bin/ip route add 10.8.0.0/24 via 10.8.0.2
Thu Jul 30 17:02:53 2015 GID set to nobody
Thu Jul 30 17:02:53 2015 UID set to nobody
Thu Jul 30 17:02:53 2015 UDPv4 link local (bound): [undef]
Thu Jul 30 17:02:53 2015 UDPv4 link remote: [undef]
Thu Jul 30 17:02:53 2015 MULTI: multi_init called, r=256 v=256
Thu Jul 30 17:02:53 2015 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
Thu Jul 30 17:02:53 2015 IFCONFIG POOL LIST
Thu Jul 30 17:02:53 2015 Initialization Sequence Completed

The output of openvpn /etc/openvpn/client.conf on the client:

Thu Jul 30 21:03:02 2015 OpenVPN 2.3.6 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Dec  2 2014
Thu Jul 30 21:03:02 2015 library versions: OpenSSL 1.0.2d 9 Jul 2015, LZO 2.09
Thu Jul 30 21:03:02 2015 WARNING: file '/etc/openvpn/client-name.key' is group or others accessible
Thu Jul 30 21:03:02 2015 WARNING: file '/etc/openvpn/ta.key' is group or others accessible
Thu Jul 30 21:03:02 2015 Control Channel Authentication: using '/etc/openvpn/ta.key' as a OpenVPN static key file
Thu Jul 30 21:03:02 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 21:03:02 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 21:03:02 2015 Socket Buffers: R=[212992->131072] S=[212992->131072]
Thu Jul 30 21:03:02 2015 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
Thu Jul 30 21:03:02 2015 UDPv4 link local: [undef]
Thu Jul 30 21:03:02 2015 UDPv4 link remote: [AF_INET][my public IP here]:1194
Thu Jul 30 21:04:02 2015 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Thu Jul 30 21:04:02 2015 TLS Error: TLS handshake failed
Thu Jul 30 21:04:02 2015 SIGUSR1[soft,tls-error] received, process restarting
Thu Jul 30 21:04:02 2015 Restart pause, 2 second(s)

На чтение 14 мин Просмотров 96.6к. Опубликовано 23.10.2017
Обновлено 03.11.2020

Продолжение предыдущих статей по организации единой локальной сети.
В предыдущих статьях мы с Вами настроили два наших роутера — это hAP ac и hEX
Создание домашней сети на базе устройств MikroTik: Часть 1
Создание домашней сети на базе устройств MikroTik: Часть 2 — Настройка hAP ac
Создание домашней сети на базе устройств MikroTik: Часть 3 — Настройка RB750gr3 hEX
Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля (Вы тут)
Создание домашней сети на базе устройств MikroTik: Часть 5 — Создание EoIP туннеля
Создание домашней сети на базе устройств MikroTik: Часть 6 — Firewall защита доступа
Создание домашней сети на базе устройств MikroTik: Часть 7 — Firewall правильное перенаправление портов в сети с двумя шлюзами
Создание домашней сети на базе устройств MikroTik: Часть 8 — Установка и настройка MikroTik DUDE Network Monitor

В данной статье мы создадим защищенный туннельный интерфейс на базе OpenVPN.
Почему OpenVPN спросите Вы, ведь есть же PPTP, L2TP.
Отвечаю, я тестировал соединения на базе этих двух протоколов. К сожалению они не показали достаточно стабильного соединения между собой. Происходили частые падения туннельных интерфейсов.
Возможно это было связано с какой-то прошивкой. Но это не столь важно. Важно то, что настроив один раз туннель на OpenVPN, я забыл про разрывы связи совсем и до сих пор все работает отлично.

Если Вы хотите изучить MikroTik, то это можно реализовать с помощью специального онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA, а автором курса является официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто даже не держал его в руках. В состав курса входят 162 видеоурока, 45 лабораторных работ и вопросы для самопроверки с конспектом. Кстати я получал сертификат MTCNA именно тут!

Прежде чем настраивать OpenVPN сервер и создавать туннель, разберемся с тем, как он работает на Mikrotik. Т.к. на RouterOS v6 есть ограничения.
Обратимся к официальному источнику — Wiki Mikrotik(Eng) и Manual Interface(Eng).
В OpenVPN используются два типа интерфейса:
tun — в RoS он определяется, как ip, это туннельный уровень.
tap — в RoS он определяется, как ethernet, это канальный уровень.
Только начиная с прошивки 6.39.x была добавлена топология subnet для tun режима.
Выдержка из Changelog:
*) ovpn — added support for «push-continuation»;
*) ovpn — added support for topology subnet for IP mode;
*) ovpn — fixed duplicate default gateway presence when receiving extra routes;
*) ovpn — improved performance when receiving too many options;

Не поддерживается в 6 версии операционной системы:
UDP протокол, т.е. необходимо использовать исключительно TCP!
LZO сжатие
TLS аутентификация
Аутентификация без имени пользователя и пароля
Если Вы будете читать эту статью, и уже будет доступна 7 версия RouterOS, то в ней, все это, уже должно работать (но это не точно)!

К сожалению сложно сказать, почему Mikrotik пришли именно к такому решению и именно таким ограничениям, но мы имеем то, что имеем.
По ТСР, сервер в типичном случае будет получать ТСР-сегменты OpenVPN, которые содержат другие ТСР-сегменты от клиента. В результате в цепи получается двойная проверка на целостность информации, что совершенно не имеет смысла, т.к. надежность не повышается, а скорости соединения и пинга снижаются.
UDP конечно предпочтительней, но его нет…

OpenVPN предлагает пользователю несколько видов аутентификации.
Предустановленный ключ — самый простой метод.
Сертификатная аутентификация — наиболее гибкий в настройках метод.
С помощью логина и пароля — может использоваться без создания клиентского сертификата (серверный сертификат всё равно нужен).

Мы будем использовать Сертификатную аутентификацию для обеспечения хорошей защищенности нашего соединения.

Для создания туннеля, нам понадобятся сертификаты и ключи к ним. Данные сертификаты можно создать, как на Windows, Linux, так и на самом роутере.
Я сторонник создания сертификатов на своем ПК, чтобы они были у меня в файлах и я мог их достать в случаях «А вдруг что».

1. Создание сертификатов для OpenVPN соединения
Я буду создавать сертификаты на операционной системе Windows, для всех остальных ОС принцип похож. Можно загуглить.
Для начала необходимо скачать и установить дистрибутив OpenVPN: Страница Загрузок OpenVPN
Запускаем установщик openvpn-install
Если Вы не собираетесь использовать все возможности туннелирования на своей Windows машине и Вам нужно исключительно создать сертификаты, то можно снять галки с пунктов TAP Virtual Ethernet Adapter и OpenVPN GUI.

openvpn-install

Выбираем нужные пункты

После скачивания и установки в указанную Вами папку в ней будет список файлов. у меня это папка C:Program FilesOpenVPN
Нам необходимо перейти в папку easy-rsa
Нужно открыть консоль Windows (для Windows Vista/7/8/8.1/10 нужно запускать от Администратора)
Переходим в папку easy-rsa по пути установки командой cd
Например:
cd C:Program FilesOpenVPNeasy-rsa

Запускаем файл init-config.bat
C:Program FilesOpenVPNeasy-rsa>init-config.bat
C:Program FilesOpenVPNeasy-rsa>copy vars.bat.sample vars.bat
Скопировано файлов: 1.

В папке появится файл vars.bat, открываем его текстовым редактором, нас интересуют строчки в самом конце, их нужно заполнить
Я подставил свои параметры, у Вас данные параметры будут другие:
set KEY_COUNTRY=RU
set KEY_PROVINCE=Moscow
set KEY_CITY=Moscow
set KEY_ORG=HOME
set KEY_EMAIL=my@email.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=HOME
set PKCS11_MODULE_PATH=server
set PKCS11_PIN=12345

Там где написано server, не трогаем. Сохраняем файл.

Далее открываем редактором файл openssl-1.0.0.cnf
Находим строчку default_days 365 и заменяем число 365 на 3650 или свое. Тем самым мы увеличим время жизни наших сертификатов на 10 лет.
Сохраняем и закрываем.

Дополнительно:
Если Вы тот еще параноик, то Вы можете отредактировать еще один параметр:
set KEY_SIZE=1024
Для пущей сложности данный параметр можно изменить на 2048 и на 4096(для современных версий OpenVPN)
Но будьте готовы к долгому ожиданию(на слабых ПК очень долгому), пока сгенерируется ключ.

Пишем в консоль команды
vars
clean-all

В ответ должно прийти
Скопировано файлов: 1.
Скопировано файлов: 1.

Создаем ключ Диффи-Хеллмана
build-dh
Вывод из консоли:
C:Program FilesOpenVPNeasy-rsa>build-dh
WARNING: can't open config file: /etc/ssl/openssl.cnf
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..........+.........

Известные проблемы:
При подаче команды clean-all или build-dh в самом начале генерации сертификатов, может проявится одна ошибка, выглядит она так:
C:UsersTEST>build-dh
"openssl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Бороться с этим необходимо следующим образом. Нужно указать путь до файла openssl.exe в файле vars.bat в ручную.
А точнее стираем слово rem в строке (rem — это комментирование строки):
rem set "PATH=%PATH%;C:Program FilesOpenVPNbin"
Получаем:
set "PATH=%PATH%;C:Program FilesOpenVPNbin"
Сохраняем файл и производим весь процесс сначала
vars
clean-all
build….. и т.д

Создаем основной сертификат
build-ca

При генерации основного сертификата в консоли будут отображаться вопросы. Просто нажимаем Enter, т.к. все эти параметры мы ввели в файле vars.bat
Нажимаем Enter до тех пор, пока не отобразиться строка приглашения
C:Program FilesOpenVPNeasy-rsa

Далее создаем сертификат сервера и его ключ:
build-key-server server

На вопросы так же нажимаем Enter, но не торопимся, в самом конце будет задано два вопроса
Sign the certificate?
1 out of 1 certificate requests certified, commit?

На оба эти вопроса отвечаем Y
Вывод из консоли:
Certificate is to be certified until Oct 16 07:03:55 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Теперь создаем сертификат и ключ клиента:
build-key client

Также не торопимся с ответами, как только увидим строку «Common Name (eg, your name or your server’s hostname)» нужно ответить client
В самом конце также будут два вопроса, отвечаем также Y
Причем: для каждого клиента, нужно будет создать отдельные ключи и называть их по разному, например client1, client2 или как-то иначе, все зависит от Вашего воображения. Также не забывайте вводить эти имена при запросе Common Name
Вывод из консоли:
C:Program FilesOpenVPNeasy-rsa>build-key client
WARNING: can't open config file: /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
............++++++
.............................................................................++++++
writing new private key to 'keysclient.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Home]:
Organizational Unit Name (eg, section) [Home]:
Common Name (eg, your name or your server's hostname) [server]:client
Name [server]:client
Email Address [my@email.ru]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
WARNING: can't open config file: /etc/ssl/openssl.cnf
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Moscow'
localityName :PRINTABLE:'Moscow'
organizationName :PRINTABLE:'Home'
organizationalUnitName:PRINTABLE:'Home'
commonName :PRINTABLE:'client'
name :PRINTABLE:'client'
emailAddress :IA5STRING:'my@email.ru'
Certificate is to be certified until Oct 16 07:16:56 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Пример создания клиентских сертификатов:
build-key client1
build-key office1

На этом создание файлов сертификатов и ключей завершено.
Все файлы будут лежать в папке C:Program FilesOpenVPNeasy-rsakeys

dir-sert-keys

Примерной такой список файлов должен получиться у Вас

2. Настройка OpenVPN сервера и интерфейса туннеля на hAP ac
Переходим к созданию туннеля на роутере hAP ac
Необходимо загрузить сертификат сервера, ключ сервера и основной сертификат в роутер. Файлы:
ca.crt
server.crt
server.key

Открываем раздел Files и переносим туда наши файлы. (Или используем FTP)

hap-file-certkey

Загруженные файлы сертификатов и ключа

Теперь нам необходимо импортировать данные сертификаты в RouterOS, чтобы она могла ими оперировать.

system-cert

Меню сертификатов

Импортируем наши сертификаты и ключи

import-certkey

Выбираем нужные сертификаты и ключ и импортируем их

Консольно:
/certificate import file-name=ca.crt passphrase=""
/certificate import file-name=server.crt passphrase=""
/certificate import file-name=server.key passphrase=""

Займемся настройкой OpenVPN. переходим в меню PPP

ppp

Меню PPP
ppp-profiles
Добавляем новый профиль для нашего туннеля

Нам необходимо выделить IP адреса, которые мы будем использовать для туннельных интерфейсов.
Я выбрал подсеть 172.16.10.0/24 соответственно сервер будет иметь адрес 172.16.10.1, а клиенты далее по маске. 2,3,4 и т.д.

new-ppp-profile

Заполняем необходимые параметры профиля
new-ppp-profile-2
Заполняем оставшиеся параметры профиля

Консольно:
/ppp profile add name=ovpn-server local-address=172.16.10.1 change-tcp-mss=yes use-upnp=no use-mpls=yes use-compression=no use-encryption=yes only-one=default

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

ppp-secrets

Открываем вкладку с записями данных авторизации

Т.к. у сервера IP 172.16.10.1 выдаем клиенту IP 172.16.10.2

new-ppp-secret

Добавляем нашего клиента

Консольно:
/ppp secret add name=client password=123456789 service=ovpn profile=ovpn-server remote-address=172.16.10.2

Теперь нужно включить саму службу OpenVPN

ppp-ovpn-server

Нажимаем кнопку для отображения параметров сервера
ppp-ovpn-enabled
Выполняем настройки сервера

Консольно:
/interface ovpn-server server set enabled=yes port=1194 mode=ip netmask=24 default-profile=ovpn-server certificate=server.crt_0 require-client-certificate=yes auth=sha1,md5 cipher=blowfish128,aes128,aes192,aes256

В принципе этих настроек достаточно, но я предпочитаю наблюдать за интерфейсом. для этого мы можем зафиксировать интерфейс за конкретным клиентом. Сделаем привязку.

ppp-ovpn-server-binding

Биндим интерфейс
ppp-new-bind
Достаточно ввести имя клиента из PPP Secret и имя самого интерфейса

Консольно:
/interface ovpn-server add name=ovpn-inclient user=client

Может показаться, что мы все уже настроили, но это не совсем так. Остался последний штрих. Необходимо разрешить прохождение запросов на OpenVPN сервер через Firewall
Для этого переходим в меню межсетевого экрана

ip-firewall

Переходим в меню Firewall
ip-firewall-addnew
Добавляем новую запись
ip-firewall-newrule
Разрешаем входящий трафик на порту 1194 с интерфейса WAN
ip-firewall-newrule2
Само разрешение

Консольно:
/ip firewall filter add chain=input protocol=tcp dst-port=1194 in-interface=WAN action=accept comment="Accept OpenVPN Requests"

На этом настройка OpenVPN на роутере hAP ac завершена, переходим к роутеру hEX

3. Настройка OpenVPN клиента и интерфейса туннеля на hEX
На данном роутере нам необходимо проделать гораздо меньше операций для запуска клиента.
Помним, что создали сертификат клиента! Загружаем его в роутер и импортируем по аналогии с hAP ac.

hex-import-cert

Загружаем и импортируем сертификат и ключ клиента

Консольно:
/certificate import file-name=client.crt passphrase=""
/certificate import file-name=client.key passphrase=""

Создаем профиль для OpenVPN в меню PPP

ppp-ovpn-client-profile

Добавляем новый профиль

Консольно:
/ppp profile add name=ovpn-client change-tcp-mss=yes use-upnp=no use-mpls=yes use-compression=no use-encryption=yes

Добавляем интерфейс OpenVPN для подключения к OpenVPN серверу.
Как мы помним из первой части цикла статей, внешний IP адрес у нас 98.76.54.32

ovpn-client

Добавляем интерфейс клиента OpenVPN
new-ovpn-client
Задаем имя интерфейса
ppp-ovpn-clientnew
Заполняем параметры для подключения к серверу OpenVPN

Консольно:
/interface ovpn-client add name=ovpn-outclient connect-to=98.76.54.32 port=1194 mode=ip user=client password=123456789 profile=ovpn-client certificate=client.crt_0 auth=md5 cipher=blowfish128

Шифрование Вы можете выбрать любое, которое установили доступным для сервера.
После создания интерфейса туннель должен уже быть активен. В списке IP адресов Вы должны увидеть IP 172.16.10.2 полученный от OpenVPN сервера.
Также в статусе можно увидеть с какими параметрами подключен интерфейс.

ovpn-client-status

Признаки активного соединения

Вот мы и закончили создание OpenVPN туннеля между двумя роутерами hAP ac и hEX
Буду рад любым замечаниям или комментариям. Возможно Вы знаете, как сделать лучше!

P.S.
Аналогом данного решения может послужить вариант PPTP туннеля. А шифрование можно организовать в самом EoIP посредством IPsec

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

Продолжение:
Создание домашней сети на базе устройств MikroTik: Часть 5 — Создание EoIP туннеля

Список всех статей в хронологическом порядке: История статей

Поддержка блога

Если Вам не безразлична судьба блога или Вы просто хотите отблагодарить Автора за его труд, смело переходите на страницу Поддержки, там описана вся информация, по тому, как это сделать проще простого =)

Если Вы хотите изучить MikroTik, то это можно реализовать с помощью специального онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA, а автором курса является официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто даже не держал его в руках. В состав курса входят 162 видеоурока, 45 лабораторных работ и вопросы для самопроверки с конспектом. Кстати я получал сертификат MTCNA именно тут!

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Tls error tls crypt unwrapping failed from
  • Tls error secret is not supplied by sds
  • Tls error cannot locate hmac in incoming packet from af inet
  • Tls error bio read tls read plaintext error
  • Tls error on connection recv the tls connection was non properly terminated

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии