IPIP IPsec VPN Tunnel tëscht Linux Maschinn a Mikrotik hannert NAT Provider

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generesch x86_64)

  • Eth0 1.1.1.1/32 extern IP
  • ipip-ipsec0 192.168.0.1/30 wäert eisen Tunnel sinn

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 intern IP vum Provider. D'extern NAT IP vum Provider ass dynamesch.
  • ipip-ipsec0 192.168.0.2/30 wäert eisen Tunnel sinn

Mir erstellen en IPsec Tunnel op enger Linux Maschinn mat Racoon. Ech wäert d'Detailer net beschreiwen, et gëtt eng gutt en Artikel у vvpoloskin.

Installéiert déi erfuerderlech Packagen:

sudo install racoon ipsec-tools

Mir konfiguréieren Racoon, et wäert bedingt als ipsec Server handelen. Well Mikrotik am Haaptmodus net en zousätzleche Client Identifizéierer iwwerdroe kann, an déi extern IP Adress duerch déi se mat Linux verbënnt dynamesch ass, funktionnéiert e preshared Schlëssel (Passwuert Autorisatioun) net, well d'Passwuert muss entweder mat der IP Adress vum de Verbindungshost, oder mat Identifizéierer.

Mir benotze Autorisatioun mat RSA Schlësselen.

De Racoon Daemon benotzt Schlësselen am RSA Format, a Mikrotik benotzt de PEM Format. Wann Dir Schlësselen generéiert mat der plainrsa-gen Utility, déi mat Racoon kënnt, da kënnt Dir den ëffentleche Schlëssel fir Mikrotika op PEM Format mat senger Hëllef net konvertéieren - et konvertéiert nëmmen an eng Richtung: PEM op RSA. Weder openssl nach ssh-keygen konnt de generéierte Schlëssel vun plainrsa-gen liesen, sou datt d'Konversioun och net méiglech ass mat hinnen.

Mir generéieren e PEM Schlëssel mat openssl an konvertéiere se dann fir Racoon mat 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

Mir setzen déi erhalen Schlësselen am Dossier: /etc/racoon/certs/server. Vergiesst net de Besëtzer vum Benotzer ënner deem säin Numm de Racoon Daemon lancéiert gëtt (normalerweis root) op 600 Permissiounen ze setzen.

Ech wäert de Mikrotik Setup beschreiwen wann Dir iwwer WinBox verbënnt.

Eroplueden de Server-name.pub.pem Schlëssel op mikrotik: Menu "Dateien" - "Eroplueden".

Öffnen d'Sektioun "IP" - "IP sec" - "Keys" Tab. Elo generéiere mir Schlësselen - de "Generate Key" Knäppchen, exportéiert dann de mikrotika ëffentleche Schlëssel "Expor Pub. Schlëssel", Dir kënnt et aus der Rubrik "Dateien" eroflueden, klickt op d'Datei mat riets - "Luet".

Mir importéieren de Racoon ëffentleche Schlëssel, "Import", an der Dropdown-Lëscht vum Feld "Dateiname" kucken mir no de Server-name.pub.pem, dee mir virdru erofgelueden hunn.

De Mikrotik ëffentleche Schlëssel muss ëmgewandelt ginn

plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key

a setzt se an den Dossier /etc/racoon/certs, net iwwer de Besëtzer a Rechter ze vergiessen.

racoon config mat Kommentaren: /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

Zréck op d'Sektioun "IP" - "IPsec"

Tab "Profiler".
Parameter
Wäert

Numm
No Ärem Diskretioun (par défaut)

Hash Algorithmus
sha512

Verschlësselung Algorithmus
aes-128

DH-Grupp
modp 2048

Proposal_check
behaapten

Liewenszäit
1d 00:00:00

NAT Traversal
richteg (checkt d'Këscht)

DPD
120

DPD Maximum Echec
5

Peers Tab
Parameter
Wäert

Numm
No Ärem Diskretioun (nodréiglech MyPeer bezeechent)

Schéckt
1.1.1.1 (IP Linux Maschinnen)

Lokal Adress
10.0.0.2 (IP WAN Interface Mikrotik)

Profil
Standarddrécker

Austauschmodus
Haaptstrooss

Passiv
falsch

Schécken INITIAL_CONTACT
richteg

Propositioun Tab
Parameter
Wäert

Numm
No Ärem Diskretioun (nodréiglech als MyPeerProposal bezeechent)

Auth. Algorithmen
sha512

Encr. Algorithmen
aes-128-cbc

Liewenszäit
08:00:00

PFS Group
modp 2048

Tab "Identitéiten".
Parameter
Wäert

Praslin
MyPeer

Atuh. Method
rsa Schlëssel

Schlëssel
mikrotik.privet.key

Remote Schlëssel
server-name.pub.pem

Politik Schabloun Group
Standarddrécker

Notrack Kette
eidel

Meng ID Typ
Auto

Remote ID Typ
Auto

Match Vun
Remote id

Modus Configuratioun
eidel

Generéiere Politik
nee

Tab "Politik - Allgemeng"
Parameter
Wäert

Praslin
MyPeer

Tunnel
richteg

Src. Adress
192.168.0.0/30

Dest. Adress
192.168.0.0/30

Protokoll
255 (All)

Schabloun
falsch

Tab "Politik - Aktioun"
Parameter
Wäert

Aktiounen
verschlëssele

Niveau
verlaangen

IPsec Protokoller
esp

Proposal
MyPeerProposal

Wahrscheinlech, wéi ech, hutt Dir Snat / Masquerade op Ärem WAN Interface konfiguréiert; dës Regel muss ugepasst ginn sou datt erausginn ipsec Pakete an eisen Tunnel goen:
Gitt an d'Sektioun "IP" - "Firewall".
"NAT" Tab, öffnen eis Snat / Masquerade Regel.

Fortgeschratt Tab
Parameter
Wäert

IPsec Politik
eraus: kee

Restart de Racoon Demon

sudo systemctl restart racoon

Wann de Racoon net beim Neistart ufänkt, da gëtt et e Feeler an der Configuratioun; am Syslog weist Racoon Informatioun iwwer d'Linnnummer an där de Feeler festgestallt gouf.

Wann den OS boott, fänkt de Racoon-Daemon un ier d'Netzwierk-Interfaces opgefouert ginn, a mir spezifizéieren d'strict_address-Optioun an der Nolauschtersektioun; Dir musst d'Racoon-Eenheet an d'Systemd Datei addéieren
/lib/systemd/system/racoon.service, an der [Unit] Sektioun, Linn After=network.target.

Elo sollten eis ipsec Tunnel erop sinn, kuckt d'Ausgab:

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

Wann d'Tunnel net erop sinn, kuckt op syslog, oder journalctl -u racoon.

Elo musst Dir L3 Schnëttplazen konfiguréieren sou datt de Traffic geréckelt ka ginn. Et gi verschidden Optiounen, mir wäerten IPIP benotzen, well Mikrotik et ënnerstëtzt, ech géif vti benotzen, awer leider ass et nach net a Mikrotik ëmgesat ginn. Et ënnerscheet sech vun IPIP an datt et zousätzlech Multicast ka kapselen an fwmarks op Pakete setzen, duerch déi se an iptables an iproute2 (Politik-baséiert Routing) gefiltert kënne ginn. Wann Dir braucht maximal Funktionalitéit, dann, zum Beispill, GRE. Awer net vergiessen datt mir fir zousätzlech Funktionalitéit mat engem groussen Overhead Kapp bezuelen.

Dir kënnt d'Iwwersetzung vun engem gudden Iwwerbléck iwwer Tunnelinterfaces gesinn hei.

Op 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

Elo kënnt Dir Strecken fir Netzwierker hannert mikrotik addéieren

sudo ip route add A.B.C.D/Prefix via 192.168.255.2

Fir datt eis Interface an d'Strecken no engem Neistart eropgesat ginn, musse mir d'Interface an /etc/network/interfaces beschreiwen an d'Strecken do am Post-up addéieren oder alles an enger Datei schreiwen, zum Beispill /etc/ ipip-ipsec0.conf an zitt et duerch Post-up, vergiesst net iwwer de Fichier Besëtzer, Rechter a maacht et ausführbar.

Drënner ass e Beispill Fichier

#!/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

Iwwer Mikrotik:

Sektioun "Interfaces", füügt en neien Interface "IP Tunnel" derbäi:

Tab "IP Tunnel" - "Allgemeng"
Parameter
Wäert

Numm
No Ärem Diskretioun (nodréiglech IPIP-IPsec0 bezeechent)

Jonge
1480 (wann net spezifizéiert, Mikrotik fänkt mtu op 68 ze schneiden)

Lokal Adress
192.168.0.2

Remote Adress
192.168.0.1

IPsec Geheimnis
Desaktivéiere vum Feld (soss gëtt en neie Peer erstallt)

liewen
Deaktivéiert d'Feld (soss gëtt d'Interface dauernd ausgeschalt, well mikrotika säin eegene Format fir dës Packagen huet a funktionnéiert net mat Linux)

DSCP
ierwen

Net Fragmenter
nee

Klemm TCP MSS
richteg

Erlaben Fast Path
richteg

Sektioun "IP" - "Adressen", addéiere d'Adress:

Parameter
Wäert

Schéckt
192.168.0.2/30

Interface
IPIP-IPsec0

Elo kënnt Dir Strecken an d'Netzwierk hannert enger Linux Maschinn addéieren; wann Dir e Wee bäidréit, ass de Paart eis IPIP-IPsec0 Interface.

PS

Well eise Linux Server transitiv ass, mécht et Sënn fir de Clamp TCP MSS Parameter fir ipip Interfaces drop ze setzen:

erstellt eng Datei /etc/iptables.conf mat den folgenden Inhalter:

*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT

an an /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Ech hunn nginx am Netz hannert Mikrotik (IP 10.10.10.1) lafen, maacht et vum Internet zougänglech, füügt et un /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 

Vergiesst net déi entspriechend Permissiounen op iptables ze addéieren wann Dir Paketfilter aktivéiert hutt.

Gesond!

Source: will.com

Setzt e Commentaire