Tunnel VPN IPIP IPsec trà a macchina Linux è Mikrotik daretu à u fornitore NAT

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 un articulu у vvpoloskin.

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 ccà.

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

Add a comment