Настройка VPN-сервера IKEv2 в туннельном режиме с использованием сертификатов или PSK (pre shared key, что актуально для смартфонов).
Такая схема позволит подключить удаленных клиентов к приватной локальной сети - Point-to-Site. Преимуществом IKEv2 перед остальными типами VPN будет, хорошая безопастность, возможность аппаратной разгрузки шифрования IPsec, (если есть поддержка оборудованием), хорошо подходит для мобильных пользователей т.к. автоматически переподключает VPN в случае временного обрыва Интернет-соединения, восприимчив к частой смене сетей, например, переключение между точками Wi-Fi, или между Wi-Fi и мобильной сетью. Может одновременно работать вместе с L2TP/IPsec. И заключительный бонус, автоматически, после подключения VPN-клиента, передаются необходимые маршруты и DNS-серверы. К недостаткам, можно отнести то, что в дефолтной конфигурации не подойдет для связи Site-to-Site, т.к. отсутствуют интерфейсы через которые можно настроить маршрутизацию.
Схема сети:
ROS: v7.14.2
R1: - Server
- VPN Tunnel: 172.16.255.8/29
- LAN: 172.16.5.0/24
- Domain Name: vpn0.int.lan
Работа с сертификатами:
В нашем примере все клиенты будут подключаться к VPN-серверу по доменному имени, опция "subject-alt-name=DNS:". При попытке подключения по IP, будет возникать ошибка.
Включаем возможность отзыва сертификатов CRL:
Опцию "ca-crl-host" достаточно задать только на корневом сертификате при подписе. Доменное имя должно вести на внешний IP-адрес роутера.
/certificate/settings/set crl-download=yes crl-use=yes crl-store=ram
- Отозвать клиентский сертификат:
/certificate/issued-revoke mtv@vpn0.int.lan
Список отзыва находится по пути http://vpn0.int.lan/crl/1.crl
CA (корневой сертификат ЦС):
Используется для подписи клиентских сертификатов и является центром сертификации. Создаем сертификат ЦС сроком на 10 лет с минимально нобходимыми опциями для "key-usage".
/certificate/
add name=vpn0.ca.int.lan common-name=vpn0.ca.int.lan subject-alt-name=DNS:vpn0.int.lan key-size=2048 days-valid=3650\
country=ru state=kk locality=krd organization=int.lan unit=it\
key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign
- Подписываем:
sign vpn0.ca.int.lan ca-crl-host=vpn0.int.lan
Сертификат сервера:
Создаем сертификат сервера сроком на 10 лет.
/certificate/
add name=vpn0.int.lan common-name=vpn0.int.lan subject-alt-name=DNS:vpn0.int.lan key-size=2048 days-valid=3650\
country=ru state=kk locality=krd organization=int.lan unit=it\
key-usage=tls-server
- Подписываем:
sign vpn0.int.lan ca=vpn0.ca.int.lan
- Делаем доверенным:
set vpn0.int.lan trusted=yes
Client's:
Особенность, если при создании клиентских сертификатов не задавать "key-usage", то это позволит после отзыва сертификата, удалить его (это не правильно). Создаем сертификат клиента сроком на 3 года.
/certificate/
add name=mtv@vpn0.int.lan common-name=mtv@vpn0.int.lan subject-alt-name=email:mtv@vpn0.int.lan key-size=2048 days-valid=1095\
country=ru state=kk locality=krd organization=int.lan unit=it\
key-usage=tls-client
- Подписываем:
sign mtv@vpn0.int.lan ca=vpn0.ca.int.lan
- Делаем доверенным:
set mtv@vpn0.int.lan trusted=yes
Опция "Common Name", это системное имя сертификата и обязательно для заполнения.
Экспорт сертификата в формате PKCS12:
Указание парольной фразы позволяет экспортировать не только открытый, но и закрытый ключ. В этом контейнере будет содержаться: "ключ пользователя", "пользовательский сертификат", "сертификат центра сертификации".
/certificate/export-certificate mtv@vpn0.int.lan type=pkcs12 export-passphrase=password
Настройка IKEv2 сервера:
Создание пула IP-адресов:
/ip/pool/
add name=pool_ikev2 ranges=172.16.255.9-172.16.255.14
Profiles:
/ip/ipsec/profile/
add name=profile_ikev2 hash-algorithm=sha1 enc-algorithm=3des,aes-256 nat-traversal=yes
- Для PSK:
add name=profile_ikev2 hash-algorithm=sha256 enc-algorithm=3des,aes-256 nat-traversal=yes
Proposals:
/ip/ipsec/proposal/
add name=proposal_ikev2 auth-algorithms=sha1 enc-algorithms=aes-256-cbc pfs-group=modp1024
- Для PSK:
add name=proposal_ikev2 auth-algorithms=sha256 enc-algorithms=aes-256-cbc pfs-group=modp1024
Mode Configs:
- split-include - передать клиенту указанные маршруты;
- split-dns - передать клиенту DNS-суффикс;
- system-dns - клиенту будут переданы DNS-серверы из IP -> DNS;
- static-dns - передать клиенту статический DNS;
/ip/ipsec/mode-config/
add name=cfg_ikev2 responder=yes address-pool=pool_ikev2 address-prefix-length=32 split-include=172.16.5.0/24 system-dns=no
- Резолвить доменные имена AD DC:
set ikev2 system-dns=no split-dns="int.lan" static-dns="ip_dns_server"
Groups:
/ip/ipsec/policy/group/
add name=group_ikev2
Policies:
/ip/ipsec/policy/
add src-address=0.0.0.0/0 dst-address=172.16.255.8/29 protocol=all template=yes group=group_ikev2\
action=encrypt ipsec-protocols=esp proposal=proposal_ikev2
Peers:
Серевер не иницициирует первым подключение с клиентами, поэтому включаем пассивный режим.
/ip/ipsec/peer/
add address=0.0.0.0/0 name=peer_ikev2 profile=profile_ikev2 exchange-mode=ike2 passive=yes send-initial-contact=no
Identities:
Указываем сертификат сервера "vpn0.int.lan".
PSK - Чтобы клиент мог подключиться к серверу по "FQDN" - необходимо задать "My ID Type: fqdn" и в "My ID" указать доменное имя сервера, иначе, в режиме "auto", можно будет подключиться к серверу только по "IP-адресу".
/ip/ipsec/identity/
add peer=peer_ikev2 auth-method=digital-signature certificate=vpn0.int.lan remote-certificate=none policy-template-group=group_ikev2 mode-config=cfg_ikev2 generate-policy=port-strict
- Для PSK:
add peer=peer_ikev2 auth-method=pre-shared-key secret="pass" policy-template-group=group_ikev2 my-id=fqdn:vpn0.int.lan mode-config=cfg_ikev2 generate-policy=port-strict
Настройка Firewall (Filter Rules):
- Чтобы клиенты могли подключиться к VPN-серверу, разрешаем input подключения для IPsec, NAT-T, IPsec-Esp.
- Чтобы со стороны клиентов был доступен сам роутер, разрешаем input для IPsec-Policy.
- Чтобы со стороны клиентов была доступна сеть за VPN-сервером, разрешаем forward для IPsec-Policy.
/ip/firewall/filter/
add chain=input protocol=udp dst-port=500,4500 in-interface-list=ISP action=accept comment="IPsec IKE, NAT-T, ESP, Policy"
add chain=input protocol=ipsec-esp in-interface-list=ISP action=accept
add chain=input src-address=172.16.255.8/29 in-interface-list=ISP ipsec-policy=in,ipsec action=accept
add chain=forward src-address=172.16.255.8/29 in-interface-list=ISP ipsec-policy=in,ipsec action=accept
Управление сертификатами в Windows:
При импорте сертификатов, необходимо указать "Расположение хранилища" как "Локальный компьютер", все остальное по умолчанию. Импортированные сертификаты будут находится в "Личное" и "Доверенные корневые центры сертификации".
Управление через:
- certmgr.msc - Сертификаты, текущий пользователь;
- certlm.msc - Сертификаты, локальный компьютер.
Android:
Клиент: strongSwan VPN Client.
В нем также работают Split Network, DNS.
MIUI 12: Импортированные сертификаты можно найти:
Пароли и безопасность -> Конфиденциальность -> Шифрование и учетные данные -> Учетные данные пользователя