NAT провайдерінің артында Linux құрылғысы мен Mikrotik арасындағы IPIP IPsec VPN туннелі

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-жалпы x86_64)

  • Eth0 1.1.1.1/32 сыртқы IP
  • ipip-ipsec0 192.168.0.1/30 біздің туннель болады

Миктоик: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 провайдерден ішкі IP. Провайдердің сыртқы NAT IP-і динамикалық.
  • ipip-ipsec0 192.168.0.2/30 біздің туннель болады

Біз racoon көмегімен Linux құрылғысында IPsec туннелін жасаймыз. Мен егжей-тегжейлі сипаттамаймын, жақсысы бар мақала у ввполоскин.

Қажетті пакеттерді орнатыңыз:

sudo install racoon ipsec-tools

Біз racoon конфигурациялаймыз, ол шартты түрде ipsec сервері ретінде әрекет етеді. Негізгі режимдегі mikrotik қосымша клиент идентификаторын жібере алмайтындықтан және ол Linux жүйесіне қосылатын сыртқы IP мекенжайы динамикалық болғандықтан, алдын ала ортақ кілтті (құпия сөзді авторизациялау) пайдалану жұмыс істемейді, өйткені құпия сөз IP мекенжайымен де сәйкес болуы керек. қосылатын хост немесе идентификатормен.

RSA кілттері арқылы авторизацияны қолданамыз.

Ракон демоны RSA пішіміндегі кілттерді пайдаланады, ал mikrotik PEM пішімін пайдаланады. Егер сіз racoon-мен бірге келетін plainrsa-gen қызметтік бағдарламасын пайдаланып кілттерді жасасаңыз, оның көмегімен Mikrotika үшін ашық кілтті PEM пішіміне түрлендіру мүмкін болмайды - ол тек бір бағытта түрлендіреді: PEM-тен RSA. openssl де, ssh-keygen де plainrsa-gen арқылы жасалған кілтті оқи алмады, сондықтан оларды пайдалану арқылы да түрлендіру мүмкін болмайды.

Біз openssl көмегімен PEM кілтін жасаймыз, содан кейін оны plainrsa-gen көмегімен racoon үшін түрлендіреміз:

#  Генерируем ключ
openssl genrsa -out server-name.pem 1024
# Извлекаем публичный ключ
openssl rsa -in server-name.pem -pubout > server-name.pub.pem
# Конвертируем
plainrsa-gen -i server-name.pem -f server-name.privet.key
plainrsa-gen -i server-name.pub.pem -f server-name.pub.key

Алынған кілттерді мына қалтаға саламыз: /etc/racoon/certs/server. Ракон демонының атымен іске қосылған пайдаланушының иесін (әдетте root) 600 рұқсатқа орнатуды ұмытпаңыз.

WinBox арқылы қосылған кезде микротикті орнатуды сипаттаймын.

microtik-ке server-name.pub.pem кілтін жүктеңіз: «Файлдар» мәзірі - «Жүктеп салу».

«IP» бөлімін ашыңыз - «IP сек» - «Кілттер» қойындысы. Енді біз кілттерді жасаймыз - «Кілтті жасау» түймесі, содан кейін «Export Pub. Кілт», оны «Файлдар» бөлімінен жүктеп алуға болады, файлды тінтуірдің оң жақ түймешігімен нұқыңыз - «Жүктеу».

Біз racoon ашық кілтін импорттаймыз, «Импорт», «Файл атауы» өрісінің ашылмалы тізімінде біз бұрын жүктеп алған server-name.pub.pem файлын іздейміз.

Mikrotik ашық кілтін түрлендіру қажет

plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key

және оны иесі мен құқықтарын ұмытпай, /etc/racoon/certs қалтасына қойыңыз.

түсініктемелері бар racoon конфигурациясы: /etc/racoon/racoon.conf

log info; # Уровень логирования, при отладке используем Debug или Debug2.

listen {

    isakmp 1.1.1.1 [500]; # Адрес и порт, на котором будет слушать демон.
    isakmp_natt 1.1.1.1 [4500]; # Адрес и порт, на котором будет слушать демон для клиентов за NAT.
    strict_address; # Выполнять обязательную проверку привязки к указанным выше IP.
}

path certificate "/etc/racoon/certs"; # Путь до папки с сертификатами.

remote anonymous { # Секция, задающая параметры для работы демона с ISAKMP и согласования режимов с подключающимися хостами. Так как IP, с которого подключается Mikrotik, динамический, то используем anonymous, что разрешает подключение с любого адреса. Если IP у хостов статический, то можно указать конкретный адрес и порт.

    passive on; # Задает "серверный" режим работы демона, он не будет пытаться инициировать подключения.
    nat_traversal on; # Включает использование режима NAT-T для клиентов, если они за NAT. 
    exchange_mode main; # Режим обмена параметрами подключения, в данном случае ---согласование.
    my_identifier address 1.1.1.1; # Идентифицируем наш linux хост по его ip адресу.
    certificate_type plain_rsa "server/server-name.priv.key"; # Приватный ключ сервера.
    peers_certfile plain_rsa "mikrotik.pub.key"; # Публичный ключ Mikrotik.

    proposal_check claim; # Режим согласования параметров ISAKMP туннеля. Racoon будет использовать значения подключающегося хоста (инициатора) для срока действия сессии                   и длины ключа, если его срок действия сессии больше, или длина его ключа короче, чем у инициатора. Если срок действия сессии короче, чем у инициатора, racoon использует собственное значение срока действия сессии и будет отправлять сообщение RESPONDER-LIFETIME.
    proposal { # Параметры ISAKMP туннеля.

        encryption_algorithm aes; # Метод шифрования ISAKMP туннеля.
        hash_algorithm sha512; # Алгоритм хеширования, используемый для ISAKMP туннеля.
        authentication_method rsasig; # Режим аутентификации для ISAKMP туннеля - по RSA ключам.
        dh_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана при согласовании ISAKMP туннеля.
        lifetime time 86400 sec; Время действия сессии.
    }

    generate_policy on; # Автоматическое создание ESP туннелей из запроса, пришедшего от подключающегося хоста.
}

sainfo anonymous { # Параметры ESP туннелей, anonymous - указанные параметры будут использованы как параметры по умолчанию. Для разных клиентов, портов, протоколов можно              задавать разные параметры, сопоставление происходит по ip адресам, портам, протоколам.

    pfs_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана для ESP туннелей.
    lifetime time 28800 sec; # Срок действия ESP туннелей.
    encryption_algorithm aes; # Метод шифрования ESP туннелей.
    authentication_algorithm hmac_sha512; # Алгоритм хеширования, используемый для аутентификации ESP туннелей.
    compression_algorithm deflate; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

микротик конфигурациясы

«IP» бөліміне оралу - «IPsec»

«Профильдер» қойындысы
Параметр
құн

Толық аты-жөніңіз
Сіздің қалауыңыз бойынша (әдепкі бойынша)

Хэш алгоритмі
sha512

Шифрлау алгоритмі
aes-128

DH-тобы
modp2048

Ұсынысты_тексеру
Талап

Өмір кезеңі
1күн 00:00:00

NAT өту
ақиқат (құбырды белгілеңіз)

DPD
120

DPD Максималды сәтсіздік
5

Құрдастар қойындысы
Параметр
құн

Толық аты-жөніңіз
Сіздің қалауыңыз бойынша (бұдан әрі MyPeer деп аталады)

мекен-жай
1.1.1.1 (IP Linux машиналары)

Жергілікті мекенжай
10.0.0.2 (Microtik IP WAN интерфейсі)

Профиль
Әдепкі

Алмасу режимі
басты

Пассивті
жалған

INITIAL_CONTACT жіберу
шынайы

Ұсыныс қойындысы
Параметр
құн

Толық аты-жөніңіз
Сіздің қалауыңыз бойынша (бұдан әрі MyPeerProposal деп аталады)

Автор. Алгоритмдер
sha512

Encr. Алгоритмдер
aes-128-cbc

Өмір кезеңі
08:00:00

PFS тобы
modp2048

«Сәйкестіктер» қойындысы
Параметр
құн

Құрдастар
MyPeer

Атух. Әдіс
rsa кілті

кілт
mikrotik.privet.key

Қашықтағы кілт
server-name.pub.pem

Саясат үлгілері тобы
Әдепкі

Нотрек тізбегі
бос

Менің ID түрім
автоматты

Қашықтағы идентификатор түрі
автоматты

Сәйкестік
қашықтағы идентификатор

Режим конфигурациясы
бос

Саясат құру
жоқ

"Саясаттар - Жалпы" қойындысы
Параметр
құн

Құрдастар
MyPeer

Туннель
шынайы

Src. Мекенжай
192.168.0.0/30

Тағайындау. Мекенжай
192.168.0.0/30

Хаттама
255 (барлығы)

Үлгі
жалған

"Саясаттар - Әрекет" қойындысы
Параметр
құн

Action
шифрлау

деңгей
сұраушы

IPsec протоколдары
Esp

Ұсыныс
MyPeerProposal

Мен сияқты сізде WAN интерфейсінде snat/masquerade конфигурацияланған болуы мүмкін; бұл ереже шығыс ipsec пакеттері біздің туннельге енуі үшін реттелуі керек:
«IP» - «Брандмауэр» бөліміне өтіңіз.
«NAT» қойындысында біздің snat/masquerade ережесін ашыңыз.

Қосымша қойындысы
Параметр
құн

IPsec саясаты
шықты: жоқ

Ракон жын қайта іске қосылуда

sudo systemctl restart racoon

Егер racoon қайта іске қосу кезінде іске қосылмаса, онда конфигурацияда қате бар; syslog жүйесінде racoon қате анықталған жол нөмірі туралы ақпаратты көрсетеді.

ОЖ жүктелген кезде, racoon демоны желі интерфейстері шығарылмай тұрып іске қосылады және біз тыңдау бөлімінде strict_address параметрін көрсеттік; сізге racoon бірлігін systemd файлына қосу керек.
/lib/systemd/system/racoon.service, [Unit] бөліміндегі After=network.target жолы.

Енді біздің ipsec туннельдері жоғары болуы керек, шығысқа қараңыз:

sudo ip xfrm policy

src 192.168.255.0/30 dst 192.168.255.0/30 
    dir out priority 2147483648 
    tmpl src 1.1.1.1 dst "IP NAT через который подключается mikrotik"
        proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30 
    dir fwd priority 2147483648 
    tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
        proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30 
    dir in priority 2147483648 
    tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
        proto esp reqid 0 mode tunnel

Егер туннельдер жоғары болмаса, syslog немесе journalctl -u racoon қараңыз.

Енді трафикті бағыттау үшін L3 интерфейстерін конфигурациялау қажет. Әртүрлі нұсқалар бар, біз IPIP-ті қолданамыз, өйткені микротик оны қолдайды, мен vti-ді қолданар едім, бірақ, өкінішке орай, ол әлі микротикке енгізілген жоқ. Оның IPIP-тен айырмашылығы, ол мультикастты қосымша инкапсуляциялай алады және пакеттерге fw белгілерін қоя алады, ол арқылы оларды iptables және iproute2 (саясатқа негізделген маршруттау) сүзуге болады. Егер сізге максималды функционалдылық қажет болса, онда, мысалы, GRE. Бірақ біз үлкен үстеме басы бар қосымша функционалдылық үшін төлейтінімізді ұмытпаңыз.

Сіз туннель интерфейстерінің жақсы шолуының аудармасын көре аласыз осында.

Linux жүйесінде:

# Создаем интерфейс
sudo ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
# Активируем
sudo ip link set ipip-ipsec0 up
# Назначаем адрес
sudo ip addr add 192.168.255.1/30 dev ipip-ipsec0

Енді сіз mikrotik артындағы желілерге арналған маршруттарды қоса аласыз

sudo ip route add A.B.C.D/Prefix via 192.168.255.2

Қайта жүктегеннен кейін интерфейсіміз бен маршруттарымыз көтерілуі үшін бізге /etc/network/interfaces ішіндегі интерфейсті сипаттау керек және одан кейінгі уақытта маршруттарды қосу керек немесе барлығын бір файлға жазу керек, мысалы, /etc/ ipip-ipsec0.conf файлын жүктеп алыңыз және оны пост арқылы тартыңыз, файл иесі, құқықтары туралы ұмытпаңыз және оны орындалатын етіп жасаңыз.

Төменде мысал файлы берілген

#!/bin/bash
ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
ip link set ipip-ipsec0 up
ip addr add 192.168.255.1/30 dev ipip-ipsec0

ip route add A.B.C.D/Prefix via 192.168.255.2

Микротикте:

«Интерфейстер» бөліміне жаңа «IP туннелі» интерфейсін қосыңыз:

«IP туннелі» қойындысы - «Жалпы»
Параметр
құн

Толық аты-жөніңіз
Сіздің қалауыңыз бойынша (бұдан әрі IPIP-IPsec0 деп аталады)

МТУ
1480 (егер көрсетілмесе, микротик мту 68-ге дейін кесуді бастайды)

Жергілікті мекенжай
192.168.0.2

Қашықтағы мекенжай
192.168.0.1

IPsec құпиясы
Өрісті өшіру (әйтпесе жаңа теңдестіру құрылады)

Сақтандырғыш
Өрісті өшіріңіз (әйтпесе интерфейс үнемі өшіп қалады, өйткені микротиканың бұл пакеттер үшін өз пішімі бар және Linux-те жұмыс істемейді)

DSCP
мұрагерлік

Бөлшектемеңіз
жоқ

TCP АЖ қысқышы
шынайы

Жылдам жолға рұқсат беріңіз
шынайы

«IP» - «Мекенжайлар» бөліміне мекенжайды қосыңыз:

Параметр
құн

мекен-жай
192.168.0.2/30

интерфейс
IPIP-IPsec0

Енді сіз Linux құрылғысының артындағы желіге маршруттарды қоса аласыз; маршрутты қосқанда шлюз IPIP-IPsec0 интерфейсіміз болады.

PS

Біздің Linux серверіміз транзитивті болғандықтан, ондағы ipip интерфейстері үшін Clamp TCP MSS параметрін орнату мағынасы бар:

келесі мазмұны бар /etc/iptables.conf файлын жасаңыз:

*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT

және /etc/network/interfaces ішінде
post-up iptables-қалпына келтіру </etc/iptables.conf

Менде mikrotik (ip 10.10.10.1) артында желіде жұмыс істейтін nginx бар, оны Интернеттен қолжетімді етіңіз, оны /etc/iptables.conf ішіне қосыңыз:

*nat
-A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1
#На mikrotik, в таблице mangle, надо добавить правило route с назначением 192.168.0.1 для пакетов с адресом источника 10.10.10.1 и портов 80, 443.

# Так же на linux работает OpenVPN сервер 172.16.0.1/24, для клиентов которые используют подключение к нему в качестве шлюза даем доступ в интернет
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT 

Пакет сүзгілері қосылған болса, iptables-ке сәйкес рұқсаттарды қосуды ұмытпаңыз.

Сау болыңыз!

Ақпарат көзі: www.habr.com

пікір қалдыру