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
- Eth0 10.0.0.2/30 IP interno del provider. IP esterno NAT del provider è dinamico.
- ipip-ipsec0 192.168.0.2/30 sarà il nostro tunnel
Imposteremo un tunnel IPsec su una macchina Linux usando racoon. Non descriverò i dettagli, c'è una buona у .
Installa i pacchetti richiesti:
sudo install racoon ipsec-toolsConfiguriamo Racoon, che agirà in modo condizionale come server IPsec. Poiché Mikrotik in modalità principale non può trasmettere un identificativo client aggiuntivo e l'indirizzo IP esterno tramite cui si connette a Linux è dinamico, non sarà possibile utilizzare una chiave precondivisa (autorizzazione tramite password), poiché la password deve corrispondere all'indirizzo IP dell'host che si connette o all'identificativo.
Utilizzeremo l'autorizzazione tramite chiave RSA.
Il demone Racoon utilizza chiavi in formato RSA, mentre Mikrotik utilizza chiavi in formato PEM. Se si generano chiavi con l'utility plainrsa-gen inclusa in Racoon, non sarà possibile convertire la chiave pubblica di Mikrotika in formato PEM: la conversione avviene in un solo modo: da PEM a RSA. Né OpenSSL né SSH-KeyGen possono leggere la chiave generata da PlainRSA-Gen, quindi non sarà possibile convertirla.
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.keyCopia le chiavi ricevute nella cartella /etc/racoon/certs/server. Non dimenticare di impostare come proprietario l'utente per conto del quale viene avviato il demone racoon (solitamente root), con diritti pari a 600.
Descriverò la configurazione di Mikrotik quando ci si connette tramite WinBox.
Caricheremo la chiave server-name.pub.pem su mikrotik: Menu “File” — “Carica”.
Apri la sezione "IP" - "IP sec" - scheda "Chiavi". Ora genera le chiavi - pulsante "Genera chiave", quindi esporta la chiave pubblica mikrotika "Esporta chiave pubblica". Puoi scaricarla dalla sezione "File", fai clic con il pulsante destro del mouse sul file - "Scarica".
Importiamo la chiave pubblica racoon, “Importa”, nell’elenco a discesa del campo “Nome file” cerchiamo il server-name.pub.pem che abbiamo scaricato in precedenza.
La chiave pubblica Mikrotik deve essere convertita
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keye inserirlo nella cartella /etc/racoon/certs, senza dimenticare il proprietario e i diritti.
configurazione 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 mikrotik
Torna alla sezione "IP" - "IPsec"
Scheda "Profili"
Parametro
Valore
Nome
A tua discrezione (impostazione predefinita)
Algoritmo hash
sha512
Algoritmo di crittografia
aes-128
Gruppo DH
modp2048
Verifica proposta
rivendicare
Per sempre.
1° 00:00:00
NAT Attraversamento
vero (seleziona la casella)
DPD
120
DPD Massimo Guasto
5
Scheda Peer
Parametro
Valore
Nome
A tua discrezione (di seguito MyPeer)
Indirizzo
1.1.1.1 (macchine IP Linux)
Indirizzo locale
10.0.0.2 (interfaccia micrometrica IP WAN)
Profile
difetto
Modalità di scambio
principale
Passivo
falso
Invia INITIAL_CONTACT
vero
Scheda Proposta
Parametro
Valore
Nome
A tua discrezione (di seguito MyPeerProposal)
Algoritmi di autenticazione
sha512
Algoritmi Encr.
aes-128-cbc
Per sempre.
08:00:00
Gruppo PFS
modp2048
Scheda Identità
Parametro
Valore
Pera
Il mio peer
Atuh. Metodo
chiave RSA
Le
mikrotik.privet.key
Chiave remota
nome-server.pub.pem
PolicyTampaGrupp
difetto
Catena Notrack
è vuoto
Il mio tipo di ID
auto
Tipo di ID remoto
auto
Abbinamento per
ID remoto
Configurazione della modalità
è vuoto
Genera politica
no
Scheda "Criteri — Generale"
Parametro
Valore
Pera
Il mio peer
Tunnel
vero
Indirizzo di origine
192.168.0.0/30
Indirizzo di destinazione
192.168.0.0/30
Protocollo
255 (tutti)
Modello
falso
Criteri — Scheda Azione
Parametro
Valore
Action
cifrare
Livella
necessario
Protocolli IPsec
esp
Proposta
MyPeerProposal
Molto probabilmente, anche tu, come me, hai configurato snat/masquerade sull'interfaccia WAN; questa regola deve essere modificata in modo che i pacchetti IPsec in uscita vengano inseriti nel nostro tunnel:
Andare 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 racoonSe racoon non si avvia al riavvio, significa che c'è un errore nella configurazione; racoon visualizza informazioni sul numero di riga in cui è stato rilevato l'errore in syslog.
Il demone racoon si avvia prima che le interfacce di rete vengano sollevate all'avvio del sistema operativo e abbiamo specificato l'opzione strict_address nella sezione listen; è necessario aggiungerla al file systemd dell'unità racoon.
/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 tunnelSe i tunnel non sono attivi, controllare syslog o journalctl -u racoon.
Ora dobbiamo configurare le interfacce L3 per poter instradare il traffico. Ci sono diverse opzioni: useremo IPIP, poiché Mikrotik lo supporta; io userei VTI, ma sfortunatamente Mikrotik non lo ha ancora implementato. Si differenzia da IPIP in quanto può incapsulare ulteriormente il multicast e applicare marcatori (fwmark) ai pacchetti, con cui possono essere filtrati in iptables e iproute2 (routing basato su policy). Se si necessita della massima funzionalità, allora, ad esempio, GRE. Ma non dimentichiamo che pagare per funzionalità aggiuntive comporta un overhead elevato.
È possibile visualizzare una traduzione di una buona panoramica delle interfacce del 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-ipsec0Ora puoi aggiungere percorsi per le reti dietro Mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Per far sì che la nostra interfaccia e i nostri percorsi siano attivi dopo il riavvio, dobbiamo descrivere l'interfaccia in /etc/network/interfaces e aggiungere i percorsi lì in post-up, oppure scrivere tutto in un file, ad esempio /etc/ipip-ipsec0.conf ed eseguirlo tramite post-up, senza dimenticare il proprietario del file, i diritti e renderlo eseguibile.
Un file di esempio è riportato sotto il taglio.
#!/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.2Su Mikrotik:
Sezione "Interfacce", aggiungere una nuova interfaccia "Tunnel IP":
Inserisci "Tunnel IP" - "Generale"
Parametro
Valore
Nome
A tua discrezione (di seguito IPIP-IPsec0)
MTU
1480 (se non specificato, Mikrotik inizia a ridurre MTU a 68)
Indirizzo locale
192.168.0.2
Indirizzo remoto
192.168.0.1
Segreto IPSec
Disattivare il campo (altrimenti verrà creato un nuovo Peer)
Mantieni vivo
Disattivare il campo (altrimenti l'interfaccia sarà costantemente disattivata, poiché mikrotika ha un suo formato per questi pacchetti e non funziona con Linux)
DSCP
ereditare
Non frammentare
no
Morsetto TCP MSS
vero
Consenti percorso veloce
vero
Sezione "IP" - "Indirizzi", aggiungere l'indirizzo:
Parametro
Valore
Indirizzo
192.168.0.2/30
Interfaccia
IPIP-IPsec0
Ora puoi aggiungere percorsi alla rete dietro la macchina Linux. Quando aggiungi un percorso, il gateway sarà la nostra interfaccia IPIP-IPsec0.
PS
Poiché il nostro server Linux è di transito, ha senso impostare 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
COMMITe in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Ho nginx in esecuzione sulla rete dietro mikrotik (ip 10.10.10.1), rendiamolo accessibile da Internet, aggiungendo 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
