NAT провайдеринин артында Linux машинасы менен Микротиктин ортосундагы 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

  • Provayderден Eth0 10.0.0.2/30 ички IP. Провайдердин тышкы NAT IP динамикалык.
  • ipip-ipsec0 192.168.0.2/30 биздин туннелибиз болот

Раконду колдонуп Linux машинасында IPsec туннелин түзөбүз. Мен майда-чүйдөсүнө чейин сүрөттөгөн жокмун, бир жакшы бар макала у ввполоскин.

Керектүү пакеттерди орнотуу:

sudo install racoon ipsec-tools

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

RSA ачкычтары аркылуу авторизацияны колдонобуз.

Ракон демону RSA форматындагы ачкычтарды, ал эми mikrotik PEM форматын колдонот. Эгерде сиз ачкычтарды racoon менен келген plainrsa-gen утилитасынын жардамы менен түзсөңүз, анда сиз анын жардамы менен Mikrotika үчүн ачык ачкычты PEM форматына айландыра албайсыз - ал бир гана багытта өзгөрөт: PEMден RSAга. Openssl да, ssh-keygen да plainrsa-gen тарабынан түзүлгөн ачкычты окуй алган эмес, андыктан аларды колдонуу менен конвертациялоо да мүмкүн эмес.

Биз openssl аркылуу PEM ачкычын жаратып, андан кийин plainrsa-gen аркылуу аны раконго айландырабыз:

#  Генерируем ключ
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 аркылуу туташып жатканда микротик орнотууну сүрөттөп берем.

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-Group
modp2048

сунушту_текшерүү
талап

Өмүр бою
1d 00:00:00

NAT Traversal
чын (кутучаны белгиле)

DPD
120

DPD Максималдуу ката
5

Курдаштар өтмөгү
параметр
Наркы

ысым
Сиздин каалооңуз боюнча (мындан ары MyPeer деп аталат)

дарек
1.1.1.1 (IP Linux машиналары)

Жергиликтүү дарек
10.0.0.2 (IP WAN интерфейси микротик)

Profile
жарыяланбаган

Алмашуу режими
негизги

ишмер эмес
жалган

INITIAL_CONTACT жөнөтүү
чыныгы

Сунуш өтмөгү
параметр
Наркы

ысым
Сиздин каалооңуз боюнча (мындан ары MyPeerProposal деп аталат)

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

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

Өмүр бою
08:00:00

PFS тобу
modp2048

"Идентификаторлор" өтмөгү
параметр
Наркы

Теңдеш
MyPeer

Atuh. Метод
rsa ачкычы

ачкыч
mikrotik.privet.key

Remote Key
server-name.pub.pem

Саясат шаблон тобу
жарыяланбаган

Notrack Chain
бош

Менин ID түрүм
унаам

Remote ID түрү
унаам

Match By
алыскы идентификатор

Mode Configuration
бош

Саясат түзүү
жок

Өтмөк "Саясаттар - Жалпы"
параметр
Наркы

Теңдеш
MyPeer

туннель
чыныгы

Src. Дарек
192.168.0.0/30

Dest. Дарек
192.168.0.0/30

протоколу
255 (баары)

Калып
жалган

Өтмөк "Саясаттар - Аракет"
параметр
Наркы

иш-аракеттер
код

деңгээл
талап кылат

IPsec протоколдору
ESP

сунуш
MyPeerProposal

Кыязы, мага окшоп, сизде WAN интерфейсиңизде snat/masquerade конфигурацияланган; бул эреже чыгуучу ipsec пакеттери биздин туннелге кириши үчүн туураланышы керек:
"IP" - "Брандмауэр" бөлүмүнө өтүңүз.
"NAT" өтмөгү, биздин snat/masquerade эрежесин ачыңыз.

Өркүндөтүлгөн өтмөк
параметр
Наркы

IPsec саясаты
чыгып: жок

Ракон жини кайра иштетилүүдө

sudo systemctl restart racoon

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

ОС жүктөлгөндө, ракон демону тармак интерфейстери ачылганга чейин иштей баштайт жана биз угуу бөлүмүндө strict_address параметрин көрсөттүк; сиз системалык файлга ракон бирдигин кошушуңуз керек.
/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ден айырмаланат, анткени ал кошумча мультикасттарды капсулдап, пакеттерге fwmarks кое алат, алардын жардамы менен аларды 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

Эми сиз микротиктин артындагы тармактар ​​үчүн маршруттарды кошо аласыз

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

Интерфейсибиз жана маршруттарыбыз кайра жүктөлгөндөн кийин көтөрүлүшү үчүн, биз интерфейсти /etc/network/interfaces ичинде сүрөттөшүбүз керек жана ал жерге пост-апта маршруттарды кошушубуз керек же бардыгын бир файлга жазышыбыз керек, мисалы, /etc/ ipip-ipsec0.conf жана аны post-up аркылуу тартыңыз, файлдын ээси, укуктары жөнүндө унутпаңыз жана аны аткарылуучу кылыңыз.

Төмөндө мисал файл болуп саналат

#!/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 (эгер көрсөтүлбөсө, mikrotik mtu 68ге чейин кесип баштайт)

Жергиликтүү дарек
192.168.0.2

Алыскы дарек
192.168.0.1

IPsec Secret
Талааны өчүрүү (антпесе жаңы Peer түзүлөт)

тирүү
Талааны өчүрүңүз (антпесе интерфейс дайыма өчүп калат, анткени микротиканын бул пакеттер үчүн өзүнүн форматы бар жана Linux менен иштебейт)

DSCP
мурастай

Фрагмент кылба
жок

Clamp TCP MSS
чыныгы

Тез жолго уруксат бер
чыныгы

Бөлүм "IP" - "Даректер", даректи кошуу:

параметр
Наркы

дарек
192.168.0.2/30

Interface
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 үчүн тиешелүү уруксаттарды кошууну унутпаңыз.

дени сак бол!

Source: www.habr.com

Комментарий кошуу