IPIP IPsec VPN alagút a Linux gép és a Mikrotik között a NAT szolgáltató mögött

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

  • Eth0 1.1.1.1/32 külső IP
  • Az ipip-ipsec0 192.168.0.1/30 lesz a mi alagútunk

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 belső IP a szolgáltatótól. A szolgáltató külső NAT IP-je dinamikus.
  • Az ipip-ipsec0 192.168.0.2/30 lesz a mi alagútunk

Létrehozunk egy IPsec alagutat egy Linux gépen racoon segítségével. Nem írom le a részleteket, van egy jó cikk у vvpoloskin.

Telepítse a szükséges csomagokat:

sudo install racoon ipsec-tools

Beállítjuk a racoon-t, feltételesen ipsec szerverként fog működni. Mivel a mikrotik fő módban nem tud további kliens azonosítót továbbítani, és a külső IP-cím, amelyen keresztül csatlakozik a Linuxhoz dinamikus, az előre megosztott kulcs használata (jelszó hitelesítés) nem fog működni, mivel a jelszónak meg kell egyeznie az IP címével. a csatlakozó gazdagép, vagy azonosítóval.

Az RSA-kulcsokkal történő engedélyezést fogjuk használni.

A racoon démon az RSA formátumú kulcsokat, a mikrotik pedig a PEM formátumot használja. Ha a racoon-hoz mellékelt plainrsa-gen segédprogrammal generál kulcsokat, akkor a Mikrotika nyilvános kulcsát nem tudod PEM formátumba konvertálni a segítségével - csak egy irányba konvertál: a PEM-ből RSA-ba. Sem az openssl, sem az ssh-keygen nem tudta beolvasni a plainrsa-gen által generált kulcsot, így az átalakítás ezek használatával sem lesz lehetséges.

Létrehozunk egy PEM kulcsot az openssl használatával, majd a plainrsa-gen segítségével konvertáljuk racoon-ra:

#  Генерируем ключ
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

A kapott kulcsokat a /etc/racoon/certs/server mappába helyezzük. Ne felejtse el 600 jogosultságra állítani annak a felhasználónak a tulajdonosát, akinek a neve alatt a racoon démon elindul (általában root).

Leírom a mikrotik beállítását WinBoxon keresztüli csatlakozáskor.

Töltse fel a szerver-name.pub.pem kulcsot a mikrotikba: Menü „Fájlok” - „Feltöltés”.

Nyissa meg az „IP” részt - „IP sec” - „Keys” lapot. Most generálunk kulcsokat - a „Kulcs generálása” gombot, majd exportáljuk a mikrotika nyilvános kulcsot „Expor Pub. Key", letöltheti a "Fájlok" szakaszból, kattintson a jobb gombbal a fájlra - "Letöltés".

A racoon nyilvános kulcsot, az „Importálást” importáljuk, a „Fájlnév” mező legördülő listájában keressük a korábban letöltött szervernév.pub.pem fájlt.

A mikrotik nyilvános kulcsot át kell alakítani

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

és tedd az /etc/racoon/certs mappába, nem feledkezve meg a tulajdonosról és a jogokról.

racoon konfig megjegyzésekkel: /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

Vissza az "IP" szakaszhoz - "IPsec"

"Profilok" fülre
Paraméter
Érték

Név
Saját belátása szerint (alapértelmezés szerint)

Hash algoritmus
sha512

Titkosítás algoritmus
aes-128

DH-csoport
modp2048

Proposhal_check
követelés

Élettartam
1d 00:00:00

NAT átjárás
igaz (jelölje be a négyzetet)

DPD
120

DPD Maximális hiba
5

Társak lap
Paraméter
Érték

Név
Saját belátása szerint (a továbbiakban MyPeer)

Székhely
1.1.1.1 (IP Linux gépek)

Helyi cím
10.0.0.2 (IP WAN interfész mikrotik)

profil
alapértelmezett

Exchange mód
fő-

Passzív
hamis

INITIAL_CONTACT küldése
igaz

Javaslat fül
Paraméter
Érték

Név
Saját belátása szerint (a továbbiakban MyPeerProposal)

Auth. Algoritmusok
sha512

Encr. Algoritmusok
aes-128-cbc

Élettartam
08:00:00

PFS csoport
modp2048

"Identitások" lapon
Paraméter
Érték

Körte
MyPeer

Atuh. Módszer
rsa kulcs

Kulcs
mikrotik.privet.key

Távoli kulcs
szervernév.pub.pem

Házirend sablon csoport
alapértelmezett

Notrack lánc
üres

Az én azonosítóm típusa
auto

Távoli azonosító típusa
auto

Match By
távoli azonosító

Mód konfiguráció
üres

Szabályzat létrehozása
nem

Lap "Irányelvek - Általános"
Paraméter
Érték

Körte
MyPeer

Alagút
igaz

Src. Cím
192.168.0.0/30

Cél Cím
192.168.0.0/30

Protokoll
255 (mind)

Sablon
hamis

Lap "Irányelvek – Művelet"
Paraméter
Érték

Akció
titkosítani

szint
igényelnek

IPsec protokollok
esp

Javaslat
MyPeerProposal

Valószínűleg hozzám hasonlóan a snat/masquerade is be van állítva a WAN interfészen; ezt a szabályt úgy kell módosítani, hogy a kimenő ipsec csomagok az alagútunkba kerüljenek:
Lépjen az "IP" - "Tűzfal" szakaszba.
"NAT" lapon nyissa meg a snat/masquerade szabályunkat.

Speciális lap
Paraméter
Érték

IPsec házirend
ki: nincs

A mosómedve démon újraindítása

sudo systemctl restart racoon

Ha a racoon nem indul el újraindításkor, akkor hiba van a konfigurációban; a syslogban a racoon információt jelenít meg arról a sorszámról, amelyben a hibát észlelték.

Amikor az operációs rendszer elindul, a racoon démon elindul, mielőtt a hálózati interfészek megjelennének, és megadtuk a strict_address opciót a figyelő részben; hozzá kell adni a racoon egységet a systemd fájlhoz
/lib/systemd/system/racoon.service, a [Unit] szakasz After=network.target sorában.

Most az ipsec alagútjainknak fel kell készülniük, nézze meg a kimenetet:

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

Ha az alagutak nem működnek, nézze meg a syslogot vagy a journalctl -u racoon parancsot.

Most be kell állítania az L3 interfészeket, hogy a forgalmat lehessen irányítani. Különböző lehetőségek vannak, mi IPIP-t fogunk használni, mivel a mikrotik támogatja, én vti-t használnék, de sajnos még nem került be a mikrotikba. Abban különbözik az IPIP-től, hogy ezen felül több küldést is beépíthet, és fwmarkokat helyezhet a csomagokra, amivel szűrhetők az iptables-ban és az iproute2-ben (házirend-alapú útválasztás). Ha maximális funkcionalitásra van szüksége, akkor például a GRE. De ne felejtse el, hogy a további funkcionalitásért nagy rezsifejjel fizetünk.

Láthatja az alagút interfészek jó áttekintésének fordítását itt.

Linuxon:

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

Mostantól útvonalakat adhat hozzá a mikrotik mögötti hálózatokhoz

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

Ahhoz, hogy a felületünk és az útvonalaink újraindítás után megjelenjenek, le kell írnunk az interfészt az /etc/network/interfaces fájlban, és a post-up-ban hozzá kell adni az útvonalakat, vagy mindent egy fájlba kell írni, például /etc/ ipip-ipsec0.conf fájlt, és utólagosan húzzuk át, ne feledkezzünk meg a fájl tulajdonosáról, jogairól és tegyük végrehajthatóvá.

Az alábbiakban egy példafájl található

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

A Mikrotikon:

Az „Interfészek” szakaszban adjon hozzá egy új „IP-alagút” interfészt:

Lap „IP-alagút” - „Általános”
Paraméter
Érték

Név
Saját belátása szerint (a továbbiakban: IPIP-IPsec0)

MTU
1480 (ha nincs megadva, a mikrotik elkezdi vágni az mtu-t 68-ra)

Helyi cím
192.168.0.2

Távoli cím
192.168.0.1

IPsec titkos
Inaktiválja a mezőt (ellenkező esetben új Peer jön létre)

Életben tartani
Inaktiválja a mezőt (különben a felület folyamatosan kikapcsol, mivel a mikrotikának saját formátuma van ezekhez a csomagokhoz, és nem működik Linux alatt)

DSCP
örököl

Ne töredezzen
nem

Rögzítse a TCP MSS-t
igaz

Gyors útvonal engedélyezése
igaz

Az „IP” - „Címek” szakaszban adja hozzá a címet:

Paraméter
Érték

Székhely
192.168.0.2/30

Felület
IPIP-IPsec0

Mostantól útvonalakat is hozzáadhat a hálózathoz egy Linux gép mögött; útvonal hozzáadásakor az átjáró lesz az IPIP-IPsec0 interfészünk.

PS

Mivel a Linux szerverünk tranzitív, érdemes beállítani rajta a Clamp TCP MSS paramétert az ipip interfészekhez:

hozzon létre egy /etc/iptables.conf fájlt a következő tartalommal:

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

és az /etc/network/interfaces mappában
utólagos iptables-restore < /etc/iptables.conf

Nginx fut a hálózaton a mikrotik mögött (ip 10.10.10.1), tegye elérhetővé az internetről, adja hozzá az /etc/iptables.conf fájlhoz:

*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 

Ne felejtse el hozzáadni a megfelelő engedélyeket az iptables-hoz, ha engedélyezve vannak a csomagszűrők.

Légy egészséges!

Forrás: will.com

Hozzászólás