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: Մանրամասները չեմ նկարագրի, լավն էլ կա
Տեղադրեք անհրաժեշտ փաթեթները.
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