Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 extern IP
- ipip-ipsec0 192.168.0.1/30 zal onze tunnel zijn
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 intern IP-adres van de provider. Externe IP-NAT van de provider is dynamisch.
- ipip-ipsec0 192.168.0.2/30 zal onze tunnel zijn
IPsec-tunnel op Linux We tillen de auto op met behulp van een wasbeer. Ik ga niet in detail treden, er is een goede reden om dat te doen. у .
Installeer de vereiste pakketten:
sudo install racoon ipsec-toolsWe configureren racoon, dat als IPsec-server zal fungeren. Omdat Mikrotik in de hoofdmodus geen extra client-ID kan verzenden, gebruiken we het externe IP-adres waarmee het verbinding maakt. Linux Dynamische authenticatie met een vooraf gedeelde sleutel (wachtwoordautorisatie) werkt niet, omdat het wachtwoord moet overeenkomen met het IP-adres van de verbindende host of met een identificatiecode.
Wij maken gebruik van RSA-sleutelautorisatie.
De racoon-daemon gebruikt sleutels in RSA-formaat, en mikrotik gebruikt sleutels in PEM-formaat. Als je sleutels genereert met het hulpprogramma plainrsa-gen dat bij racoon wordt geleverd, kun je de publieke sleutel voor Mikrotika niet naar PEM-formaat converteren - het converteert maar één kant op: PEM naar RSA. Noch openssl, noch ssh-keygen konden de door plainrsa-gen gegenereerde sleutel lezen, dus je kunt deze ook niet met deze tools converteren.
We genereren een PEM-sleutel met behulp van openssl en converteren deze vervolgens voor racoon met behulp van 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.keyPlaats de ontvangen sleutels in de map /etc/racoon/certs/server. Vergeet niet de eigenaar in te stellen op de gebruiker namens wie de racoon-daemon wordt gestart (meestal root), met rechten 600.
Ik zal de mikrotik-opstelling beschrijven bij verbinding via WinBox.
We uploaden de sleutel server-name.pub.pem naar mikrotik: Menu “Bestanden” — “Uploaden”.
Open de sectie "IP" - "IP sec" - tabblad "Sleutels". Genereer nu sleutels - knop "Sleutel genereren" en exporteer vervolgens de publieke sleutel "Export Pub. Key". U kunt deze downloaden vanuit de sectie "Bestanden", klik met de rechtermuisknop op het bestand - "Downloaden".
We importeren de publieke sleutel racoon, “Importeren”, in de dropdown lijst van het veld “Bestandsnaam” zoeken we naar de server-name.pub.pem die we eerder hebben gedownload.
De openbare sleutel van Mikrotik moet worden omgezet
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keyen plaats het in de map /etc/racoon/certs, waarbij je de eigenaar en rechten niet vergeet.
racoon-configuratie met opmerkingen: /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 configuratie
Terug naar de sectie "IP" - "IPsec"
Tabblad 'Profielen'
Parameter
Waarde
Naam
Naar eigen goeddunken (standaard)
Hash-algoritme
sha512
Encryptie algoritme
aes-128
DH Groep
modp2048
Voorstelcontrole
aanspraak maken op
Levensduur
1d 00:00:00
NAT-traversal
waar (vink het vakje aan)
DPD
120
DPD Maximale Storing
5
Tabblad Peers
Parameter
Waarde
Naam
Naar eigen goeddunken (hierna MyPeer)
Adres
1.1.1.1 (IP Linux-machines)
Lokaal adres
10.0.0.2 (IP WAN-interface mikrotik)
Profiel
verzuim
Uitwisselingsmodus
hoofd-
Passieve
vals
Stuur INITIAL_CONTACT
waar
Tabblad Voorstel
Parameter
Waarde
Naam
Naar eigen goeddunken (hierna MyPeerProposal)
Autorisatie-algoritmen
sha512
Encr.-algoritmen
aes-128-cbc
Levensduur
08:00:00
PFS Groep
modp2048
Tabblad Identiteiten
Parameter
Waarde
turen
MijnPeer
Atuh. Method
rsa-sleutel
sleutel
microtik.privet.key
Externe sleutel
servernaam.pub.pem
BeleidTampaGrupp
verzuim
Notrack-ketting
leeg
Mijn ID-type
auto
Type externe ID
auto
Match door
externe id
Modusconfiguratie
leeg
Beleid genereren
geen
Tabblad "Beleid — Algemeen"
Parameter
Waarde
turen
MijnPeer
Tunnel
waar
Bronadres
192.168.0.0/30
Bestem. adres
192.168.0.0/30
Protocol
255 (alle)
Sjabloon
vals
Beleid — Tabblad Actie
Parameter
Waarde
Actie
encrypt
Niveau
vereist
IPsec-protocollen
esp
Voorstel
MijnPeerProposal
Waarschijnlijk heeft u, net als ik, snat/masquerade geconfigureerd op de WAN-interface. Deze regel moet worden aangepast zodat uitgaande ipsec-pakketten onze tunnel ingaan:
Ga naar het gedeelte "IP" - "Firewall".
Klik op "NAT" en open onze snat/masquerade-regel.
Tabblad Geavanceerd
Parameter
Waarde
IPsec-beleid
uit: geen
Het opnieuw opstarten van de wasbeer-demon
sudo systemctl restart racoonAls racoon bij het opnieuw opstarten niet start, betekent dit dat er een fout in de configuratie zit. racoon geeft informatie weer over het regelnummer in het syslog waarin de fout is gedetecteerd.
De racoon-daemon start voordat de netwerkinterfaces worden geactiveerd wanneer het besturingssysteem wordt opgestart. We hebben de optie strict_address opgegeven in de sectie listen. Deze moet worden toegevoegd aan het systemd-bestand van de racoon-eenheid.
/lib/systemd/system/racoon.service, in de sectie [Unit], regel After=network.target.
Onze ipsec-tunnels zouden nu actief moeten zijn. Bekijk de uitvoer:
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 tunnelAls de tunnels niet werken, kijk dan naar syslog of journalctl -u racoon.
Nu moeten we L3-interfaces configureren om verkeer te kunnen routeren. Er zijn verschillende opties. We gebruiken IPIP, aangezien Mikrotik dit ondersteunt. Ik zou vti gebruiken, maar helaas heeft Mikrotik dit nog niet geïmplementeerd. Het verschilt van IPIP doordat het multicast kan encapsuleren en markeringen (fwmark) op pakketten kan plaatsen, waardoor deze kunnen worden gefilterd in iptables en iproute2 (beleidsgebaseerde routering). Als u maximale functionaliteit nodig hebt, kies dan bijvoorbeeld voor GRE. Maar vergeet niet dat we voor extra functionaliteit betalen met een hoge overhead.
Een vertaling van een goed overzicht van tunnelinterfaces kunt u hier bekijken .
Op 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-ipsec0Nu kunt u routes toevoegen voor netwerken achter mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Om ervoor te zorgen dat onze interface en routes na het opnieuw opstarten actief zijn, moeten we de interface beschrijven in /etc/network/interfaces en daar routes aan toevoegen in post-up. U kunt ook alles in één bestand zetten, bijvoorbeeld /etc/ipip-ipsec0.conf, en dat via post-up ophalen. Vergeet hierbij niet de eigenaar van het bestand en de rechten te vermelden en zorg dat het uitvoerbaar is.
Een voorbeeldbestand vindt u onder de snit.
#!/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.2Over Mikrotik:
Sectie "Interfaces", voeg een nieuwe interface "IP-tunnel" toe:
"IP-tunnel" invoegen - "Algemeen"
Parameter
Waarde
Naam
Naar eigen goeddunken (hierna IPIP-IPsec0)
MTU
1480 (indien niet gespecificeerd, begint mikrotik met het snijden van mtu naar 68)
Lokaal adres
192.168.0.2
Extern adres
192.168.0.1
IPSec-geheim
Deactiveer het veld (anders wordt er een nieuwe peer aangemaakt)
In leven houden
Deactiveer het veld (anders blijft de interface constant uitgeschakeld, aangezien mikrotika een eigen formaat heeft voor deze pakketten en niet met Linux werkt)
DSCP
erven
Niet fragmenteren
geen
Klem TCP MSS
waar
Snel pad toestaan
waar
Sectie "IP" - "Adressen", voeg het adres toe:
Parameter
Waarde
Adres
192.168.0.2/30
Interface
IPIP-IPsec0
U kunt nu routes toevoegen aan het netwerk achter de Linux-machine. Wanneer u een route toevoegt, wordt de gateway onze IPIP-IPsec0-interface.
PS
Omdat onze Linux-server een transitserver is, is het zinvol om de Clamp TCP MSS-parameter voor ipip-interfaces in te stellen:
maak een bestand /etc/iptables.conf met de volgende inhoud:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMITen in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Ik heb nginx draaien op het netwerk achter mikrotik (ip 10.10.10.1). Laten we het toegankelijk maken vanaf het internet. Voeg het volgende toe aan /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 Vergeet niet de juiste machtigingen aan iptables toe te voegen als u pakketfilters hebt ingeschakeld.
Blijf gezond!
Bron: www.habr.com
