Создание подключения к IPSEC
Для настройки нового IPSEC туннеля необходимо:
— определить сетевые параметры будущего туннеля
— создать RSA-сертификат клиента
— настроить конфигурацию со стороны сервера
— настроить конфигурацию со стороны клиента
В качестве клиента рассматривается роутер Mikrotik c RouterOS v=>6.46
Сетевые параметры будущего туннеля
Текущий сервер IPSEC имеет адрес server.example.com
Для клиента необходимо создать DNS-запись в домене example.com в соответствии с распоряжением руководителя IT-отдела. В данном примере будем использовать имя testing.example.com
Со стороны сервера используется подсеть 172.16.0.0/24 — именно в нее будет обеспечен доступ через туннель.
Подсеть со стороны клиента устанавливается в соответствии с распоряжением руководителя IT-отдела. В примере будет использоваться подсеть 192.168.88.0/24 и локальный адрес роутера 192.168.88.1
Роутер может находиться за NAT, использование «белого» IP не обязательно, однако необходимо убедиться, что провайдер пропускает через свою сеть трафик на порты UPD/500 и UDP/4500 и протокол ESP
RSA-сертификат клиента
Для создания сертификатов на сервере VPN имеется утилита easyrsa, расположенная в каталоге /opt/easy-rsa-ipsec/easyrsa3/
Переходим в каталог:
# cd /opt/easy-rsa-ipsec/easyrsa3
Для формирования в сертификате правильного поля «DNS» присваиваем переменной значение имени клиета:
# export EASYRSA_REQ_CN="testing.example.com"
Создаем запрос. В интерактивном режиме программа предложит создать пароль на сертификат, который необходимо записать и подтвердить имя клиента.
# ./easyrsa gen-req testing.example.com
Вывод программы:
# ./easyrsa gen-req testing.example.com
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019
Generating a RSA private key
......................................................+++++
..............................................................................+++++
writing new private key to '/opt/easy-rsa-ipsec/easyrsa3/pki/easy-rsa-28666.RoOCVQ/tmp.X6gzfJ'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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.
-----
Common Name (eg: your user, host, or server name) [testing.example.com]:
Keypair and certificate request completed. Your files are:
req: /opt/easy-rsa-ipsec/easyrsa3/pki/reqs/testing.example.com.req
key: /opt/easy-rsa-ipsec/easyrsa3/pki/private/testing.example.com.key
Необходимо подписать запрос. Для подтверждения данных введите yes, а для подписания закрытой части корневого сертификата введите пароль корневого сертификата:
# ./easyrsa sign-req client testing.example.com
Вывод программы:
# ./easyrsa sign-req client testing.example.com
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a client certificate for 1080 days:
subject=
commonName = testing.example.com
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/easy-rsa-ipsec/easyrsa3/pki/easy-rsa-28716.lm5m2G/tmp.T3Zwke
Enter pass phrase for /opt/easy-rsa-ipsec/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'testing.example.com'
Certificate is to be certified until Jan 24 17:38:08 2023 GMT (1080 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /opt/easy-rsa-ipsec/easyrsa3/pki/issued/testing.example.com.crt
В результате в хранилище сертификатов сформировались следующие файлы:
/opt/easy-rsa-ipsec/easyrsa3/pki/issued/testing.example.com.crt — сертификат клиента
/opt/easy-rsa-ipsec/easyrsa3/pki/private/testing.example.com.key — закрытый ключ
Также в хранилище имеются другие необходимые файлы:
/opt/easy-rsa-ipsec/easyrsa3/pki/ca.crt — корневой сертификат
/opt/easy-rsa-ipsec/easyrsa3/pki/issued/server.example.com .crt — сертификат сервера
Эти файлы, а также корневой сертификат необходимо загрузить на локальный компьютер для дальнейшего импорта на роутер
Настройка конфигурации со стороны сервера
Для каждого клиентского туннеля на сервере создается типовая конфигурация, которую необходимо записать в конец файла /etc/ipsec.conf
конфигурация имеет следующий вид:
conn testing
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@server.example.com
leftcert=/etc/ipsec.d/certs/server.example.com.crt
leftsendcert=always
leftsubnet=172.16.0.0/24
right=%any
rightid=@testing.example.com
rightsubnet=192.168.88.0/24
Где изменению подлежат следующие параметры:
conn — имя соединения, соответствует DNS-имени подсоединяемого роутера, в примере — testing
rightid — имя клиента, соответствует полному (FQDN) DNS-имени подсоединяемого роутера, в примере — testing.example.com (указание символа
— обязательно)
rightsubnet — подсеть клиента, в примере — 192.168.88.0/24
Остальные параметры редактировать не требуется.
После внесения изменений в конфигурацию, обновим настройки демона:
# ipsec reload
Если конфигурация записана верно, в выводе команды ipsec status отобразится созданное новое подключение
Настройка конфигурации со стороны клиента
Предполагается, что на клиентском роутере выполнена первоначальная настройка:
— установлены настройки интерфейса WAN, организован доступ в интернет
— установлены настройки интерфейса LAN
— установлено правильное время и часовой пояс. Рекомендуется использовать пакет NTP из набора extra-packages.
— Фаерволл имеет настройки «по умолчанию»
Необхоидмо выполнить импорт сертификатов на роутер. Для этого через интерфейс winbox или другим удобным способом загружаем на роутер следующие ранее полученные файлы:
testing.example.com .crt — сертификат клиента
testing.example.com .key — закрытый ключ
ca.crt — корневой сертификат
server.example.com.crt — сертификат сервера
После успешной загрузки выполняем импорт сертификатов, для закрытого ключа указывая пароль:
/certificate import file-name=ca.crt
/certificate import file-name=server.example.com.crt
/certificate import file-name=testing.example.com.crt
/certificate import file-name=testing.example.com.key passphrase=1234567890
Сертификаты отобразятся в списке:
/certificate print
Flags: K - private-key, L - crl, C - smart-card-key, A - authority, I - issued, R - revoked, E - expired, T - trusted
# NAME COMMON-NAME SUBJECT-ALT-NAME
0 T ca.crt_0 server.example.com
1 K T testing.ga... testing.example.com DNS:testing.example.com
2 T server.gazss... server.example.com DNS:server.example.com
Создаем профили подключения:
/ip ipsec profile add name=ike2 hash-algorithm=sha1 enc-algorithm=aes-128,3des dh-group=modp2048,modp1024 lifetime=1d proposal-check=obey nat-traversal=yes dpd-interval=2m dpd-maximum-failures=5
/ip ipsec proposal add name=ike2 auth-algorithms=sha512,sha256 enc-algorithms=aes-256-cbc lifetime=30m pfs-group=none
/ip ipsec policy group add name=ike2
/ip ipsec mode-config add name=ike2 responder=no
Создаем подключение. В качестве адреса address указывается адрес сервера IPSEC:
/ip ipsec peer add name="server.example.com" address=server.example.com profile=ike2 exchange-mode=ike2 send-initial-contact=yes
Указываем параметры авторизации, внимательно проверяя имена сертификатов и FQDN:
/ip ipsec identity add peer=server.example.com auth-method=digital-signature my-id=fqdn:testing.example.com match-by=certificate certificate=testing.example.com.crt_0 remote-certificate=server.example.com.crt_0 generate-policy=no policy-template-group=ike2
Добавляем политику, верно указывая клиентскую подсеть и имя сервера:
/ip ipsec policy add dst-address=172.16.0.0/24 peer=server.example.com proposal=ike2 sa-dst-address=server.example.com sa-src-address=0.0.0.0 src-address=192.168.88.0/24 tunnel=yes
Работу подключения можно проверить с помощью вывода команд:
/ip ipsec active-peers print
/ip ipsec installed-sa print
Для успешного прохождения пакетов из локальной сети через туннель, необходимо добавить правила в фаерволл:
/ip firewall nat add action=accept chain=srcnat dst-address=172.16.0.0/24
/ip firewall filter add action=accept chain=forward dst-address=172.16.0.0/24 src-address=192.168.88.0/24
/ip firewall filter add action=accept chain=forward dst-address=192.168.88.0/24 src-address=172.16.0.0/24
Проверка туннеля
Со стороны Mikrotik проверить работу туннеля можно с помощью команды:
/ping address=172.16.0.100 src-address=192.168.88.1
где src-address — локальный адрес роутера
Отладка туннеля
Для включения отладки со стороны сервера IPSEC, необходимо в файле /etc/strongswan.d/charon-logging.conf
привести секцию charon к следующему виду:
charon {
filelog {
charon {
path = /var/log/charon.log
time_format = %b %e %T
ike_name = yes
append = no
default = 2
flush_line = yes
}
}
syslog {
}
}
И перезапустить демон
# service ipsec restart
В результате отладочные сообщения IPSEC будут записываться в файл /var/log/charon.log
На Mikrotik отладку IPSEC можно включить командой:
/system logging add action=memory topics=ipsec