IPIP IPsec VPN tunelis tarp Linux mašinos ir Mikrotik už NAT teikėjo

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

  • Eth0 1.1.1.1/32 išorinis IP
  • ipip-ipsec0 192.168.0.1/30 bus mūsų tunelis

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 vidinis IP iš teikėjo. Teikėjo išorinis NAT IP yra dinamiškas.
  • ipip-ipsec0 192.168.0.2/30 bus mūsų tunelis

Sukursime IPsec tunelį Linux kompiuteryje naudodami racoon. Detalių neaprašysiu, yra gera straipsnis у vvpoloskin.

Įdiekite reikiamus paketus:

sudo install racoon ipsec-tools

Mes sukonfigūruojame racoon, jis sąlyginai veiks kaip ipsec serveris. Kadangi mikrotik pagrindiniu režimu negali perduoti papildomo kliento identifikatoriaus, o išorinis IP adresas, per kurį jis jungiasi prie Linux, yra dinamiškas, iš anksto bendrinamo rakto naudojimas (slaptažodžio autorizacija) neveiks, nes slaptažodis turi būti suderintas su IP adresu. jungiantį pagrindinį kompiuterį arba su identifikatoriumi.

Naudosime autorizaciją naudodami RSA raktus.

Rakonų demonas naudoja RSA formato raktus, o mikrotik – PEM formatą. Jei sugeneruosite raktus naudodami plainrsa-gen įrankį, pateiktą kartu su racoon, tada negalėsite konvertuoti viešojo Mikrotika rakto į PEM formatą - jis konvertuoja tik viena kryptimi: PEM į RSA. Nei openssl, nei ssh-keygen negalėjo nuskaityti plainrsa-gen sugeneruoto rakto, todėl naudojant juos konvertuoti taip pat nepavyks.

Sugeneruosime PEM raktą naudodami openssl ir konvertuosime jį į racoon naudodami 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

Gautus raktus patalpinsime į aplanką: /etc/racoon/certs/server. Nepamirškite vartotojo, kurio vardu paleistas racoon demonas, savininkui (dažniausiai root) nustatyti 600 leidimų.

Aprašysiu mikrotik sąranką jungiantis per WinBox.

Įkelkite serverio pavadinimas.pub.pem raktą į mikrotik: meniu „Failai“ - „Įkelti“.

Atidarykite skyrių „IP“ - „IP sek“ - skirtuką „Raktai“. Dabar generuojame raktus - mygtuką „Generuoti raktą“, tada eksportuojame mikrotika viešąjį raktą „Expor Pub. Raktas“, galite jį atsisiųsti iš skyriaus „Failai“, dešiniuoju pelės mygtuku spustelėkite failą - „Atsisiųsti“.

Mes importuojame viešąjį raktą „Importuoti“, išskleidžiamajame lauko „Failo pavadinimas“ sąraše ieškome serverio pavadinimas.pub.pem, kurį atsisiuntėme anksčiau.

Mikrotik viešąjį raktą reikia konvertuoti

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

ir įdėkite į aplanką /etc/racoon/certs, nepamiršdami apie savininką ir teises.

racoon konfigūracija su komentarais: /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 konfigūracija

Grįžkite į skyrių „IP“ - „IPsec“

Skirtukas „Profiliai“.
Parametras
Vertė

Vardas
Savo nuožiūra (pagal numatytuosius nustatymus)

Maišos algoritmas
sha512

Šifravimo algoritmas
aes-128

DH grupė
modp2048

Proposhal_check
reikalavimas

Gyvenimo trukmė
1d 00:00:00

NAT Traversal
tiesa (pažymėkite langelį)

DPD
120

DPD Maksimalus gedimas
5

Bendraamžių skirtukas
Parametras
Vertė

Vardas
Jūsų nuožiūra (toliau – MyPeer)

Adresas
1.1.1.1 (IP Linux įrenginiai)

Vietinis adresas
10.0.0.2 (IP WAN sąsaja mikrotik)

Profilis
numatytasis

Mainų režimas
pagrindinis

Pasyvus
klaidingas

Siųsti INITIAL_CONTACT
tiesa

Pasiūlymo skirtukas
Parametras
Vertė

Vardas
Savo nuožiūra (toliau – MyPeerProposal)

Aut. Algoritmai
sha512

Encr. Algoritmai
aes-128-cbc

Gyvenimo trukmė
08:00:00

PFS grupė
modp2048

Skirtukas „Tapatybės“.
Parametras
Vertė

Peer
„MyPeer“.

Atuh. Metodas
rsa raktas

raktas
mikrotik.privet.key

Nuotolinis raktas
serverio pavadinimas.pub.pem

Politikos šablonų grupė
numatytasis

„Notrack“ grandinė
tuščia

Mano ID tipas
automatinis

Nuotolinio ID tipas
automatinis

Suderinti pagal
nuotolinis ID

Režimo konfigūracija
tuščia

Sukurti politiką
ne

Skirtukas „Politika – Bendra“
Parametras
Vertė

Peer
„MyPeer“.

Tunelis
tiesa

Src. Adresas
192.168.0.0/30

Pask. Adresas
192.168.0.0/30

Protokolas
255 (visi)

šablonas
klaidingas

Skirtukas „Politika – veiksmas“
Parametras
Vertė

Veikla
šifruoti

Lygis
reikalauti

IPsec protokolai
Traukos kontrolės sistema

Pasiūlymas
„MyPeerProposal“.

Greičiausiai, kaip ir aš, savo WAN sąsajoje sukonfigūravote snat/masquerade; šią taisyklę reikia pakoreguoti taip, kad siunčiami ipsec paketai patektų į mūsų tunelį:
Eikite į skyrių „IP“ - „Ugniasienė“.
„NAT“ skirtuke atidarykite mūsų „snat/masquerade“ taisyklę.

Išplėstinis skirtukas
Parametras
Vertė

IPsec politika
išeina: nėra

Meškėno demono paleidimas iš naujo

sudo systemctl restart racoon

Jei racoon neįsijungia paleidus iš naujo, konfigūracijoje yra klaida; syslog'e racoon rodo informaciją apie eilutės numerį, kurioje buvo aptikta klaida.

Kai OS paleidžiama, racoon demonas paleidžiamas prieš iškeliant tinklo sąsajas, o klausymo skiltyje nurodėme parinktį strict_address; turite pridėti racoon vienetą prie systemd failo
/lib/systemd/system/racoon.service, skiltyje [Unit], eilutė After=network.target.

Dabar mūsų ipsec tuneliai turėtų būti pakelti, pažiūrėkite į išvestį:

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

Jei tunelių nėra, pažiūrėkite į syslog arba journalctl -u racoon.

Dabar reikia sukonfigūruoti L3 sąsajas, kad būtų galima nukreipti srautą. Yra įvairių variantų, naudosime IPIP, nes mikrotik jį palaiko, aš naudočiau vti, bet, deja, jis dar neįdiegtas mikrotik. Jis skiriasi nuo IPIP tuo, kad gali papildomai apklijuoti multicast ir ant paketų įdėti fwmarks, pagal kuriuos juos galima filtruoti iptables ir iproute2 (politika pagrįstas maršrutas). Jei jums reikia maksimalaus funkcionalumo, tada, pavyzdžiui, GRE. Tačiau nepamirškite, kad už papildomą funkcionalumą mokame su didele viršutine galvute.

Galite pamatyti geros tunelio sąsajų apžvalgos vertimą čia.

„Linux“ sistemoje:

# Создаем интерфейс
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

Dabar galite pridėti maršrutų tinklams už mikrotik

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

Kad mūsų sąsaja ir maršrutai būtų pakelti po perkrovimo, turime apibūdinti sąsają /etc/network/interfaces ir pridėti maršrutus ten post-up, arba įrašyti viską į vieną failą, pavyzdžiui, /etc/ ipip-ipsec0.conf ir perkelkite jį per post-up, nepamirškite apie failo savininką, teises ir padarykite jį vykdomąjį.

Žemiau yra failo pavyzdys

#!/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“ svetainėje:

Skyriuje „Sąsajos“, pridėkite naują sąsają „IP tunelis“:

Skirtukas „IP tunelis“ - „Bendra“
Parametras
Vertė

Vardas
Jūsų nuožiūra (toliau – IPIP-IPsec0)

MTU
1480 (jei nenurodyta, mikrotik pradeda pjauti mtu iki 68)

Vietinis adresas
192.168.0.2

Nuotolinis adresas
192.168.0.1

IPsec paslaptis
Išjunkite lauką (kitaip bus sukurtas naujas partneris)

Išlaikyti gyvą
Išjunkite lauką (kitaip sąsaja nuolat išsijungs, nes mikrotika turi savo formatą šiems paketams ir neveikia su Linux)

DSCP
paveldėti

Neskaldykite
ne

Užfiksuokite TCP MSS
tiesa

Leisti greitąjį kelią
tiesa

Skyrius „IP“ - „Adresai“, pridėkite adresą:

Parametras
Vertė

Adresas
192.168.0.2/30

Sąsaja
IPIP-IPsec0

Dabar galite pridėti maršrutų į tinklą už „Linux“ įrenginio; pridedant maršrutą, šliuzas bus mūsų IPIP-IPsec0 sąsaja.

PS

Kadangi mūsų „Linux“ serveris yra pereinamasis, tikslinga jame nustatyti „Clamp TCP MSS“ parametrą „ipip“ sąsajoms:

sukurkite failą /etc/iptables.conf su tokiu turiniu:

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

ir /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Tinkle už mikrotik (ip 10.10.10.1) veikia nginx, padarykite jį pasiekiamą iš interneto, pridėkite prie /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 

Nepamirškite pridėti atitinkamų iptables leidimų, jei įjungėte paketų filtrus.

Būk sveikas!

Šaltinis: www.habr.com

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