IPIP IPsec VPN tunelis starp Linux mašīnu un Mikrotik aiz NAT nodrošinātāja

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)

  • Eth0 1.1.1.1/32 ārējā IP
  • ipip-ipsec0 192.168.0.1/30 būs mūsu tunelis

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 iekšējais IP no nodrošinātāja. Pakalpojumu sniedzēja ārējais NAT IP ir dinamisks.
  • ipip-ipsec0 192.168.0.2/30 būs mūsu tunelis

Mēs izveidosim IPsec tuneli Linux mašīnā, izmantojot racoon. Es neaprakstīšu detaļas, ir laba raksts у vvpoloskin.

Instalējiet nepieciešamās pakotnes:

sudo install racoon ipsec-tools

Mēs konfigurējam racoon, tas nosacīti darbosies kā ipsec serveris. Tā kā mikrotik galvenajā režīmā nevar pārsūtīt papildu klienta identifikatoru un ārējā IP adrese, caur kuru tas savieno ar Linux, ir dinamiska, iepriekš koplietotās atslēgas izmantošana (paroles autorizācija) nedarbosies, jo parolei ir jāsakrīt vai nu ar lietotāja IP adresi. savienojošo resursdatoru vai ar identifikatoru.

Mēs izmantosim autorizāciju, izmantojot RSA atslēgas.

Jenots dēmons izmanto atslēgas RSA formātā, un mikrotik izmanto PEM formātu. Ja ģenerējat atslēgas, izmantojot racon komplektācijā iekļauto utilītu plainrsa-gen, tad ar tās palīdzību Mikrotika publisko atslēgu nevarēs konvertēt uz PEM formātu – tā pārvēršas tikai vienā virzienā: PEM uz RSA. Ne openssl, ne ssh-keygen nevarēja nolasīt plainrsa-gen ģenerēto atslēgu, tāpēc arī konvertēšanu nevar veikt, izmantojot tos.

Mēs ģenerēsim PEM atslēgu, izmantojot openssl, un pēc tam pārveidosim to par racoon, izmantojot 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

Saņemtās atslēgas ievietosim mapē: /etc/racoon/certs/server. Neaizmirstiet iestatīt tā lietotāja īpašniekam, ar kura vārdu tiek palaists jenots dēmons (parasti root), uz 600 atļaujām.

Es aprakstīšu mikrotik iestatīšanu, pieslēdzoties caur WinBox.

Augšupielādējiet servera-name.pub.pem atslēgu uz mikrotik: Izvēlne "Faili" - "Augšupielādēt".

Atveriet sadaļu "IP" - "IP sec" - cilni "Atslēgas". Tagad mēs ģenerējam atslēgas - pogu “Ģenerēt atslēgu”, pēc tam eksportējam mikrotikas publisko atslēgu “Expor Pub. Atslēga", to varat lejupielādēt sadaļā "Faili", ar peles labo pogu noklikšķiniet uz faila - "Lejupielādēt".

Mēs importējam jenots publisko atslēgu “Importēt”, lauka “Faila nosaukums” nolaižamajā sarakstā mēs meklējam servera nosaukums.pub.pem, kuru lejupielādējām iepriekš.

Mikrotik publiskā atslēga ir jāpārveido

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

un ievietojiet to mapē /etc/racoon/certs, neaizmirstot par īpašnieku un tiesībām.

racoon konfigurācija ar komentāriem: /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 konfigurācija

Atgriezties uz sadaļu "IP" - "IPsec"

Cilne "Profili".
Parametrs
Vērtība

Vārds
Pēc jūsu ieskatiem (pēc noklusējuma)

Hash algoritms
sha512

Šifrēšanas algoritms
aes-128

DH grupa
modp2048

Proposhal_check
pretendēt

Mūžs
1d 00:00:00

NAT šķērsošana
taisnība (atzīmējiet izvēles rūtiņu)

DPD
120

DPD Maksimālā kļūme
5

Vienaudžu cilne
Parametrs
Vērtība

Vārds
Pēc jūsu ieskatiem (turpmāk tekstā MyPeer)

Adrese
1.1.1.1 (IP Linux iekārtas)

Vietējā adrese
10.0.0.2 (IP WAN interfeiss mikrotik)

Profils
noklusējuma

Apmaiņas režīms
galvenais

Pasīvs
nepatiess

Sūtīt INITIAL_CONTACT
patiess

Priekšlikumu cilne
Parametrs
Vērtība

Vārds
Pēc jūsu ieskatiem (turpmāk tekstā MyPeerProposal)

Auth. Algoritmi
sha512

Encr. Algoritmi
aes-128-cbc

Mūžs
08:00:00

PFS grupa
modp2048

Cilne "Identitātes".
Parametrs
Vērtība

Peer
MyPeer

Atuh. Metode
rsa atslēga

Taustiņš
mikrotik.privet.key

Tālvadības atslēga
servera nosaukums.pub.pem

Politikas veidņu grupa
noklusējuma

Notrack ķēde
tukšs

Mans ID veids
auto

Attālā ID tips
auto

Atbilst
attālais id

Režīma konfigurācija
tukšs

Izveidot politiku

Cilne “Politikas — vispārīgi”
Parametrs
Vērtība

Peer
MyPeer

Tunelis
patiess

Src. Adrese
192.168.0.0/30

Gal. Adrese
192.168.0.0/30

Protokols
255 (visi)

Krāsains
nepatiess

Cilne “Politikas — darbība”
Parametrs
Vērtība

Darbība
šifrēt

Mājaslapas veids
pieprasītājs

IPsec protokoli
esp

Priekšlikums
MyPeerProposal

Visticamāk, tāpat kā man, jūsu WAN saskarnē ir konfigurēta snat/masquerade; šis noteikums ir jāpielāgo, lai izejošās ipsec paketes nonāktu mūsu tunelī:
Dodieties uz sadaļu "IP" - "Ugunsmūris".
Cilnē "NAT" atveriet mūsu snat/masquerade noteikumu.

Cilne Papildu
Parametrs
Vērtība

IPsec politika
ārā: nav

Jenots dēmona restartēšana

sudo systemctl restart racoon

Ja racoon nesākas pēc restartēšanas, tad konfigurācijā ir kļūda; syslog logā racoon parāda informāciju par rindas numuru, kurā tika konstatēta kļūda.

Kad operētājsistēma tiek sāknēta, racoon dēmons tiek palaists, pirms tiek parādītas tīkla saskarnes, un klausīšanās sadaļā mēs norādījām opciju strict_address; jums jāpievieno racoon vienība systemd failam.
/lib/systemd/system/racoon.service, sadaļas [Unit] rindā After=network.target.

Tagad mūsu ipsec tuneļiem vajadzētu būt augšā, apskatiet izvadi:

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

Ja tuneļi nav izveidoti, skatiet syslog vai journalctl -u racoon.

Tagad jums ir jākonfigurē L3 saskarnes, lai varētu maršrutēt trafiku. Ir dažādi varianti, izmantosim IPIP, tā kā mikrotik atbalsta, es izmantotu vti, bet diemžēl vēl nav ieviests mikrotikā. Tas atšķiras no IPIP ar to, ka var papildus iekapsulēt multiraidi un ievietot fwmarks uz paketēm, ar kurām tās var filtrēt iptables un iproute2 (uz politiku balstīta maršrutēšana). Ja nepieciešama maksimāla funkcionalitāte, tad, piemēram, GRE. Taču neaizmirstiet, ka mēs maksājam par papildu funkcionalitāti ar lielu augšējo galvu.

Jūs varat redzēt tulkojumu labam tuneļa saskarņu pārskatam šeit.

Operētājsistēmā 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

Tagad jūs varat pievienot maršrutus tīkliem aiz mikrotik

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

Lai mūsu saskarne un maršruti tiktu parādīti pēc pārstartēšanas, mums ir jāapraksta saskarne /etc/network/interfaces un jāpievieno maršruti tur post-up, vai arī jāraksta viss vienā failā, piemēram, /etc/ ipip-ipsec0.conf un izvelciet to caur post-up, neaizmirstiet par faila īpašnieku, tiesībām un padariet to izpildāmu.

Zemāk ir faila piemērs

#!/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

Vietnē Mikrotik:

Sadaļā “Interfeisi”, pievienojiet jaunu interfeisu “IP tunelis”:

Cilne “IP tunelis” - “Vispārīgi”
Parametrs
Vērtība

Vārds
Pēc jūsu ieskatiem (turpmāk tekstā IPIP-IPsec0)

MTU
1480 (ja nav norādīts, mikrotik sāk griezt mtu uz 68)

Vietējā adrese
192.168.0.2

Attālā adrese
192.168.0.1

IPsec noslēpums
Deaktivizējiet lauku (pretējā gadījumā tiks izveidots jauns līdzinieks)

uzturēt dzīvu
Deaktivizējiet lauku (pretējā gadījumā saskarne pastāvīgi izslēgsies, jo mikrotikai šīm pakotnēm ir savs formāts un tā nedarbojas ar Linux)

DSCP
mantot

Nesadrumstalojiet

Saspiediet TCP MSS
patiess

Atļaut ātro ceļu
patiess

Sadaļā “IP” - “Adreses”, pievienojiet adresi:

Parametrs
Vērtība

Adrese
192.168.0.2/30

interfeiss
IPIP-IPsec0

Tagad varat pievienot maršrutus tīklam aiz Linux mašīnas; pievienojot maršrutu, vārteja būs mūsu IPIP-IPsec0 saskarne.

PS

Tā kā mūsu Linux serveris ir pārejošs, ir lietderīgi tajā iestatīt parametru Clamp TCP MSS ipip saskarnēm:

izveidojiet failu /etc/iptables.conf ar šādu saturu:

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

un mapē /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Man ir nginx, kas darbojas tīklā aiz mikrotik (ip 10.10.10.1), padariet to pieejamu no interneta, pievienojiet to /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 

Ja ir iespējoti pakešu filtri, neaizmirstiet pievienot atbilstošās atļaujas iptables.

Palikt veseliem!

Avots: www.habr.com

Pievieno komentāru