Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generisk x86_64)
- Eth0 1.1.1.1/32 ekstern IP
- ipip-ipsec0 192.168.0.1/30 vil være vår tunnel
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 intern IP fra leverandøren. Leverandørens eksterne NAT-IP er dynamisk.
- ipip-ipsec0 192.168.0.2/30 vil være vår tunnel
Vi vil lage en IPsec-tunnel på en Linux-maskin ved å bruke racoon. Jeg vil ikke beskrive detaljene, det er en god en
Installer de nødvendige pakkene:
sudo install racoon ipsec-tools
Vi konfigurerer racoon, den vil betinget fungere som en ipsec-server. Siden mikrotik i hovedmodus ikke kan overføre en ekstra klientidentifikator, og den eksterne IP-adressen som den kobles til Linux er dynamisk, vil ikke bruk av en forhåndsdelt nøkkel (passordautorisasjon) fungere, siden passordet enten må samsvare med IP-adressen til den koblende verten, eller med identifikator.
Vi vil bruke autorisasjon ved hjelp av RSA-nøkler.
Racoon-demonen bruker nøkler i RSA-formatet, og mikrotik bruker PEM-formatet. Hvis du genererer nøkler ved hjelp av plainrsa-gen-verktøyet som følger med racoon, vil du ikke kunne konvertere den offentlige nøkkelen for Mikrotika til PEM-format med dens hjelp - den konverterer bare i én retning: PEM til RSA. Verken openssl eller ssh-keygen kunne lese den genererte nøkkelen av plainrsa-gen, så konverteringen vil heller ikke være mulig ved å bruke dem.
Vi vil generere en PEM-nøkkel ved å bruke openssl og deretter konvertere den til vaskebjørn ved å bruke 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
Vi vil legge de mottatte nøklene i mappen: /etc/racoon/certs/server. Ikke glem å sette eieren til brukeren hvis navn vaskebjørn-demonen lanseres (vanligvis root) til 600 tillatelser.
Jeg vil beskrive mikrotik-oppsettet når du kobler til via WinBox.
Last opp servernavn.pub.pem-nøkkelen til mikrotik: Meny "Filer" - "Last opp".
Åpne "IP"-delen - "IP sek" - "Nøkler"-fanen. Nå genererer vi nøkler - "Generer nøkkel"-knappen, og eksporter deretter den offentlige mikrotika-nøkkelen "Expor Pub. Key", kan du laste den ned fra delen "Filer", høyreklikk på filen - "Last ned".
Vi importerer den offentlige racoon-nøkkelen, "Import", i rullegardinlisten i "Filnavn"-feltet, ser vi etter servernavnet.pub.pem vi lastet ned tidligere.
Den offentlige mikrotik-nøkkelen må konverteres
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
og legg den i /etc/racoon/certs-mappen, ikke glem eieren og rettighetene.
racoon config med kommentarer: /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
Gå tilbake til "IP"-delen - "IPsec"
"Profiler"-fanen
Parameter
Verdi
Navn
Etter eget skjønn (som standard)
Hash-algoritme
sha512
Krypteringsalgoritme
aes-128
DH-gruppe
modp2048
Proposhal_check
hevder
Lifetime
1d 00:00:00
NAT Traversal
sant (merk av i boksen)
DPD
120
DPD Maksimal feil
5
Peers-fanen
Parameter
Verdi
Navn
Etter eget skjønn (heretter kalt MyPeer)
Adresse
1.1.1.1 (IP Linux-maskiner)
Lokal adresse
10.0.0.2 (IP WAN-grensesnitt mikrotik)
Profil
standard~~POS=TRUNC
Bytt modus
main
Passiv
falsk
Send INITIAL_CONTACT
sant
Fanen Forslag
Parameter
Verdi
Navn
Etter eget skjønn (heretter MyPeerProposal)
Auth. Algoritmer
sha512
Encr. Algoritmer
aes-128-cbc
Lifetime
08:00:00
PFS Group
modp2048
Fanen "Identiteter".
Parameter
Verdi
Likemann
MyPeer
Atuh. Metode
rsa nøkkel
nøkkel
mikrotik.privet.key
Fjernnøkkel
servernavn.pub.pem
Policymalgruppe
standard~~POS=TRUNC
Notrack-kjede
tømme
Min ID-type
auto
Ekstern ID-type
auto
Match By
ekstern id
Moduskonfigurasjon
tømme
Generer policy
Nei.
Fanen "Retningslinjer - Generelt"
Parameter
Verdi
Likemann
MyPeer
Tunnel
sant
Src. Adresse
192.168.0.0/30
Dest. Adresse
192.168.0.0/30
Protokoll
255 (alle)
Mal
falsk
Fanen "Retningslinjer - Handling"
Parameter
Verdi
Handling
kryptere
Nivå
rekvirenten
IPsec-protokoller
esp
Forslag
MyPeerProposal
Mest sannsynlig, som meg, har du snat/masquerade konfigurert på WAN-grensesnittet ditt; denne regelen må justeres slik at utgående ipsec-pakker går inn i tunnelen vår:
Gå til delen "IP" - "Brannmur".
"NAT"-fanen, åpne snat/maskerade-regelen vår.
Avansert-fanen
Parameter
Verdi
IPsec-policy
ut: ingen
Starter vaskebjørndemonen på nytt
sudo systemctl restart racoon
Hvis racoon ikke starter ved omstart, er det en feil i konfigurasjonen; i syslog viser racoon informasjon om linjenummeret der feilen ble oppdaget.
Når operativsystemet starter, starter vaskebjørn-demonen før nettverksgrensesnittene blir hentet frem, og vi spesifiserte alternativet strict_address i lytte-delen; du må legge til vaskebjørn-enheten i systemd-filen
/lib/systemd/system/racoon.service, i [Unit]-delen, linje After=network.target.
Nå skal ipsec-tunnelene våre være oppe, se på utgangen:
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
Hvis tunnelene ikke er oppe, se på syslog, eller journalctl -u racoon.
Nå må du konfigurere L3-grensesnitt slik at trafikk kan rutes. Det er forskjellige alternativer, vi vil bruke IPIP, siden mikrotik støtter det, ville jeg brukt vti, men dessverre har det ikke blitt implementert i mikrotik ennå. Den skiller seg fra IPIP ved at den i tillegg kan innkapsle multicast og sette fw-merker på pakker, som de kan filtreres i iptables og iproute2 (policy-basert ruting). Hvis du trenger maksimal funksjonalitet, så for eksempel GRE. Men ikke glem at vi betaler for ekstra funksjonalitet med et stort overhead.
Du kan se oversettelsen av en god anmeldelse av tunnelgrensesnitt
På 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
Nå kan du legge til ruter for nettverk bak mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
For at grensesnittet og rutene våre skal heves etter en omstart, må vi beskrive grensesnittet i /etc/network/interfaces og legge til ruter der i post-up, eller skrive alt i én fil, for eksempel /etc/ ipip-ipsec0.conf og trekk den gjennom post-up, ikke glem fileieren, rettigheter og gjør den kjørbar.
Nedenfor er en eksempelfil
#!/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
På Mikrotik:
Seksjon "Grensesnitt", legg til et nytt grensesnitt "IP-tunnel":
Fane "IP-tunnel" - "Generelt"
Parameter
Verdi
Navn
Etter eget skjønn (heretter referert til som IPIP-IPsec0)
MTU
1480 (hvis ikke spesifisert, begynner mikrotik å kutte mtu til 68)
Lokal adresse
192.168.0.2
Ekstern adresse
192.168.0.1
IPsec-hemmelighet
Deaktiver feltet (ellers vil en ny Peer bli opprettet)
Holde i live
Deaktiver feltet (ellers vil grensesnittet hele tiden slå seg av, siden mikrotika har sitt eget format for disse pakkene og ikke fungerer med Linux)
DSCP
arve
Ikke fragmenter
Nei.
Klem TCP MSS
sant
Tillat rask bane
sant
Seksjon "IP" - "Adresser", legg til adressen:
Parameter
Verdi
Adresse
192.168.0.2/30
Interface
IPIP-IPsec0
Nå kan du legge til ruter til nettverket bak en Linux-maskin; når du legger til en rute, vil gatewayen være vårt IPIP-IPsec0-grensesnitt.
PS
Siden Linux-serveren vår er transitiv, er det fornuftig å sette Clamp TCP MSS-parameteren for ipip-grensesnitt på den:
lag en fil /etc/iptables.conf med følgende innhold:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
og i /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Jeg har nginx som kjører på nettverket bak mikrotik (ip 10.10.10.1), gjør det tilgjengelig fra Internett, legg det til /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
Ikke glem å legge til de riktige tillatelsene til iptables hvis du har aktivert pakkefiltre.
Hold deg frisk!
Kilde: www.habr.com