Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generico x86_64)
- IP esterno Eth0 1.1.1.1/32
- ipip-ipsec0 192.168.0.1/30 sarà il nostro tunnel
Miktoik: CCR 1009, RouterOS 6.46.5
- IP interno Eth0 10.0.0.2/30 dal provider. L'IP NAT esterno del provider è dinamico.
- ipip-ipsec0 192.168.0.2/30 sarà il nostro tunnel
Creeremo un tunnel IPsec su una macchina Linux utilizzando racoon. Non descriverò i dettagli, ce n’è uno buono
Installa i pacchetti richiesti:
sudo install racoon ipsec-tools
Configuriamo racoon, fungerà condizionatamente da server ipsec. Poiché mikrotik in modalità principale non può trasmettere un identificatore client aggiuntivo e l'indirizzo IP esterno attraverso il quale si connette a Linux è dinamico, l'utilizzo di una chiave precondivisa (autorizzazione tramite password) non funzionerà, poiché la password deve corrispondere all'indirizzo IP di l'host che si connette o con l'identificatore.
Utilizzeremo l'autorizzazione utilizzando le chiavi RSA.
Il demone racoon utilizza chiavi nel formato RSA e mikrotik utilizza il formato PEM. Se generi chiavi utilizzando l'utilità plainrsa-gen fornita con racoon, non sarai in grado di convertire la chiave pubblica per Mikrotika in formato PEM con il suo aiuto: converte solo in una direzione: PEM in RSA. Né openssl né ssh-keygen potrebbero leggere la chiave generata da plainrsa-gen, quindi la conversione non sarà possibile neanche utilizzandoli.
Genereremo una chiave PEM utilizzando openssl e poi la convertiremo per racoon utilizzando 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
Metteremo le chiavi ricevute nella cartella: /etc/racoon/certs/server. Non dimenticare di impostare i permessi del proprietario dell'utente con il cui nome viene avviato il demone racoon (solitamente root) su 600.
Descriverò la configurazione di mikrotik quando mi connetto tramite WinBox.
Carica la chiave server-name.pub.pem su mikrotik: Menu “File” - “Carica”.
Aprire la sezione “IP” - “IP sec” - scheda “Chiavi”. Ora generiamo le chiavi: il pulsante “Genera chiave”, quindi esportiamo la chiave pubblica mikrotika “Expor Pub. Key", puoi scaricarlo dalla sezione "File", facendo clic con il tasto destro del mouse sul file - "Download".
Importiamo la chiave pubblica di racoon, “Importa”, nell'elenco a discesa del campo “Nome file” cerchiamo il nome-server.pub.pem che abbiamo scaricato in precedenza.
La chiave pubblica mikrotik deve essere convertita
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
e inseriscilo nella cartella /etc/racoon/certs, senza dimenticare il proprietario e i diritti.
Configurazione di racoon con commenti: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
configurazione micrometrica
Ritorna alla sezione "IP" - "IPsec"
Scheda "Profili".
Parametro
Valore
Nome
A tua discrezione (per impostazione predefinita)
Algoritmo hash
sha512
Algoritmo di crittografia
aes-128
Gruppo DH
modp2048
Proposta_controllo
rivendicare
Tutta la vita.
1° 00:00:00
NAT Attraversamento
vero (seleziona la casella)
DPD
120
DPD Massimo fallimento
5
Scheda peer
Parametro
Valore
Nome
A tua discrezione (di seguito denominato MyPeer)
Indirizzo
1.1.1.1 (macchine IP Linux)
Indirizzo locale
10.0.0.2 (interfaccia micrometrica IP WAN)
Profilo
difetto
Modalità di scambio
principale
Passivo
falso
Invia INITIAL_CONTACT
vero
Scheda proposta
Parametro
Valore
Nome
A tua discrezione (di seguito denominato MyPeerProposal)
Aut. Algoritmi
sha512
Incr. Algoritmi
aes-128-cbc
Tutta la vita.
08:00:00
Gruppo PFS
modp2048
Scheda "Identità".
Parametro
Valore
Pera
MyPeer
Sì. Metodo
chiave rsa
Le
mikrotik.privet.key
Chiave remota
nome-server.pub.pem
Gruppo di modelli di policy
difetto
Catena NoTrack
è vuoto
Il mio tipo di documento d'identità
auto
Tipo ID remoto
auto
Abbina per
ID remoto
Configurazione modalità
è vuoto
Genera politica
no
Scheda "Politiche - Generale"
Parametro
Valore
Pera
MyPeer
Tunnel
vero
Src. Indirizzo
192.168.0.0/30
Dest. Indirizzo
192.168.0.0/30
Protocollo
255 (tutti)
Modello
falso
Scheda "Politiche - Azione"
Parametro
Valore
Action
cifrare
Livello
richiedere
Protocolli IPsec
esp
Proposta
MyPeerProposal
Molto probabilmente, come me, hai configurato snat/masquerade sulla tua interfaccia WAN; questa regola deve essere modificata in modo che i pacchetti ipsec in uscita entrino nel nostro tunnel:
Vai alla sezione "IP" - "Firewall".
Scheda "NAT", apri la nostra regola snat/masquerade.
Scheda Avanzate
Parametro
Valore
Politica IPsec
fuori: nessuno
Riavviare il demone procione
sudo systemctl restart racoon
Se racoon non si avvia al riavvio, significa che c'è un errore nella configurazione; nel syslog, racoon visualizza informazioni sul numero di riga in cui è stato rilevato l'errore.
All'avvio del sistema operativo, il demone racoon si avvia prima che vengano attivate le interfacce di rete e abbiamo specificato l'opzione strict_address nella sezione di ascolto; è necessario aggiungere l'unità racoon al file systemd
/lib/systemd/system/racoon.service, nella sezione [Unit], riga After=network.target.
Ora i nostri tunnel ipsec dovrebbero essere attivi, guarda 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 non sono attivi, guarda syslog o journalctl -u racoon.
Ora è necessario configurare le interfacce L3 in modo che il traffico possa essere instradato. Ci sono diverse opzioni, useremo IPIP, dato che mikrotik lo supporta, userei vti, ma sfortunatamente non è ancora stato implementato in mikrotik. Si differenzia da IPIP in quanto può inoltre incapsulare il multicast e inserire fwmark sui pacchetti, mediante i quali possono essere filtrati in iptables e iproute2 (routing basato su policy). Se hai bisogno della massima funzionalità, quindi, ad esempio, GRE. Ma non dimenticare che per funzionalità aggiuntive paghiamo con una grande testata.
Puoi vedere la traduzione di una buona panoramica delle interfacce dei tunnel
Su 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
Ora puoi aggiungere percorsi per le reti dietro mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Affinché la nostra interfaccia e i percorsi vengano generati dopo un riavvio, dobbiamo descrivere l'interfaccia in /etc/network/interfaces e aggiungere percorsi lì nel post-up, oppure scrivere tutto in un file, ad esempio /etc/ ipip-ipsec0.conf ed estrailo tramite post-up, non dimenticare il proprietario del file, i diritti e rendilo eseguibile.
Di seguito è riportato un file di esempio
#!/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
Su Microtik:
Sezione “Interfacce”, aggiungere una nuova interfaccia “Tunnel IP”:
Scheda “Tunnel IP” - “Generale”
Parametro
Valore
Nome
A tua discrezione (di seguito denominato IPIP-IPsec0)
MTU
1480 (se non specificato, mikrotik inizia a tagliare mtu a 68)
Indirizzo locale
192.168.0.2
Indirizzo remoto
192.168.0.1
Segreto IPsec
Disattiva il campo (altrimenti verrà creato un nuovo Peer)
Tieni vivo
Disattiva il campo (altrimenti l'interfaccia si spegnerà costantemente, poiché mikrotika ha un proprio formato per questi pacchetti e non funziona con Linux)
DSCP
ereditare
Non frammentare
no
Morsetto TCP MSS
vero
Consenti percorso veloce
vero
Nella sezione “IP” - “Indirizzi”, aggiungere l'indirizzo:
Parametro
Valore
Indirizzo
192.168.0.2/30
Interfaccia
IPIP-IPsec0
Ora puoi aggiungere percorsi alla rete dietro una macchina Linux; quando aggiungi un percorso, il gateway sarà la nostra interfaccia IPIP-IPsec0.
PS
Dato che il nostro server Linux è transitivo, ha senso impostare su di esso il parametro Clamp TCP MSS per le interfacce ipip:
creare un file /etc/iptables.conf con il seguente contenuto:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
e in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Ho nginx in esecuzione sulla rete dietro mikrotik (ip 10.10.10.1), lo rendo accessibile da Internet, lo aggiungo a /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
Non dimenticare di aggiungere le autorizzazioni appropriate a iptables se hai abilitato i filtri dei pacchetti.
Rimanere in buona salute!
Fonte: habr.com