IPIP IPsec VPN tunneli Linux-koneen ja Mikrotikin välillä NAT-palveluntarjoajan takana

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

  • Eth0 1.1.1.1/32 ulkoinen IP
  • ipip-ipsec0 192.168.0.1/30 on tunnelimme

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 sisäinen IP toimittajalta. Palveluntarjoajan ulkoinen NAT-IP on dynaaminen.
  • ipip-ipsec0 192.168.0.2/30 on tunnelimme

Luomme IPsec-tunnelin Linux-koneelle raconin avulla. En kuvaile yksityiskohtia, siellä on hyvä artikkeli у vvpoloskin.

Asenna tarvittavat paketit:

sudo install racoon ipsec-tools

Määritämme racoonin, se toimii ehdollisesti ipsec-palvelimena. Koska päätilassa oleva mikrotik ei voi lähettää ylimääräistä asiakastunnistetta ja ulkoinen IP-osoite, jonka kautta se muodostaa yhteyden Linuxiin, on dynaaminen, esijaetun avaimen käyttö (salasanan valtuutus) ei toimi, koska salasana on yhteensopiva joko IP-osoitteen kanssa. yhdistävä isäntä tai tunniste.

Käytämme valtuutusta RSA-avaimilla.

Racon daemon käyttää avaimia RSA-muodossa, ja mikrotik käyttää PEM-muotoa. Jos luot avaimia raconin mukana tulevalla plainrsa-gen-apuohjelmalla, et voi muuntaa Mikrotikan julkista avainta PEM-muotoon sen avulla - se muuntaa vain yhteen suuntaan: PEM:stä RSA:ksi. Openssl tai ssh-keygen eivät pystyneet lukemaan plainrsa-genin luomaa avainta, joten muuntaminen ei myöskään ole mahdollista niitä käyttämällä.

Luomme PEM-avaimen openssl:llä ja muunnamme sen sitten raconiksi käyttämällä plainrsa-geniä:

#  Генерируем ключ
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

Laitamme vastaanotetut avaimet kansioon: /etc/racoon/certs/server. Älä unohda asettaa sen käyttäjän omistajalle, jonka nimellä racoon-daemon käynnistetään (yleensä root), 600 käyttöoikeutta.

Kuvaan mikrotikin asetuksia, kun yhdistän WinBoxin kautta.

Lataa palvelimen nimi.pub.pem-avain mikrotikiin: Valikko "Tiedostot" - "Lataa".

Avaa "IP" -osio - "IP sec" - "Keys" -välilehti. Nyt luomme avaimet - "Luo avain" -painikkeen ja viemme sitten mikrotikan julkisen avaimen "Expor Pub. Key", voit ladata sen "Tiedostot" -osiosta, napsauta tiedostoa hiiren kakkospainikkeella - "Lataa".

Tuomme julkisen avaimen, "Import", "Tiedostonimi"-kentän pudotusvalikosta etsimme aiemmin lataamamme server-name.pub.pem-tiedoston.

Mikrotikin julkinen avain on muunnettava

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

ja laita se /etc/racoon/certs-kansioon, unohtamatta omistajaa ja oikeuksia.

racoon config kommenteilla: /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 konfiguraatio

Palaa "IP"-osioon - "IPsec"

"Profiilit" -välilehti
Parametri
Arvo

Nimi
Harkintasi mukaan (oletuksena)

Hash-algoritmi
sha512

Salausalgoritmi
aes-128

DH-ryhmä
modp2048

Ehdotus_tarkistus
vaatia

Elinikäinen
1p 00:00:00

NAT Traversal
tosi (valitse ruutu)

DPD
120

DPD Suurin vika
5

Vertaiset-välilehti
Parametri
Arvo

Nimi
Harkintasi mukaan (jäljempänä MyPeer)

Osoite
1.1.1.1 (IP Linux -koneet)

Paikallinen osoite
10.0.0.2 (IP WAN-liitäntä mikrotik)

Profiili
oletusarvo

Vaihtotila
tärkein

Passiivinen
väärä

Lähetä INITIAL_CONTACT
totta

Ehdotus-välilehti
Parametri
Arvo

Nimi
Harkintasi mukaan (jäljempänä MyPeerProposal)

Tod. Algoritmit
sha512

Encr. Algoritmit
aes-128-cbc

Elinikäinen
08:00:00

PFS Group
modp2048

"Identiteetti"-välilehti
Parametri
Arvo

Peer
MyPeer

Atuh. Menetelmä
rsa avain

avain
mikrotik.privet.key

Etäavain
palvelimen nimi.pub.pem

Käytäntömalliryhmä
oletusarvo

Notrack-ketju
on tyhjä

Oma henkilöllisyystodistus
auto

Etätunnuksen tyyppi
auto

Vastaa
etätunnus

Tilan konfigurointi
on tyhjä

Luo käytäntö
Nro

Välilehti "Käytännöt - Yleistä"
Parametri
Arvo

Peer
MyPeer

Tunneli
totta

Src. Osoite
192.168.0.0/30

Kohde Osoite
192.168.0.0/30

Protokolla
255 (kaikki)

Sapluuna
väärä

Välilehti Käytännöt – Toimi
Parametri
Arvo

Toiminta
Salaa

Taso
vaatia

IPsec-protokollat
esp

Ehdotus
MyPeerProposal

Todennäköisesti, kuten minä, sinulla on snat/masquerade määritetty WAN-liitännässäsi; tätä sääntöä on muutettava niin, että lähtevät ipsec-paketit menevät tunneliimme:
Siirry kohtaan "IP" - "Palomuuri".
"NAT"-välilehti, avaa snat/masquerade-sääntömme.

Lisäasetukset-välilehti
Parametri
Arvo

IPsec-käytäntö
ulos: ei yhtään

Racon demonin uudelleenkäynnistys

sudo systemctl restart racoon

Jos racoon ei käynnisty uudelleenkäynnistyksen yhteydessä, kokoonpanossa on virhe; syslogissa racoon näyttää tiedot rivinumerosta, jolla virhe havaittiin.

Kun käyttöjärjestelmä käynnistyy, racoon-daemon käynnistyy ennen kuin verkkoliitännät tuodaan esiin, ja määritimme kuunteluosiossa vaihtoehdon strict_address; sinun on lisättävä racoon-yksikkö systemd-tiedostoon
/lib/systemd/system/racoon.service, [Unit]-osion rivi After=network.target.

Nyt ipsec-tunneleidemme pitäisi olla pystyssä, katso tulos:

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

Jos tunnelit eivät ole ylhäällä, katso syslog tai journalctl -u racoon.

Nyt sinun on määritettävä L3-liitännät, jotta liikenne voidaan reitittää. Vaihtoehtoja on erilaisia, käytämme IPIP:tä, koska mikrotik tukee sitä, käyttäisin vti: tä, mutta valitettavasti sitä ei ole vielä toteutettu mikrotikissa. Se eroaa IPIP:stä siinä, että se voi lisäksi kapseloida multicast-lähetyksen ja laittaa paketeille fwmarkit, joiden avulla ne voidaan suodattaa iptablesissa ja iproute2:ssa (käytäntöpohjainen reititys). Jos tarvitset maksimaalista toimivuutta, niin esimerkiksi GRE. Mutta älä unohda, että maksamme lisätoiminnoista suurella yläpäällä.

Voit nähdä käännöksen tunnelirajapintojen hyvästä katsauksesta täällä.

Linuxissa:

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

Nyt voit lisätä reittejä verkkoihin mikrotikin takana

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

Jotta käyttöliittymämme ja reitit nousevat esille uudelleenkäynnistyksen jälkeen, meidän täytyy kuvata käyttöliittymä tiedostossa /etc/network/interfaces ja lisätä sinne reitit post-upissa tai kirjoittaa kaikki yhteen tiedostoon, esimerkiksi /etc/ ipip-ipsec0.conf ja vedä se läpi post-up, älä unohda tiedoston omistajaa, oikeuksia ja tee siitä suoritettava.

Alla on esimerkkitiedosto

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

Mikrotikissa:

Kohdassa "Liitännät", lisää uusi käyttöliittymä "IP-tunneli":

Välilehti "IP-tunneli" - "Yleinen"
Parametri
Arvo

Nimi
Harkintasi mukaan (jäljempänä IPIP-IPsec0)

MTU
1480 (jos ei ole määritetty, mikrotik alkaa leikata mtu arvoon 68)

Paikallinen osoite
192.168.0.2

Etäosoite
192.168.0.1

IPsec-salaisuus
Poista kenttä käytöstä (muuten luodaan uusi vertaiskumppani)

Pitää hengissä
Poista kenttä käytöstä (muuten käyttöliittymä sammuu jatkuvasti, koska mikrotiikalla on oma muotonsa näille paketeille eikä se toimi Linuxin kanssa)

DSCP
periä

Älä fragmentoi
Nro

Kiinnitä TCP MSS
totta

Salli nopea reitti
totta

Kohdassa "IP" - "Osoitteet", lisää osoite:

Parametri
Arvo

Osoite
192.168.0.2/30

liitäntä
IPIP-IPsec0

Nyt voit lisätä reittejä verkkoon Linux-koneen takana; reittiä lisättäessä yhdyskäytävä on IPIP-IPsec0-liittymämme.

PS

Koska Linux-palvelimemme on transitiivinen, on järkevää asettaa Clamp TCP MSS -parametri ipip-rajapinnoille:

luo tiedosto /etc/iptables.conf, jolla on seuraava sisältö:

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

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

Minulla on nginx käynnissä verkossa mikrotikin takana (ip 10.10.10.1), tee se saataville Internetistä, lisää se tiedostoon /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 

Älä unohda lisätä asianmukaiset oikeudet iptablesiin, jos pakettisuodattimet ovat käytössä.

Pysyä terveenä!

Lähde: will.com

Lisää kommentti