Как бы я не любил Mikrotik, стоит отметить что не все там гладко как рассказывают многие, в т.ч. и я сам. Настройка его настолько наполнена вариантами, что открывает безграничные двери перед возможностями и тут же закрывает другие двери перед обычными пользователями. Ложку дегтя добавляет огромное количество моделей и версий ОС, что делает универсальные мануалы не такими уж и универсальными. Все это познается при реализации новой задачи, которая еще не описана в интернете достаточно хорошо.
Купив новые телефоны на последних версиях Android, стало ясно что подключиться к роутеру из вне через туннель по старой схеме больше не получится, нам теперь доступны только модные IPsec.
Статья актуальна на день ее написания и может потерять актуальность в любой момент. Не используются сознательно некоторые привычные слова, по понятным причинам. Принимаем все как есть, а комментарии доступны только в telegram канале. Там же можно сообщить о ошибках в статьях и дать свои рекомендации, с удовольствием дополню.
Метод описанный ниже я использую на своем rb2011uias c v.6.48.1. Инструкцию, которую я нашел и взял за основу лежит тут: forum.mikrotik.com. Есть рабочий мануал на v.7, где можно подключаться без сертификатов, но на мой роутер v.7 еще так и не вышла в стабильном исполнении и имеет много глюков, и это кроме всех остальных, которые в семерке еще сидят бонусом. Поэтому я не готов ставить сырую версию ОС на роутер удаленно, как говорится: "Удаленная настройка роутера - к дальней дороге". Поэтому сегодня практикуем немного кривой способ, зато рабочий.
Делать все сильно проще и информативнее из консоли, хотя ранее я делал почти все из графического интерфейса. Подключаемся через Winbox и идем в консоль:
Теперь не спеша и внимательно вставляем команды:
# Create CA certificate and sign it
/certificate add name="Home CA" common-name="Home CA" key-size=4096 days-valid=7300 key-usage=key-cert-sign,crl-sign
/certificate sign "Home CA"
Как и написано в комментарии, создаем и подписываем корневой сертификат. А теперь еще один, сертификат сервера.
# Create server certificate and sign it (Replace "XXXXXXXXXXX.sn.mynetname.net" with your DNS from "/ip cloud" otherwise some IKE2 clients would fail to connect)
/certificate add name="Home server" common-name="Home server" subject-alt-name="DNS:012345678910.sn.mynetname.net" key-size=4096 days-valid=3650 key-usage=tls-server
/certificate sign "Home server" ca="Home CA"
Теперь нам нужны сертификаты для клиентов. Создадим один такой
# Create client certificate, sign it and export it as PKCS12 keystore (contains client certificate, client private key and CA)
/certificate add name="Home client1" common-name="Home client1" key-size=4096 days-valid=3650 key-usage=tls-client
/certificate sign "Home client1" ca="Home CA"
/certificate export-certificate "Home client1" file-name="Home client1" type=pkcs12 export-passphrase=1234567890
Результатом выполнения станет сертификат в системе и на диске роутера в зашифрованном виде с паролем от 1 до 0. Сертификат этот загружаем в телефон или компьютер, он потребуется вместо пароля к туннелю.
Теперь создадим IP Pool адресов для наших клиентов.
# Create IP pool for VPN users
/ip pool add name=vpn ranges=10.22.22.10-10.22.22.20
Естественно адреса можно выбрать и другие не забыв поменять их и дальше. Следующее правило в моем случае уже было, настраивал его в своих мануалах ранее для других целей. Правило нужно поднять повыше правила с действием drop для INPUT правил. В моем случае оно практически в начале списка.
# Add firewall rules for IKE2 VPN
#
# Add this rule before action=drop rule in INPUT chain
/ip firewall filter add action=accept chain=input comment="Allow IPSEC/IKE2 connections" dst-port=500,4500 protocol=udp
Далее добавим еще 2 правилаи поместим их перед правилами с действием fasttrack в цепочке правил FORWARD.
#
# Add these 2 rules before "fasttrack" rule in FORWARD chain
/ip firewall filter add action=accept chain=forward comment="Accept in ipsec policy" ipsec-policy=in,ipsec
/ip firewall filter add action=accept chain=forward comment="Accept out ipsec policy" ipsec-policy=out,ipsec
Далее нам рекомендуют для доступа к роутеру сделать следующие действия, однако я бы рекомендовал их выполнять лишь тем, кто понимает что это и зачем.
#
# OPTIONAL - allow access to router from "10.22.22.10-10.22.22.20" IPs and masquerade traffic coming from VPN clients, so devices on your LAN sees that traffic is coming from the router IP rather than VPN IP
/ip firewall address-list add address=10.22.22.10-10.22.22.20 comment=VPN list=allowed_to_router
/ip firewall nat add action=masquerade chain=srcnat comment="Masquerade VPN traffic so devices see connections made from router IP" src-address=10.22.22.10-10.22.22.20
Теперь настроим IPsec
# Configure IPSEC settings (below used profile/proposal are compatible with Windows 10 IKE2 ciphers)
/ip ipsec mode-config add address-pool=vpn name=vpn
/ip ipsec policy group add name=vpn
/ip ipsec profile add dh-group=modp1024 enc-algorithm=aes-256 hash-algorithm=sha256 name=vpn
/ip ipsec peer add exchange-mode=ike2 name=vpn passive=yes profile=vpn
/ip ipsec proposal add enc-algorithms=aes-256-cbc name=vpn pfs-group=none
/ip ipsec identity add auth-method=digital-signature certificate="Home server" comment="Home client1" generate-policy=port-strict match-by=certificate mode-config=vpn peer=vpn policy-template-group=vpn remote-certificate="Home client1"
/ip ipsec policy add dst-address=0.0.0.0/0 group=vpn proposal=vpn src-address=0.0.0.0/0 template=yes
Про настройки IPsec я писал ранее в статье:
Именно благодаря статьи выше у меня уже была выполнена часть действий, т.к. схожего много.
Теперь что касается телефона Android. Через штатные настройки подключится не получается, есть рекомендации от других пользователей, но я напишу про это позже, когда протестирую все на себе. А пока потебуется стороннее приложение. Скачиваем в маркете приложение Strongswan. Далее отправляем на телефон сертификат, тот самый, который мы создавали вначале. Нас отправляют в пункт настроек телефона для установки сертификата, но кажется это можно сделать удобным способом из приложения.
2. Go to Android settings --> "Security & Lock screen" --> "Encryption & credentials" --> "Install a certificate" -> "VPN & app user certificate"
Пароль для установки от 1 до 0, мы же его сами установили....
В самом приложении все интуитивно понятно, выбираем добавить профиль и вводим:
Server: XXXXXXXXXXX.sn.mynetname.net (естественно хх заменяем на свой уникальный адрес)
VPN Type: IKEv2 Certificate
User certificate: выбираем сертификат, который установили выше, а если не делали этого, то устанавливаем его.
Profile name: Home
Advanced settings: Checked
IKEv2 Algorithms: aes256-sha256-prfsha256-modp1024
IPsec/ESP Algorithms: aes256-sha1
Нажимаем сохранить и все должно работать, по крайней мере у меня и моей команды было именно так.
Как и говорил выше, статья считается "условно законченной", т.е. будет или дополнятся или к ней выйдет вторая, посмотрим по наличию моего свободного времени.
#mikrotik #routeros #Android #IPsec #IKEv2