IPIP IPsec VPN tunel mezi Linuxem a Mikrotikem za poskytovatelem NAT

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

  • Eth0 1.1.1.1/32 externí IP
  • iip-ipsec0 192.168.0.1/30 bude náš tunel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 interní IP od poskytovatele. Externí NAT IP poskytovatele je dynamická.
  • iip-ipsec0 192.168.0.2/30 bude náš tunel

Vytvoříme IPsec tunel na linuxovém stroji pomocí racoon. Detaily popisovat nebudu, jeden je dobrý článek у vvpoloskin.

Nainstalujte požadované balíčky:

sudo install racoon ipsec-tools

Nakonfigurujeme racoon, bude podmíněně fungovat jako server ipsec. Vzhledem k tomu, že mikrotik v hlavním režimu nemůže přenášet další identifikátor klienta a externí IP adresa, přes kterou se připojuje k Linuxu, je dynamická, použití předsdíleného klíče (autorizace heslem) nebude fungovat, protože heslo musí být shodné buď s IP adresou připojujícího hostitele nebo s identifikátorem.

Využijeme autorizaci pomocí RSA klíčů.

Démon racoon používá klíče ve formátu RSA a mikrotik používá formát PEM. Pokud klíče generujete pomocí utility plainrsa-gen, která je součástí racoon, pak s její pomocí nebudete moci převést veřejný klíč pro Mikrotiku do formátu PEM – převádí se pouze jedním směrem: PEM na RSA. Openssl ani ssh-keygen nedokázaly přečíst vygenerovaný klíč pomocí plainrsa-gen, takže konverze nebude možná ani pomocí nich.

Vygenerujeme klíč PEM pomocí openssl a poté jej převedeme na racoon pomocí 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

Přijaté klíče vložíme do složky: /etc/racoon/certs/server. Nezapomeňte nastavit vlastníka uživatele, pod jehož jménem je démon racoon spuštěn (obvykle root), na 600 oprávnění.

Popíšu nastavení mikrotiku při připojení přes WinBox.

Nahrajte klíč server-name.pub.pem do mikrotiku: Menu „Soubory“ - „Nahrát“.

Otevřete sekci „IP“ - „IP sec“ - karta „Klíče“. Nyní vygenerujeme klíče - tlačítko „Generate Key“, poté exportujeme veřejný klíč mikrotika „Expor Pub. Key", můžete si jej stáhnout ze sekce "Soubory", klikněte pravým tlačítkem na soubor - "Stáhnout".

Importujeme veřejný klíč racoon, „Import“, v rozevíracím seznamu v poli „File name“ hledáme server-name.pub.pem, který jsme stáhli dříve.

Veřejný klíč mikrotiku je potřeba převést

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

a vložte jej do složky /etc/racoon/certs, nezapomeňte na vlastníka a práva.

racoon config s komentáři: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

konfigurace mikrotiku

Návrat do sekce "IP" - "IPsec"

Záložka "Profily".
Parametr
Hodnota

Příjmení
Podle vašeho uvážení (ve výchozím nastavení)

Algoritmus hash
sha512

Šifrovací algoritmus
aes-128

DH-skupina
modp2048

Proposhal_check
nárok

Život
1d 00:00:00

NAT Traversal
pravda (zaškrtněte políčko)

DPD
120

DPD Maximální porucha
5

Karta Peers
Parametr
Hodnota

Příjmení
Podle vašeho uvážení (dále jen MyPeer)

Adresa
1.1.1.1 (počítače IP Linux)

Místní adresa
10.0.0.2 (IP WAN rozhraní mikrotik)

Změna hesla
standardní

Režim Exchange
hlavní

Pasivní
nepravdivý

Odeslat INITIAL_CONTACT
pravdivý

Karta Návrh
Parametr
Hodnota

Příjmení
Podle vašeho uvážení (dále jen MyPeerProposal)

Auth. Algoritmy
sha512

Encr. Algoritmy
aes-128-cbc

Život
08:00:00

Skupina PFS
modp2048

Záložka "Identity".
Parametr
Hodnota

Peer
MyPeer

Atuh. Metoda
rsa klíč

Klíč
mikrotik.privet.key

Vzdálený klíč
název-serveru.pub.pem

Skupina šablon zásad
standardní

Řetěz Notrack
je prázdný

Můj typ ID
auto

Typ vzdáleného ID
auto

Shoda podle
vzdálené id

Konfigurace režimu
je prázdný

Generovat zásady
Ne

Záložka „Zásady – Obecné“
Parametr
Hodnota

Peer
MyPeer

Tunel
pravdivý

Src. Adresa
192.168.0.0/30

Dest. Adresa
192.168.0.0/30

Protokol
255 (všechny)

Šablona
nepravdivý

Karta „Zásady – Akce“
Parametr
Hodnota

Akce
šifrování

Úroveň
vyžadovat

Protokoly IPsec
esp

Návrh
MyPeerProposal

S největší pravděpodobností jako já máte na svém WAN rozhraní nakonfigurované snat/masquerade; toto pravidlo je potřeba upravit tak, aby odchozí pakety ipsec šly do našeho tunelu:
Přejděte do sekce "IP" - "Firewall".
Na kartě "NAT" otevřete naše pravidlo snat/maškaráda.

Karta Pokročilé
Parametr
Hodnota

Zásady IPsec
ven: žádný

Restartování démona mývala

sudo systemctl restart racoon

Pokud se racoon po restartu nespustí, pak je chyba v konfiguraci, v syslogu racoon zobrazuje informaci o čísle řádku, na kterém byla chyba zjištěna.

Když se operační systém zavede, démon racoon se spustí před vyvoláním síťových rozhraní a v sekci listen jsme zadali možnost strict_address; musíte přidat jednotku racoon do souboru systemd
/lib/systemd/system/racoon.service, v sekci [Unit], řádek After=network.target.

Nyní by naše tunely ipsec měly být spuštěny, podívejte se na výstup:

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

Pokud tunely nejsou spuštěny, podívejte se na syslog nebo journalctl -u racoon.

Nyní musíte nakonfigurovat rozhraní L3 tak, aby bylo možné směrovat provoz. Jsou různé možnosti, my použijeme IPIP, jelikož to mikrotik podporuje, já bych použil vti, ale bohužel to zatím není implementováno v mikrotiku. Od IPIP se liší tím, že může dodatečně zapouzdřit multicast a umístit fwmarky na pakety, pomocí kterých je lze filtrovat v iptables a iproute2 (směrování založené na zásadách). Pokud potřebujete maximální funkčnost, pak například GRE. Ale nezapomeňte, že za další funkce platíme velkou režijní hlavou.

Můžete vidět překlad dobré recenze tunelových rozhraní zde.

V systému 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

Nyní můžete přidat trasy pro sítě za mikrotik

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

Aby se naše rozhraní a trasy po restartu zvýšily, musíme rozhraní popsat v /etc/network/interfaces a přidat tam trasy v post-up, nebo zapsat vše do jednoho souboru, například /etc/ ipip-ipsec0.conf a protáhněte ho post-up, nezapomeňte na vlastníka souboru, práva a udělejte jej spustitelný.

Níže je uveden příklad souboru

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

Na Mikrotiku:

V sekci „Rozhraní“ přidejte nové rozhraní „IP tunel“:

Záložka "IP tunel" - "Obecné"
Parametr
Hodnota

Příjmení
Podle vašeho uvážení (dále jen IPIP-IPsec0)

MTU
1480 (pokud není uvedeno, mikrotik začne řezat mtu na 68)

Místní adresa
192.168.0.2

Vzdálená adresa
192.168.0.1

Tajné IPsec
Deaktivujte pole (jinak bude vytvořen nový Peer)

Udržet naživu
Deaktivujte pole (jinak se bude rozhraní neustále vypínat, jelikož mikrotika má pro tyto balíčky vlastní formát a s Linuxem nefunguje)

DSCP
zdědit

Nefragmentovat
Ne

Svorka TCP MSS
pravdivý

Povolit rychlou cestu
pravdivý

V sekci „IP“ - „Adresy“ přidejte adresu:

Parametr
Hodnota

Adresa
192.168.0.2/30

Rozhraní
IPIP-IPsec0

Nyní můžete přidávat trasy do sítě za linuxovým strojem; při přidávání trasy bude bránou naše rozhraní IPIP-IPsec0.

PS

Protože je náš linuxový server tranzitivní, má smysl nastavit na něm parametr Clamp TCP MSS pro rozhraní ipip:

vytvořte soubor /etc/iptables.conf s následujícím obsahem:

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

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

Mám nginx spuštěný na síti za mikrotikem (ip 10.10.10.1), zpřístupněte jej z internetu, přidejte do /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 

Nezapomeňte přidat příslušná oprávnění k iptables, pokud máte povolené filtry paketů.

Být zdravý!

Zdroj: www.habr.com

Přidat komentář