IPIP IPsec VPN tunnel Linuxi masina ja Mikrotiku vahel NAT-i pakkuja taga

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

  • Eth0 1.1.1.1/32 väline IP
  • ipip-ipsec0 192.168.0.1/30 on meie tunnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 sisemine IP pakkujalt. Pakkuja väline NAT-i IP on dünaamiline.
  • ipip-ipsec0 192.168.0.2/30 on meie tunnel

Loome racooni abil Linuxi masinas IPsec tunneli. Ma ei kirjelda üksikasju, seal on hea artikkel у vvpoloskin.

Installige vajalikud paketid:

sudo install racoon ipsec-tools

Konfigureerime racooni, see toimib tingimuslikult ipsec-serverina. Kuna põhirežiimis ei saa mikrotik täiendavat kliendiidentifikaatorit edastada ja väline IP-aadress, mille kaudu see Linuxiga ühendub, on dünaamiline, siis eeljagatud võtme kasutamine (parooli autoriseerimine) ei toimi, kuna parool peab olema vastavuses kas kasutaja IP-aadressiga. ühendava hosti või identifikaatoriga.

Kasutame autoriseerimist RSA võtmete abil.

Rakoondeemon kasutab võtmeid RSA-vormingus ja mikrotik PEM-vormingus. Kui genereerite võtmeid racooniga kaasas oleva plainrsa-gen utiliidi abil, siis ei saa te Mikrotika avalikku võtit selle abil PEM-vormingusse teisendada – see teisendab ainult ühes suunas: PEM-ist RSA-ks. Ei openssl ega ssh-keygen ei suutnud plainrsa-geni loodud võtit lugeda, seega pole ka nende abil teisendamine võimalik.

Genereerime PEM-võtme openssl-i abil ja teisendame selle raconiks, kasutades 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

Saadud võtmed paneme kausta: /etc/racoon/certs/server. Ärge unustage määrata selle kasutaja omanikule, kelle nime all pesudeemon käivitatakse (tavaliselt root), 600 õigust.

Kirjeldan mikrotiku seadistust WinBoxi kaudu ühendamisel.

Laadige võti server-name.pub.pem üles mikrotikule: Menüü "Failid" - "Laadi üles".

Avage jaotis "IP" - "IP sec" - vahekaart "Võtmed". Nüüd genereerime võtmed - nupp “Generate Key”, seejärel ekspordime mikrotika avaliku võtme “Expor Pub. Võti", saate selle alla laadida jaotisest "Failid", paremklõpsake failil - "Laadi alla".

Impordime racooni avaliku võtme "Import" välja "Faili nimi" rippmenüüst otsime varem alla laaditud serveri nimi.pub.pem.

Mikrotik avalik võti tuleb teisendada

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

ja pane see kausta /etc/racoon/certs, unustamata omanikku ja õigusi.

racoon konfiguratsioon kommentaaridega: /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 konfiguratsioon

Naaske jaotisesse "IP" - "IPsec"

Vahekaart "Profiilid".
Parameeter
Väärtus

Nimi
Teie äranägemisel (vaikimisi)

Hashi algoritm
sha512

Krüpteerimisalgoritm
aes-128

DH-grupp
modp2048

Ettepaneku_kontroll
nõudma

Eluaegne
1p 00:00:00

NAT-i läbimine
tõsi (märkige ruut)

DPD
120

DPD Maksimaalne rike
5

Vahekaart Peers
Parameeter
Väärtus

Nimi
Teie äranägemisel (edaspidi MyPeer)

AADRESS
1.1.1.1 (IP Linuxi masinad)

Kohalik aadress
10.0.0.2 (IP WAN-liides mikrotik)

profiil
vaikimisi

Vahetusrežiim
põhiline

passiivne
vale

Saada INITIAL_CONTACT
tõsi

Ettepanekute vahekaart
Parameeter
Väärtus

Nimi
Teie äranägemisel (edaspidi MyPeerProposal)

Aut. Algoritmid
sha512

Encr. Algoritmid
aes-128-cbc

Eluaegne
08:00:00

PFS grupp
modp2048

Vahekaart "Identiteedid".
Parameeter
Väärtus

Pirn
MyPeer

Atuh. meetod
rsa võti

Võti
mikrotik.privet.key

Kaugvõti
serveri-nimi.pub.pem

Poliitikamallide rühm
vaikimisi

Notrack kett
tühi

Minu ID tüüp
auto

Kaug-ID tüüp
auto

Match by
kaug-id

Režiimi konfigureerimine
tühi

Loo poliitika
ei

Vahekaart "Eeskirjad – Üldine"
Parameeter
Väärtus

Pirn
MyPeer

tunnel
tõsi

Src. Aadress
192.168.0.0/30

Siht. Aadress
192.168.0.0/30

Protokoll
255 (kõik)

Šabloon
vale

Vahekaart "Eeskirjad – tegevus"
Parameeter
Väärtus

tegevus
krüptida

Tase
nõuda

IPsec-protokollid
esp

Ettepanek
MyPeerProposal

Tõenäoliselt, nagu mina, on teie WAN-liideses konfigureeritud snat/masquerade; seda reeglit tuleb kohandada nii, et väljuvad ipsec-paketid läheksid meie tunnelisse:
Minge jaotisse "IP" - "Tulemüür".
"NAT" vahekaardil avage meie snat/masquerade reegel.

Vahekaart Täpsemalt
Parameeter
Väärtus

IPseci poliitika
välja: mitte ühtegi

Kährikudeemoni taaskäivitamine

sudo systemctl restart racoon

Kui racoon taaskäivitamisel ei käivitu, siis on konfiguratsioonis viga; syslogis kuvab racoon infot reanumbri kohta, millel viga tuvastati.

Kui OS käivitub, käivitub racooni deemon enne võrguliideste esiletoomist ja me määrasime kuulamise jaotises suvandi strict_address; peate süsteemifaili lisama racooni üksuse
/lib/systemd/system/racoon.service, jaotises [Unit] rida After=network.target.

Nüüd peaksid meie ipseci tunnelid üleval olema, vaadake väljundit:

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

Kui tunnelid pole üleval, vaadake syslogi või journalctl -u racoon.

Nüüd peate konfigureerima L3 liidesed, et liiklust saaks suunata. Võimalusi on erinevaid, me kasutame IPIP-i, kuna mikrotik toetab seda, kasutaksin vti-d, kuid kahjuks pole seda veel mikrotiks rakendatud. See erineb IPIP-st selle poolest, et saab lisaks kapseldada multisaadet ja panna pakettidele fwmarke, mille abil saab neid iptablesis ja iproute2-s (poliitikapõhine marsruutimine) filtreerida. Kui vajate maksimaalset funktsionaalsust, siis näiteks GRE. Kuid ärge unustage, et lisafunktsioonide eest maksame suure üldpeaga.

Näete tunneli liideste hea ülevaate tõlget siin.

Linuxis:

# Создаем интерфейс
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

Nüüd saate mikrotiku taga asuvate võrkude jaoks marsruute lisada

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

Selleks, et meie liides ja marsruudid pärast taaskäivitamist üles kerkiksid, peame kirjeldama liidest failis /etc/network/interfaces ja lisama marsruudid sinna post-up või kirjutama kõik ühte faili, näiteks /etc/ ipip-ipsec0.conf ja tõmba see läbi post-up, ärge unustage faili omanikku, õigusi ja muutke see käivitatavaks.

Allpool on näidisfail

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

Mikrotikus:

Jaotises "Liidesed", lisage uus liides "IP tunnel":

Vahekaart "IP-tunnel" - "Üldine"
Parameeter
Väärtus

Nimi
Teie äranägemisel (edaspidi IPIP-IPsec0)

MTU
1480 (kui pole täpsustatud, hakkab mikrotik mtu lõikama 68 peale)

Kohalik aadress
192.168.0.2

Kaug-aadress
192.168.0.1

IPsec saladus
Deaktiveerige väli (muidu luuakse uus partner)

Elus hoidma
Deaktiveerige väli (muidu lülitub liides pidevalt välja, kuna mikrotikal on nende pakettide jaoks oma vorming ja see ei tööta Linuxiga)

DSCP
pärida

Ärge killustage
ei

Kinnitage TCP MSS
tõsi

Luba kiirtee
tõsi

Jaotis "IP" - "Aadressid", lisage aadress:

Parameeter
Väärtus

AADRESS
192.168.0.2/30

Interface
IPIP-IPsec0

Nüüd saate Linuxi masina taha võrku marsruute lisada; marsruudi lisamisel on lüüsiks meie IPIP-IPsec0 liides.

PS

Kuna meie Linuxi server on transitiivne, on mõttekas määrata sellel ipip-liideste jaoks parameeter Clamp TCP MSS:

looge fail /etc/iptables.conf järgmise sisuga:

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

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

Mul töötab mikrotiku taga võrgus nginx (ip 10.10.10.1), tehke see Internetist juurdepääsetavaks, lisage see faili /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 

Ärge unustage lisada iptablesile vastavaid õigusi, kui teil on paketifiltrid lubatud.

Terveks jääda!

Allikas: www.habr.com

Lisa kommentaar