Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 veřejná IP
- ipip-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. Veřejná IP NAT poskytovatele je dynamická.
- ipip-ipsec0 192.168.0.2/30 bude náš tunel
IPsec tunel na Linux stroji zprovozníme pomocí racoon. Nebudu popisovat detaily, existuje dobrá u .
Instalujeme potřebné balíčky:
sudo install racoon ipsec-toolsNastavujeme racoon, který v tomto případě bude hrát roli ipsec serveru. Jelikož mikrotik v hlavním režimu nemůže předávat dodatečný identifikátor klienta a veřejná IP adresa, přes kterou se připojuje k Linuxu, je dynamická, nebude možné použít preshared key (autentizaci pomocí hesla), protože heslo musí odpovídat buď IP adrese připojujícího se hosta, nebo identifikátoru.
Budeme používat autentizaci podle RSA klíčů.
Démon racoon používá klíče ve formátu RSA, zatímco mikrotik v formátu PEM. Pokud generujeme klíče pomocí utility plainrsa-gen dodávané s racoonem, nelze veřejný klíč pro Mikrotik převést do formátu PEM jejich pomocí — převádí pouze jedním směrem: PEM na RSA. Vygenerovaný klíč plainrsa-gen nebyl možné přečíst ani openssl, ani ssh-keygen, takže jejich pomocí také nebude možné provést převod.
Vygenerujeme PEM klíč pomocí openssl a poté jej převedeme pro 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.keyZískané klíče uložíme do složky: /etc/racoon/certs/server. Nezapomeňte nastavit vlastníka na uživatele, pod kterým běží démon racoon (obvykle root), práva 600.
Nastavení mikrotiku popíšu při připojení přes WinBox.
Klíč server-name.pub.pem nahrajeme do mikrotiku: Menu „Files“ — „Upload“.
Otevřeme sekci „IP“ — „IP sec“ — záložka „Keys“. Nyní generujeme klíče — tlačítko „Generate Key“, poté exportujeme veřejný klíč mikrotika „Expor Pub. Key“, stáhnout jej lze z sekce „Files“, pravým tlačítkem na soubor — „Download“.
Importujeme veřejný klíč racoon, „Import“, v rozbalovacím seznamu pole „File name“ hledáme dříve nahraný server-name.pub.pem.
Veřejný klíč mikrotiku je potřeba převést
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keya uložit do složky /etc/racoon/certs, nezapomněli jsme na vlastníka a práva.
Konfigurace racoon s komentáři: /etc/racoon/racoon.conf
log info; # Úroveň protokolování, při ladění používáme Debug nebo Debug2.
listen {
isakmp 1.1.1.1 [500]; # Adresa a port, na kterém bude démon poslouchat.
isakmp_natt 1.1.1.1 [4500]; # Adresa a port, na kterém bude démon poslouchat pro klienty za NAT.
strict_address; # Provádět povinnou kontrolu vázání na výše uvedené IP.
}
path certificate "/etc/racoon/certs"; # Cesta do složky se certifikáty.
remote anonymous { # Sekce, která určuje parametry pro práci démona s ISAKMP a dohodu režimů s připojujícími se hosty. Protože IP, ze které se připojuje Mikrotik, je dynamická, používáme anonymous, což umožňuje připojení z libovolné adresy. Pokud mají hosté statickou IP, lze uvést konkrétní adresu a port.
passive on; # Určuje "serverový" režim práce démona, nebude se snažit inicializovat připojení.
nat_traversal on; # Aktivuje používání režimu NAT-T pro klienty, pokud jsou za NAT.
exchange_mode main; # Režim výměny parametry připojení, v tomto případě --- dohoda.
my_identifier address 1.1.1.1; # Identifikujeme náš linux host podle jeho ip adresy.
certificate_type plain_rsa "server/server-name.priv.key"; # Soukromý klíč serveru.
peers_certfile plain_rsa "mikrotik.pub.key"; # Veřejný klíč Mikrotik.
proposal_check claim; # Režim dohody parametrů ISAKMP tunelu. Racoon bude používat hodnoty připojujícího se hosta (iniciátora) pro dobu platnosti relace a délku klíče, pokud je jeho doba platnosti relace delší nebo délka jeho klíče kratší než u iniciátora. Pokud je doba platnosti relace kratší než u iniciátora, racoon použije vlastní hodnotu doby platnosti relace a bude odesílat zprávu RESPONDER-LIFETIME.
proposal { # Parametry ISAKMP tunelu.
encryption_algorithm aes; # Metoda šifrování ISAKMP tunelu.
hash_algorithm sha512; # Algoritmus hashování používaný pro ISAKMP tunel.
authentication_method rsasig; # Režim autentizace pro ISAKMP tunel - podle RSA klíčů.
dh_group modp2048; # Délka klíče pro algoritmus Diffie-Hellman při dohodě ISAKMP tunelu.
lifetime time 86400 sec; # Čas platnosti relace.
}
generate_policy on; # Automatické vytvoření ESP tunelů z požadavku, příchozího od připojujícího se hosta.
}
sainfo anonymous { # Parametry ESP tunelů, anonymous - zadané parametry budou použity jako výchozí. Pro různé klienty, porty, protokoly lze zadat různé parametry, přiřazení probíhá podle ip adres, portů, protokolů.
pfs_group modp2048; # Délka klíče pro algoritmus Diffie-Hellman pro ESP tunely.
lifetime time 28800 sec; # Doba platnosti ESP tunelů.
encryption_algorithm aes; # Metoda šifrování ESP tunelů.
authentication_algorithm hmac_sha512; # Algoritmus hashování používaný pro autentizaci ESP tunelů.
compression_algorithm deflate; # Komprimovat předávaná data, algoritmus komprese je navržen pouze jeden.
}
Mikrotik konfigurace
Vracíme se do sekce "IP" — "IPsec"
Záložka "Profily"
Parameter
Hodnota
Název
Na vaši libnost (výchozí je default)
Hash Algoritmus
sha512
Šifrovací Algoritmus
aes-128
DH Skupina
modp2048
Proposhal_check
claim
Životnost
1d 00:00:00
NAT Traversal
true (zaškrtněte políčko)
DPD
120
Maximální selhání DPD
5
Záložka "Peer"
Parameter
Hodnota
Název
Na vaši libnost (dále MyPeer)
Address
1.1.1.1 (IP linux stroje)
Místní Adresa
10.0.0.2 (IP WAN rozhraní mikrotik)
Profil
default
Režim výměny
main
Pasivní
false
Odeslat INITIAL_CONTACT
true
Záložka "Návrh"
Parameter
Hodnota
Název
Na vaši libnost (dále MyPeerProposal)
Algoritmy autorizace
sha512
Algoritmy šifrování
aes-128-cbc
Životnost
08:00:00
PFS Skupina
modp2048
Záložka "Identity"
Parameter
Hodnota
Peer
MyPeer
Aut. Metoda
rsa klíč
Klíč
mikrotik.privet.key
Vzdálený Klíč
server-name.pub.pem
Šablona Politiky Skupina
default
Notrack Chain
prázdno
Můj Typ ID
auto
Typ Vzdáleného ID
auto
Shoda podle
vzdálené id
Konfigurace Mód
prázdno
Generovat Politiku
ne
Záložka "Politiky — Obecné"
Parameter
Hodnota
Peer
MyPeer
Tunel
true
Zdroj. Adresa
192.168.0.0/30
Cíl. Adresa
192.168.0.0/30
Protokol
255 (vše)
Šablona
false
Záložka "Politiky — Akce"
Parameter
Hodnota
Akce
šifrovat
Úroveň
požadavky
Protokoly IPsec
esp
Návrh
MyPeerProposal
Pravděpodobně máte, stejně jako já, nastavené snat/masquerade na WAN rozhraní; toto pravidlo je třeba upravit, aby odchozí pakety ipsec šly do našeho tunelu:
Přejdeme do sekce "IP" — "Firewall".
Záložka "NAT", otevřeme naše pravidlo snat/masquerade.
Záložka "Pokročilé"
Parameter
Hodnota
Politika IPsec
out: none
Restartujeme démon racoon
sudo systemctl restart racoonPokud se racoon při restartu nespustí, znamená to, že v konfiguraci je chyba; v syslogu racoon vypíše informace o čísle řádku, kde došlo k chybě.
Démon racoon při startu OS startuje dříve, než se aktivují síťové rozhraní; v sekci listen jsme nastavili možnost strict_address, je tedy třeba přidat do souboru systemd jednotky racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.
Nyní by měly naše ipsec tunely být aktivní, zkontrolujeme 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, přes který se připojuje 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, přes který se připojuje 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, přes který se připojuje mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnelPokud se tunely nenastavily, podívejte se do syslogu nebo použijte journalctl -u racoon.
Nyní je třeba nastavit L3 rozhraní, aby bylo možné směrovat provoz. Existuje několik možností, my použijeme IPIP, protože ho mikrotik podporuje, já bych raději použil vti, ale bohužel, mikrotik ho dosud neimplementoval. Na rozdíl od IPIP umožňuje navíc enkapsulaci multicastu a značkování (fwmark) paketů, podle kterých je lze filtrovat v iptables a iproute2 (směrování založené na politikách). Pokud potřebujete maximální funkčnost, pak například GRE. Je však třeba nezapomínat, že za další funkčnost platíme vyššími přetíženími.
Překlad dobrého přehledu tunelových rozhraní lze vidět .
Na Linuxu:
# Создаем интерфейс
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-ipsec0Nyní můžete přidat trasy pro sítě za mikrotikem
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Aby naše rozhraní a trasy fungovaly po restartu, je třeba popsat rozhraní v /etc/network/interfaces a tam také v post-up přidávat trasy, nebo vše napsat do jednoho souboru, například /etc/ipip-ipsec0.conf a spouštět ho přes post-up, nezapomeňte na vlastníka souboru, práva a udělat ho spustitelným.
Pod odkazem 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.2Na Mikrotiku:
Sekce „Rozhraní“, přidáváme nové rozhraní „IP tunnel“:
Záložka „IP tunnel“ — „Obecné“
Parameter
Hodnota
Název
Podle vašeho uvážení (dále IPIP-IPsec0)
MTU
1480 (pokud není zadáno, mikrotik začne snižovat mtu na 68)
Místní Adresa
192.168.0.2
Remote Address
192.168.0.1
Ipsec Secret
Deaktivujeme pole (jinak se vytvoří nový Peer)
Keepalive
Deaktivujeme pole (jinak bude rozhraní neustále vypnuto, protože mikrotik má nějaký vlastní formát těchto paketů a s linuxem nefunguje)
DSCP
zdědit
Dont Fragment
ne
Clamp TCP MSS
true
Allow Fast Path
true
Sekce „IP“ — „Adresy“, přidáváme adresu:
Parameter
Hodnota
Address
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ání trasy bude brána naším rozhraním IPIP-IPsec0.
PS
Jelikož náš linuxový server je tranzitní, má smysl nastavit parametr Clamp TCP MSS pro ipip rozhraní:
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
COMMITa do /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
V síti za mikrotikem mi funguje nginx (ip 10.10.10.1), zpřístupníme ho z internetu, přidáme 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
#Na mikrotiku, v tabulce mangle je třeba přidat pravidlo route s adresou 192.168.0.1 pro pakety se zdrojovou adresou 10.10.10.1 a porty 80, 443.
# Také na Linuxu funguje OpenVPN server 172.16.0.1/24, pro klienty, kteří používají připojení k němu jako bránu, poskytujeme přístup na internet
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT Nezapomeňte přidat odpovídající povolení do iptables, pokud máte zapnuté filtrování paketů.
Na zdraví!
Zdroj: habr.com
