IPIP IPsec VPN թունել Linux մեքենայի և Mikrotik-ի միջև NAT մատակարարի հետևում

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic 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 կլինի մեր թունելը

Մենք կստեղծենք IPsec թունել Linux մեքենայի վրա՝ օգտագործելով racoon: Մանրամասները չեմ նկարագրի, լավն էլ կա հոդված у vvpoloskin.

Տեղադրեք անհրաժեշտ փաթեթները.

sudo install racoon ipsec-tools

Մենք կարգավորում ենք racoon-ը, այն պայմանականորեն կգործի որպես ipsec սերվեր: Քանի որ mikrotik-ը հիմնական ռեժիմում չի կարող փոխանցել լրացուցիչ հաճախորդի նույնացուցիչ, և արտաքին IP հասցեն, որի միջոցով այն միանում է Linux-ին, դինամիկ է, նախապես համօգտագործված ստեղնը (գաղտնաբառի թույլտվություն) օգտագործելը չի ​​աշխատի, քանի որ գաղտնաբառը պետք է համընկնի կամ IP հասցեի հետ: կապող հյուրընկալողը կամ նույնացուցիչով:

Մենք կօգտագործենք թույլտվությունը՝ օգտագործելով RSA ստեղները:

Racoon daemon-ն օգտագործում է RSA ձևաչափի բանալիներ, իսկ mikrotik-ը՝ PEM ձևաչափով: Եթե ​​դուք ստեղներ եք ստեղծում՝ օգտագործելով plainrsa-gen կոմունալ ծրագիրը, որը գալիս է racoon-ի հետ, ապա չեք կարողանա Mikrotika-ի հանրային բանալին փոխարկել PEM ձևաչափի դրա օգնությամբ. այն փոխակերպվում է միայն մեկ ուղղությամբ՝ PEM RSA: Ո՛չ openssl-ը, ո՛չ ssh-keygen-ը չէին կարող կարդալ գեներացված բանալին plainrsa-gen-ի կողմից, ուստի փոխակերպումը նույնպես հնարավոր չի լինի օգտագործել դրանք:

Մենք կստեղծենք PEM բանալի՝ օգտագործելով openssl-ը, այնուհետև այն կվերափոխենք racoon-ի՝ օգտագործելով 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։ Մի մոռացեք 600 թույլտվություն սահմանել այն օգտվողի սեփականատիրոջը, որի անունով գործարկվում է ռակոն դեյմոնը (սովորաբար root):

Ես նկարագրելու եմ mikrotik-ի կարգավորումը WinBox-ով միանալիս:

Վերբեռնեք server-name.pub.pem ստեղնը mikrotik-ում. «Ֆայլեր» ընտրացանկ - «Վերբեռնում»:

Բացեք «IP» բաժինը - «IP վրկ» - «Ստեղներ» ներդիրը: Այժմ մենք ստեղծում ենք բանալիներ՝ «Ստեղծել բանալի» կոճակը, այնուհետև արտահանում ենք «Expor Pub» միկրոկան հանրային բանալին: Բանալին», այն կարող եք ներբեռնել «Ֆայլեր» բաժնից, աջ սեղմել ֆայլի վրա՝ «Ներբեռնել»։

Մենք ներմուծում ենք racoon հանրային բանալին՝ «Ներմուծում», «Ֆայլի անուն» դաշտի բացվող ցանկում փնտրում ենք ավելի վաղ ներբեռնված server-name.pub.pem-ը:

Mikrotik հանրային բանալին պետք է փոխարկվի

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

և դրեք այն /etc/racoon/certs թղթապանակում՝ չմոռանալով սեփականատիրոջ և իրավունքների մասին։

racoon config մեկնաբանություններով՝ /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

mikrotik config

Վերադարձ դեպի «IP» բաժին՝ «IPsec»

«Պրոֆիլներ» ներդիր
Parameter
Արժեք

Անուն
Ձեր հայեցողությամբ (լռելյայն)

Հաշ ալգորիթմ
sha512

Կոդավորման ալգորիթմ
աես-128

DH-Group
modp2048

Proposhal_check
պնդում

Կյանք
1 դ 00:00:00

NAT Traversal
ճշմարիտ (ստուգեք վանդակը)

DPD
120

DPD Առավելագույն ձախողում
5

Հասակակիցների ներդիր
Parameter
Արժեք

Անուն
Ձեր հայեցողությամբ (այսուհետ՝ MyPeer)

հասցե
1.1.1.1 (IP Linux մեքենաներ)

Տեղական հասցեն
10.0.0.2 (IP WAN միջերես միկրոտիկ)

Տվյալներ
անհոգություն

Փոխանակման ռեժիմ
հիմնական

Անգործունյա
սուտ

Ուղարկել INITIAL_CONTACT
ճիշտ

Առաջարկի ներդիր
Parameter
Արժեք

Անուն
Ձեր հայեցողությամբ (այսուհետ՝ MyPeerProposal)

Հաստատություն Ալգորիթմներ
sha512

Ընդգրկ. Ալգորիթմներ
aes-128-cbc

Կյանք
08:00:00

PFS Group
modp2048

«Ինքնություններ» ներդիր
Parameter
Արժեք

երեւալ
MyPeer

Ատուհ. Մեթոդ
rsa բանալի

Բանալի
mikrotik.privet.key

Հեռակա բանալին
server-name.pub.pem

Քաղաքականության ձևանմուշների խումբ
անհոգություն

Notrack շղթա
դատարկ

Իմ ID տեսակը
ավտոմոբիլ

Հեռակառավարման նույնականացման տեսակը
ավտոմոբիլ

Համապատասխանում ըստ
հեռավոր ID

Ռեժիմի կոնֆիգուրացիա
դատարկ

Ստեղծեք քաղաքականություն
ոչ

Ներդիր «Քաղաքականություն - Ընդհանուր»
Parameter
Արժեք

երեւալ
MyPeer

Թունել
ճիշտ

Սրկ. Հասցե
192.168.0.0/30

Նպատակ. Հասցե
192.168.0.0/30

Արձանագրություն
255 (բոլորը)

Կաղապար
սուտ

Ներդիր «Քաղաքականություն - Գործողություն»
Parameter
Արժեք

գործողություն
encrypt

Մակարդակ
պահանջում են

IPsec արձանագրություններ
էլ

Առաջարկություն
MyPeerProposal

Ամենայն հավանականությամբ, ինչպես և ես, դուք ունեք snat/masquerade կազմաձևված ձեր WAN ինտերֆեյսի վրա, այս կանոնը պետք է ճշգրտվի այնպես, որ ելքային ipsec փաթեթները մտնեն մեր թունել:
Գնացեք «IP» - «Firewall» բաժինը:
«NAT» ներդիր, բացեք մեր snat/disquerade կանոնը։

Ընդլայնված ներդիր
Parameter
Արժեք

IPsec քաղաքականություն
դուրս: Ոչ մեկը

Racoon demon-ի վերագործարկում

sudo systemctl restart racoon

Եթե ​​racoon-ը չի սկսվում վերագործարկումից հետո, ապա կոնֆիգուրայում սխալ կա, syslog-ում racoon-ը ցուցադրում է տեղեկատվություն այն գծի համարի մասին, որում հայտնաբերվել է սխալը:

Երբ OS-ի բեռնախցիկը սկսվում է, Racoon Daemon-ը սկսվում է մինչև ցանցային ինտերֆեյսները բացվելը, և մենք նշել ենք խիստ_հասցե տարբերակը լսելու բաժնում, դուք պետք է ավելացնեք 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, քանի որ mikrotik-ն աջակցում է այն, ես կօգտագործեի vti, բայց, ցավոք, այն դեռ չի ներդրվել mikrotik-ում: Այն տարբերվում է IPIP-ից նրանով, որ կարող է լրացուցիչ ընդգրկել multicast և փաթեթների վրա տեղադրել 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

Mikrotik-ում.

Բաժին «Ինտերֆեյս», ավելացրեք նոր ինտերֆեյս «IP թունել».

Ներդիր «IP թունել» - «Ընդհանուր»
Parameter
Արժեք

Անուն
Ձեր հայեցողությամբ (այսուհետ՝ IPIP-IPsec0)

MTU
1480 (եթե նշված չէ, միկրոտիկը սկսում է կրճատել mtu-ն մինչև 68)

Տեղական հասցեն
192.168.0.2

Հեռավոր հասցե
192.168.0.1

IPsec գաղտնիք
Անջատեք դաշտը (հակառակ դեպքում կստեղծվի նոր գործընկեր)

Պահել կենդանի
Անջատեք դաշտը (հակառակ դեպքում ինտերֆեյսը անընդհատ կանջատվի, քանի որ mikrotika-ն ունի իր ձևաչափը այս փաթեթների համար և չի աշխատում Linux-ի հետ)

DSCP
ժառանգություն

Մի մասնատիր
ոչ

Ամրացրեք TCP MSS-ը
ճիշտ

Թույլատրել Արագ ուղին
ճիշտ

Բաժին «IP» - «Հասցեներ», ավելացրեք հասցեն.

Parameter
Արժեք

հասցե
192.168.0.2/30

Ինտերֆեյս
IPIP-IPsec0

Այժմ դուք կարող եք ցանցին երթուղիներ ավելացնել Linux սարքի հետևում; երթուղի ավելացնելիս դարպասը կլինի մեր IPIP-IPsec0 ինտերֆեյսը:

PS

Քանի որ մեր Linux սերվերը անցումային է, իմաստ ունի դրա վրա տեղադրել Clamp TCP MSS պարամետրը ipip ինտերֆեյսների համար.

ստեղծել ֆայլ /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-ում
հետ-up iptables-restore < /etc/iptables.conf

Ես ունեմ nginx, որն աշխատում է mikrotik-ի հետևի ցանցում (ip 10.10.10.1), այն հասանելի դարձրեք ինտերնետից, ավելացրեք այն /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

Добавить комментарий