Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 IP esterna
- ipip-ipsec0 192.168.0.1/30 serà u nostru tunnel
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 IP internu da u fornitore. L'IP NAT esterna di u fornitore hè dinamica.
- ipip-ipsec0 192.168.0.2/30 serà u nostru tunnel
Creemu un tunnel IPsec in una macchina Linux cù racoon. Ùn scriveraghju micca i dettagli, ci hè un bonu
Installa i pacchetti necessarii:
sudo install racoon ipsec-tools
Cunfiguremu racoon, agirà in modu cundiziunale cum'è un servitore ipsec. Siccomu mikrotik in u modu principale ùn pò micca trasmette un identificatore di cliente supplementu, è l'indirizzu IP esternu attraversu quale si cunnetta à Linux hè dinamicu, l'usu di una chjave preshared (autorizazione di password) ùn funziona micca, postu chì a password deve esse cumminata sia cù l'indirizzu IP di l'ospite di cunnessione, o cù identificatore.
Useremu l'autorizazione cù e chjave RSA.
U daemon racoon usa chjavi in u formatu RSA, è mikrotik usa u formatu PEM. Se generate chjavi cù l'utilità plainrsa-gen chì vene cun racoon, allora ùn puderete micca cunvertisce a chjave publica per Mikrotika à u formatu PEM cù u so aiutu - cunverta solu in una direzzione: PEM à RSA. Nè openssl nè ssh-keygen puderanu leghje a chjave generata da plainrsa-gen, cusì a cunversione ùn serà micca pussibule usendu.
Generemu una chjave PEM usendu openssl è poi cunvertisce per racoon usendu 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
Puderemu e chjave ricevute in u cartulare: /etc/racoon/certs/server. Ùn vi scurdate di stabilisce u pruprietariu di l'utilizatore sottu u so nome u daemon racoon hè lanciatu (di solitu root) à 600 permessi.
Descriveraghju a cunfigurazione di mikrotik quandu cunnette via WinBox.
Caricate a chjave server-name.pub.pem à mikrotik: Menu "Files" - "Upload".
Aprite a sezione "IP" - "IP sec" - Tabulazione "Chiavi". Avà generà e chjave - u buttone "Generate Key", dopu esportà a chjave publica mikrotika "Expor Pub. Chjave", pudete scaricà lu da a rùbbrica "Files", right-click nant'à u schedariu - "Download".
Impurtamu a chjave publica di racoon, "Import", in a lista di u menù di u campu "File name" cerchemu u server-name.pub.pem chì avemu scaricatu prima.
A chjave publica mikrotik deve esse cunvertita
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
è mette in u cartulare /etc/racoon/certs, senza scurdà di u pruprietariu è i diritti.
racoon config cù cumenti: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
cunfigurazione mikrotik
Ritorna à a sezione "IP" - "IPsec"
Tabulazione "Profili".
Parameter
valore
nomu
À a vostra discrezione (per default)
Algoritmu Hash
sha512
Algoritmu di criptografia
aes-128
DH-Gruppu
modp2048
Pruposta_verifica
sustennu
Lifetime
1d 00:00:00
NAT Traversal
veru (verificate a casella)
DPD
120
DPD Massimu fallimentu
5
Tabulazione Peers
Parameter
valore
nomu
À a vostra discrezione (in seguitu chjamatu MyPeer)
indirizzo
1.1.1.1 (macchine IP Linux)
Indirizzu lucale
10.0.0.2 (IP WAN interfaccia mikrotik)
profile
automaticamente
Modu di scambiu
principale
Passiu
sbagliate
Mandate INITIAL_CONTACT
vera
Tabulazione di pruposta
Parameter
valore
nomu
À a vostra discrezione (in seguitu chjamatu MyPeerProposal)
Auth. Algoritmi
sha512
Encr. Algoritmi
aes-128-cbc
Lifetime
08:00:00
Gruppu PFS
modp2048
Tabulazione "Identità".
Parameter
valore
Pari
MyPeer
Atuh. Metudu
chjave rsa
Key
mikrotik.privet.key
Chjave remota
server-name.pub.pem
Gruppu di mudelli di pulitica
automaticamente
Catena Notrack
viotu
U mo tipu d'identità
vittura
Tipu ID Remote
vittura
Match By
id remoto
Configurazione Mode
viotu
Generate Politica
innò
Tabulazione "Politiche - Generale"
Parameter
valore
Pari
MyPeer
Tunnel
vera
Src. Indirizzu
192.168.0.0/30
Dest. Indirizzu
192.168.0.0/30
Protocol
255 (tutti)
Template
sbagliate
Tab "Politiche - Azzione"
Parameter
valore
Action
cifru
Level
esige
Protocolli IPsec
esp
Pruposta
MyPeerProposal
Probabilmente, cum'è mè, avete snat / masquerade cunfiguratu nantu à a vostra interfaccia WAN; sta regula deve esse aghjustata in modu chì i pacchetti ipsec in uscita entranu in u nostru tunnel:
Andà à a sezione "IP" - "Firewall".
Tabulazione "NAT", apre a nostra regula snat/masquerade.
Tabulazione Avanzata
Parameter
valore
Politica IPsec
fora : nimu
Riavvia u demoniu racoon
sudo systemctl restart racoon
Se racoon ùn principia micca à u riavviu, allora ci hè un errore in a cunfigurazione; in syslog, racoon mostra infurmazione nantu à u numeru di linea in quale l'errore hè statu rilevatu.
Quandu l'OS boots, u daemon racoon principia prima chì l'interfacce di a rete sò purtate, è avemu specificatu l'opzione strict_address in a sezione di ascolta; avete bisognu di aghjunghje l'unità racoon à u schedariu systemd.
/lib/systemd/system/racoon.service, in a sezione [Unità], line After=network.target.
Avà i nostri tunnels ipsec duveranu esse, fighjate à l'output:
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
Se i tunnel ùn sò micca, fighjate à syslog, o journalctl -u racoon.
Avà avete bisognu di cunfigurà l'interfacce L3 per chì u trafficu pò esse instradatu. Ci sò diverse opzioni, avemu aduprà IPIP, postu chì mikrotik soporta, aghju aduprà vti, ma, sfurtunatamenti, ùn hè micca ancu implementatu in mikrotik. Differisce da IPIP in quantu pò ancu incapsulà multicast è mette fwmarks nantu à i pacchetti, da quale ponu esse filtrati in iptables è iproute2 (routing basatu in pulitica). Sè avete bisognu di funziunalità massima, allora, per esempiu, GRE. Ma ùn vi scurdate chì paghemu per funziunalità supplementu cù un grande capu di sopra.
Pudete vede a traduzzione di una bona panoramica di l'interfaccia di u tunnel
In 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
Avà pudete aghjunghje rotte per e rete daretu à mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Per fà chì a nostra interfaccia è e rotte sò risuscitate dopu un reboot, avemu bisognu di discrivà l'interfaccia in /etc/network/interfaces è aghjunghje rotte in u post-up, o scrive tuttu in un schedariu, per esempiu, /etc/. ipip-ipsec0.conf è tirallu per post-up, ùn vi scurdate micca di u pruprietariu di u schedariu, i diritti è rende eseguibile.
Quì sottu hè un schedariu di esempiu
#!/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
Nantu à Mikrotik:
Sezione "Interfacce", aghjunghje una nova interfaccia "Tunnel IP":
Tabulazione "Tunnel IP" - "Generale"
Parameter
valore
nomu
À a vostra discrezione (in seguitu chjamatu IPIP-IPsec0)
MTU
1480 (se ùn hè micca specificatu, mikrotik cumencia à cutà mtu à 68)
Indirizzu lucale
192.168.0.2
Indirizzu Remote
192.168.0.1
IPsec Secret
Disattivà u campu (altrimenti un novu Peer serà creatu)
Mantene in vita
Disattivate u campu (altrimenti l'interfaccia si spegnerà constantemente, postu chì mikrotika hà u so propiu formatu per questi pacchetti è ùn funziona micca cù Linux)
DSCP
herdar
Ùn Fragmentà
innò
Clamp TCP MSS
vera
Permette a strada rapida
vera
Sezione "IP" - "Indirizzi", aghjunghje l'indirizzu:
Parameter
valore
indirizzo
192.168.0.2/30
virtuale
IPIP-IPsec0
Avà pudete aghjunghje rotte à a reta daretu à una macchina Linux; quandu aghjunghje una strada, a porta di a porta serà a nostra interfaccia IPIP-IPsec0.
PS
Siccomu u nostru servitore Linux hè transitu, hè sensu per stabilisce u paràmetru Clamp TCP MSS per l'interfacce ipip nantu à questu:
creà un schedariu /etc/iptables.conf cù i seguenti cuntenutu:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
è in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Aghju nginx in esecuzione nantu à a reta daretu à mikrotik (ip 10.10.10.1), rende accessibile da Internet, aghjunghje à /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
Ùn vi scurdate di aghjunghje i permessi adatti à iptables se avete filtri di pacchetti attivati.
Be healthy!
Source: www.habr.com