Настраиваем маршрутизируемое IPSec-соединение с использованием IKEv2 и GRE между MikroTik RouterOS и CentOS
версия CentOS - 7.7.1908
версия MikroTik RouterOS - 6.45.5
внешний IP-адрес CentOS - 1.1.1.1
внешний IP-адрес MikroTik - динамический
внутренний IP-адрес CentOS в туннеле IPSec - 10.1.1.1
внутренний IP-адрес MikroTik в туннеле IPSec - 10.2.2.2
внутренний IP-адрес CentOS в туннеле GRE - 192.168.100.1/30
внутренний IP-адрес MikroTik в туннеле GRE - 192.168.100.2/30
проверка подлинности будут выполняться на основе сертификатов
Настройка центра сертификации и выпуск сертификатов
Замечание: центр сертификации будет выпускать только сертификаты для работы IPSec и без использования списков отзыва. При этом предполагается, что центр сертификации расположен на некотором другом сервере
создаем папку /etc/CA/PrivateCA/certs
mkdir -p /etc/CA/PrivateCA/certs
создаем пустой файл базы данных
touch /etc/CA/PrivateCA/database
генерируем случай номер следующего сертификата
openssl rand -hex 16 > /etc/CA/PrivateCA/serial
создаем файл /etc/CA/PrivateCA/main.conf с основными настройками ЦС
[default]
default_ca = ca_section
[ca_section]
database = /etc/CA/PrivateCA/database
serial = /etc/CA/PrivateCA/serial
certificate = /etc/CA/PrivateCA/root.cer
private_key = /etc/CA/PrivateCA/root.key
RANDFILE = /etc/CA/PrivateCA/rand
new_certs_dir = /etc/CA/PrivateCA/certs
unique_subject = no
copy_extensions = copy
default_days = 365
default_md = sha512
name_opt = RFC2253
policy = policy_section
[policy_section]
commonName = supplied
[req]
default_bits = 8192
encrypt_key = yes
utf8 = yes
string_mask = utf8only
distinguished_name = dn_section
prompt = yes
[dn_section]
commonName = "CN="
commonName_default = "SomeCommonName"
[ca_ext_section]
subjectKeyIdentifier = hash
basicConstraints = critical,CA:true,pathlen:0
keyUsage = critical,digitalSignature,keyCertSign
[server_ext_section]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth,serverAuth
создаем запрос сертификата центра сертификации
openssl req -new -config /etc/CA/PrivateCA/main.conf -out /etc/CA/PrivateCA/root.csr -keyout /etc/CA/PrivateCA/root.key -extensions ca_ext_section
создаем самоподписанный сертификат центра сертификации
openssl ca -selfsign -config /etc/CA/PrivateCA/main.conf -in /etc/CA/PrivateCA/root.csr -out /etc/CA/PrivateCA/root.cer -extensions ca_ext_section -days 1825
создаем запрос сертификата для CentOS
openssl req -new -config /etc/CA/PrivateCA/main.conf -out /root/pki/hub_ipsec.csr -keyout /root/pki/hub_ipsec.key -extensions server_ext_section
выпускаем сертификат для CentOS
openssl ca -config /etc/CA/PrivateCA/main.conf -in /root/pki/hub_ipsec.csr -out /root/pki/hub_ipsec.cer -extensions server_ext_section
создаем запрос сертификата для MikroTik
openssl req -new -config /etc/CA/PrivateCA/main.conf -out /root/pki/spoke_ipsec.csr -keyout /root/pki/spoke_ipsec.key -extensions server_ext_section
выпускаем сертификат для MikroTik
openssl ca -config /etc/CA/PrivateCA/main.conf -in /root/pki/spoke_ipsec.csr -out /root/pki/spoke_ipsec.cer -extensions server_ext_section
копируем файлы root.cer, hub_ipsec.cer, spoke_ipsec.cer на CentOS и на MikroTik, файл hub_ipsec.key - только на CentOS, а файл spoke_ipsec.key - только на MikroTik
Настройка CentOS
в файл /etc/sysctl.conf добавляем
net.ipv4.ip_forward=1
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.default.accept_redirects=0
Замечание 1: о необходимости использования данных параметров (всех, кроме первого, который необходим для включения маршрутизации IPv4-пакетов) говорится при проверке работы Libreswan с помощью команды ipsec verify
Замечание 2: просмотреть, например, значение параметра net.ipv4.ip_forward можно командой cat /proc/sys/net/ipv4/ip_forward
устанавливаем Libreswan
yum install libreswan
останавливаем службу IPSec
systemctl stop ipsec
удаляем текущую базу данных NSS
rm /etc/ipsec.d/*db
инициализируем новую базу данных NSS
ipsec initnss
создаем файл /etc/ipsec.d/main.conf
conn hub_spoke
left=1.1.1.1
leftcert=hub
leftrsasigkey=%cert
leftid=%fromcert
leftsubnet=10.1.1.1/32
leftsourceip=10.1.1.1
right=%any
rightcert=spoke
rightrsasigkey=%cert
rightid=%fromcert
rightsubnet=10.2.2.2/32
ikev2=insist
ike=aes256-sha512;ecp_521
esp=aes256-sha512;ecp_521
type=tunnel
authby=rsasig
auto=start
Замечание: таким образом, при установлении соединения loopback-интерфейсу будет добавлен IP-адрес 10.1.1.1, а в таблицу маршрутизации - соответствующий маршрут к хосту 10.2.2.2
настраиваем права доступа к файлу /etc/ipsec.d/main.conf
chmod 600 /etc/ipsec.d/main.conf
включаем автоматический запуск Libreswan при старте системы
systemctl enable ipsec
создаем файл /etc/sysconfig/network-scripts/ifcfg-spoke
DEVICE=spoke
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=10.2.2.2
MY_OUTER_IPADDR=10.1.1.1
MY_INNER_IPADDR=192.168.100.1/30
MTU=1398
разрешаем IPSec-трафик и GRE-трафик только поверх IPSec (на примере входящего трафика)
iptables -A INPUT -i eth0 -p udp -m udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p gre -m policy --dir in --pol ipsec -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j DROP
объединяем сертификат и закрытый ключ в PKCS12-файл
openssl pkcs12 -export -in hub_ipsec.cer -inkey hub_ipsec.key -name "hub" -out hub_ipsec.p12
импортируем сертификат ЦС
certutil -A -i root.cer -n "Private CA" -t "CT,," -d sql:/etc/ipsec.d
импортируем сертификат и закрытый ключ CentOS
ipsec import hub_ipsec.p12
Замечание: извлечь закрытый ключ из базы данных NSS можно командами
pk12util -o hub_ipsec.p12 -d sql:/etc/ipsec.d/ -n hub
openssl pkcs12 -in hub_ipsec.p12 -out hub_ipsec.key
импортируем сертификат Mikrotik
certutil -A -i spoke_ipsec.cer -n "spoke" -t ",," -d sql:/etc/ipsec.d
запускаем службу IPSec
systemctl start ipsec
Настройка Mikrotik
устанавливаем сертификат ЦС
certificate import file-name=root.cer
устанавливаем сертификат CentOS
certificate import file-name=hub_ipsec.cer
устанавливаем сертификат Mikrotik
certificate import file-name=spoke_ipsec.cer
устанавливаем закрытый ключ Mikrotik
certificate import file-name=spoke_ipsec.key passphrase=
создаем профиль IPSec
ip ipsec profile add name="profile1" dh-group=ecp521 enc-algorithm=aes-256 hash-algorithm=sha512
создаем узел IPSec
ip ipsec peer add name="peer1" profile=profile1 address=1.1.1.1 exchange-mode=ike2 send-initial-contact=yes
создаем предложение IPSec
ip ipsec proposal add name="proposal1" auth-algorithms=sha512 enc-algorithms=aes-256-cbc pfs-group=ecp521
создаем политику IPSec
ip ipsec policy peer=peer1 proposal=proposal1 tunnel=yes ipsec-protocols=esp sa-src-address=0.0.0.0 sa-dst-address=1.1.1.1 src-address=10.2.2.2/32 dst-address=10.1.1.1/32 protocol=all src-port=any dst-port=any action=encrypt level=require
создаем правило проверки подлинности IPSec
ip ipsec identity add peer=peer1 auth-method=digital-signature match-by=certificate certificate=spoke_ipsec.cer_0 remote-certificate=hub_ipsec.cer_0
создаем loopback-интерфейс
interface bridge add name=loopback
назначаем loopback-интерфейсу IP-адрес
ip address add interface=loopback address=10.2.2.2
создаем GRE-туннель
interface gre add name="hub" local-address=10.2.2.2 remote-address=10.1.1.1
Замечание: keepalive-сообщения должны быть выключены - в таком случае интерфейс всегда находится в активном состоянии
назначаем адрес GRE-интерфейсу
ip address add interface="hub" address=192.168.100.2/30
разрешаем IPSec-трафик и GRE-трафик только поверх IPSec (на примере исходящего трафика)
ip firewall filter add chain=output out-interface=ether1 protocol=udp dst-port=500,4500 action=accept
ip firewall filter add chain=output out-interface=ether1 protocol=ipsec-esp action=accept
ip firewall filter add chain=output out-interface=ether1 protocol=gre ipsec-policy=out,ipsec action=accept
ip firewall filter add chain=output out-interface=ether1 protocol=gre action=drop
достойная статья..
а можете ее актуализировать до 2022 года..
с последней centos7 и свежим микротом
цены бы не было ей....