Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generički x86_64)
- Eth0 1.1.1.1/32 vanjski IP
- ipip-ipsec0 192.168.0.1/30 će biti naš tunel
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 interni IP od provajdera. Eksterni NAT IP provajdera je dinamičan.
- ipip-ipsec0 192.168.0.2/30 će biti naš tunel
Napravićemo IPsec tunel na Linux mašini koristeći racoon. Neću opisivati detalje, postoji jedan dobar
Instalirajte potrebne pakete:
sudo install racoon ipsec-tools
Konfigurišemo racoon, on će uslovno delovati kao ipsec server. Budući da mikrotik u glavnom modu ne može prenijeti dodatni identifikator klijenta, a eksterna IP adresa preko koje se povezuje na Linux je dinamička, korištenje unaprijed podijeljenog ključa (autorizacija lozinkom) neće raditi, jer se lozinka mora podudarati ili sa IP adresom hosta za povezivanje ili sa identifikatorom.
Koristit ćemo autorizaciju pomoću RSA ključeva.
Racoon daemon koristi ključeve u RSA formatu, a mikrotik koristi PEM format. Ako generirate ključeve pomoću plainrsa-gen uslužnog programa koji dolazi uz racoon, tada nećete moći uz njegovu pomoć konvertirati javni ključ za Mikrotiku u PEM format - on se pretvara samo u jednom smjeru: PEM u RSA. Ni openssl ni ssh-keygen nisu mogli pročitati generirani ključ od strane plainrsa-gena, tako da konverzija neće biti moguća ni pomoću njih.
Generisat ćemo PEM ključ koristeći openssl, a zatim ga pretvoriti u racoon koristeći 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
Primljene ključeve ćemo staviti u folder: /etc/racoon/certs/server. Ne zaboravite postaviti vlasnika korisnika pod čijim se imenom racoon daemon pokreće (obično root) na 600 dozvola.
Opisaću podešavanje mikrotika pri povezivanju preko WinBox-a.
Učitajte ključ server-name.pub.pem u mikrotik: Meni “Files” - “Upload”.
Otvorite odjeljak "IP" - "IP sek" - kartica "Ključevi". Sada generišemo ključeve - dugme „Generiraj ključ“, a zatim izvozimo javni ključ mikrotike „Expor Pub. Ključ", možete ga preuzeti iz odjeljka "Datoteke", desnim klikom na datoteku - "Preuzmi".
Uvozimo racoon javni ključ, “Import”, u padajućoj listi polja “File name” tražimo server-name.pub.pem koji smo ranije preuzeli.
Javni ključ mikrotik treba da se konvertuje
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
i stavite ga u /etc/racoon/certs folder, ne zaboravljajući na vlasnika i prava.
racoon konfiguracija sa komentarima: /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 config
Povratak na odjeljak "IP" - "IPsec"
Kartica "Profili".
Parametar
vrijednost
Ime
Po vašem nahođenju (prema zadanim postavkama)
Hash algoritam
sha512
Algoritam šifriranja
aes-128
DH-Group
modp2048
Proposhal_check
TVRDITI
život
1d 00:00:00
NAT Traversal
tačno (označite polje)
DPD
120
DPD Maksimalni kvar
5
Peers kartica
Parametar
vrijednost
Ime
Po vašem nahođenju (u daljem tekstu MyPeer)
Adresa
1.1.1.1 (IP Linux mašine)
Lokalna adresa
10.0.0.2 (IP WAN interfejs mikrotik)
Profil
default
Režim razmene
glavni
pasivan
lažan
Pošalji INITIAL_CONTACT
istinski
Kartica prijedloga
Parametar
vrijednost
Ime
Po vašem nahođenju (u daljem tekstu MyPeerProposal)
Auth. Algoritmi
sha512
Encr. Algoritmi
aes-128-cbc
život
08:00:00
PFS Group
modp2048
Kartica "Identiteti".
Parametar
vrijednost
Kruška
MyPeer
Atuh. Metoda
rsa ključ
ključ
mikrotik.privet.key
Daljinski ključ
server-name.pub.pem
Grupa šablona politike
default
Notrack Chain
prazan
My ID Type
auto
Remote ID Type
auto
Match By
daljinski id
Mode Configuration
prazan
Generate Policy
Ne.
Kartica "Pravila - Općenito"
Parametar
vrijednost
Kruška
MyPeer
tunel
istinski
Src. Adresa
192.168.0.0/30
Dest. Adresa
192.168.0.0/30
protokol
255 (sve)
šablon
lažan
Kartica "Pravila - radnja"
Parametar
vrijednost
akcija
šifriranje
nivo
zahtijevaju
IPsec protokoli
esp
Prijedlog
MyPeerProposal
Najvjerovatnije, kao i ja, imate konfiguriranu snat/masquerade na vašem WAN sučelju; ovo pravilo treba prilagoditi tako da odlazni ipsec paketi idu u naš tunel:
Idite na odjeljak "IP" - "Zaštitni zid".
"NAT" karticu, otvorite naše snat/masquerade pravilo.
Advanced Tab
Parametar
vrijednost
IPsec politika
out: nema
Ponovno pokretanje demona rakuna
sudo systemctl restart racoon
Ako se racoon ne pokrene nakon ponovnog pokretanja, onda postoji greška u konfiguraciji; u syslogu, racoon prikazuje informacije o broju linije u kojoj je greška otkrivena.
Kada se OS pokrene, racoon demon se pokreće prije nego što se pokrenu mrežna sučelja, a mi smo naveli opciju strict_address u odjeljku za slušanje; morate dodati racoon jedinicu u systemd datoteku
/lib/systemd/system/racoon.service, u odjeljku [Jedinica], red After=network.target.
Sada bi naši ipsec tuneli trebali biti podignuti, pogledajte izlaz:
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
Ako tuneli nisu podignuti, pogledajte syslog ili journalctl -u racoon.
Sada morate konfigurirati L3 sučelje tako da se promet može usmjeriti. Postoje različite opcije, koristićemo IPIP, pošto mikrotik to podržava, ja bih koristio vti, ali, nažalost, još nije implementiran u mikrotiku. Razlikuje se od IPIP-a po tome što može dodatno inkapsulirati multicast i staviti fwmarkove na pakete, pomoću kojih se mogu filtrirati u iptables i iproute2 (usmjeravanje zasnovano na politici). Ako vam je potrebna maksimalna funkcionalnost, onda, na primjer, GRE. Ali nemojte zaboraviti da dodatnu funkcionalnost plaćamo velikom glavom.
Možete vidjeti prijevod dobrog pregleda tunelskih interfejsa
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-ipsec0
Sada možete dodati rute za mreže iza mikrotika
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Da bi naše sučelje i rute bili podignuti nakon ponovnog pokretanja, moramo opisati sučelje u /etc/network/interfaces i dodati rute tamo u post-up-u ili sve napisati u jedan fajl, na primjer, /etc/ ipip-ipsec0.conf i provucite ga kroz post-up, ne zaboravite na vlasnika fajla, prava i učinite ga izvršnim.
Ispod je primjer datoteke
#!/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:
U odeljku “Interfejsi” dodajte novi interfejs “IP tunel”:
Kartica “IP tunel” - “Općenito”
Parametar
vrijednost
Ime
Po vašem nahođenju (u daljem tekstu IPIP-IPsec0)
MTU
1480 (ako nije navedeno, mikrotik počinje seći mtu na 68)
Lokalna adresa
192.168.0.2
Udaljena adresa
192.168.0.1
IPsec Secret
Deaktivirajte polje (inače će biti kreiran novi Peer)
Održi u životu
Deaktivirajte polje (u suprotnom će se interfejs stalno gasiti, pošto mikrotika ima svoj format za ove pakete i ne radi sa Linuxom)
DSCP
nasljediti
Ne fragmentirajte
Ne.
Stezaljka TCP MSS
istinski
Dozvoli brzi put
istinski
Odjeljak “IP” - “Adrese”, dodajte adresu:
Parametar
vrijednost
Adresa
192.168.0.2/30
Interface
IPIP-IPsec0
Sada možete dodati rute u mrežu iza Linux mašine; kada dodajete rutu, gateway će biti naš IPIP-IPsec0 interfejs.
PS
Budući da je naš Linux server tranzitivan, ima smisla postaviti Clamp TCP MSS parametar za ipip sučelje na njemu:
kreirajte datoteku /etc/iptables.conf sa sljedećim sadržajem:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
i u /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Imam nginx koji radi na mreži iza mikrotika (ip 10.10.10.1), učini ga dostupnim sa interneta, dodaj ga u /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
Ne zaboravite dodati odgovarajuće dozvole za iptables ako imate omogućene filtere paketa.
Budite zdravi!
izvor: www.habr.com