IPIP IPsec VPN göng milli Linux vél og Mikrotik á bak við NAT veituna

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

  • Eth0 1.1.1.1/32 ytri IP
  • ipip-ipsec0 192.168.0.1/30 verða göngin okkar

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 innri IP frá þjónustuveitunni. Ytri NAT IP-tala þjónustuveitunnar er kraftmikil.
  • ipip-ipsec0 192.168.0.2/30 verða göngin okkar

Við munum búa til IPsec göng á Linux vél með því að nota racoon. Ég mun ekki lýsa smáatriðum, það er gott grein у vvpoloskin.

Settu upp nauðsynlega pakka:

sudo install racoon ipsec-tools

Við stillum racoon, það mun með skilyrðum virka sem ipsec þjónn. Þar sem mikrotik í aðalham getur ekki sent viðbótarauðkenni viðskiptavinar, og ytra IP-talan sem það tengist Linux í gegnum er kraftmikið, mun það ekki virka að nota fyrirfram deilt lykil (aðgangsorðaheimild) þar sem lykilorðið verður að passa annað hvort við IP-tölu hýsilinn sem tengist, eða með auðkenni.

Við munum nota heimild með RSA lyklum.

Racoon púkinn notar lykla á RSA sniði og mikrotik notar PEM sniðið. Ef þú býrð til lykla með því að nota plainrsa-gen tólið sem fylgir racoon, þá muntu ekki geta umbreytt almenningslyklinum fyrir Mikrotika í PEM snið með hjálp þess - það breytir aðeins í eina átt: PEM í RSA. Hvorki openssl né ssh-keygen gátu lesið lykilinn sem myndaður var af plainrsa-gen, þannig að umbreytingin verður ekki möguleg með þeim heldur.

Við munum búa til PEM lykil með openssl og breyta honum síðan fyrir racoon með því að nota 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

Við munum setja móttekna lykla í möppuna: /etc/racoon/certs/server. Ekki gleyma að stilla eiganda notandans undir nafni sem racoon púkinn er ræstur (venjulega rót) á 600 heimildir.

Ég mun lýsa uppsetningu mikrotik þegar ég tengist í gegnum WinBox.

Hladdu upp server-name.pub.pem lyklinum á mikrotik: Valmynd "Skráar" - "Hlaða upp".

Opnaðu „IP“ hlutann - „IP sek“ - „Lyklar“ flipann. Nú búum við til lykla - „Búa til lykil“ hnappinn, flytjum síðan út mikrotika almenningslykilinn „Expor Pub. Key", þú getur hlaðið því niður frá "Skrá" hlutanum, hægrismelltu á skrána - "Hlaða niður".

Við flytjum inn racoon almenningslykilinn, „Import“, í fellilistanum í „Skráarnafn“ reitnum, við leitum að server-name.pub.pem sem við sóttum áðan.

Það þarf að breyta mikrotik almenningslyklinum

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

og settu það í /etc/racoon/certs möppuna, ekki gleyma eigandanum og réttindum.

racoon stillingar með athugasemdum: /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 stillingar

Fara aftur í "IP" hlutann - "IPsec"

"Profiles" flipann
Viðfang
Gildi

heiti
Að eigin vali (sjálfgefið)

Hash reiknirit
sha512

Dulkóðunarreiknirit
aes-128

DH-hópur
modp2048

Proposhal_check
kröfu

Ævi
1d 00:00:00

NAT Traversal
satt (merktu í reitinn)

DPD
120

DPD Hámarksbrestur
5

Jafningaflipi
Viðfang
Gildi

heiti
Að eigin vali (hér eftir nefnt MyPeer)

Heimilisfang
1.1.1.1 (IP Linux vélar)

Heimilisfang á staðnum
10.0.0.2 (IP WAN tengi mikrotik)

Profile
sjálfgefið

Skiptastilling
helstu

Hlutlaus
rangar

Sendu INITIAL_CONTACT
satt

Tillögur flipi
Viðfang
Gildi

heiti
Að eigin vali (hér eftir nefnt MyPeerProposal)

Auth. Reiknirit
sha512

Encr. Reiknirit
aes-128-cbc

Ævi
08:00:00

PFS Group
modp2048

"Auðkenni" flipann
Viðfang
Gildi

Peer
MyPeer

Atuh. Aðferð
rsa lykill

Key
mikrotik.privet.key

Fjarlægur lykill
þjónnafn.pub.pem

Stefna sniðmát hópur
sjálfgefið

Notrack keðja
tómt

Tegund auðkennis míns
bíll

Fjarkenndartegund
bíll

Match By
fjarstýrð auðkenni

Stilling hams
tómt

Búðu til stefnu
nr

Flipi "Stefna - Almennt"
Viðfang
Gildi

Peer
MyPeer

Tunnel
satt

Src. Heimilisfang
192.168.0.0/30

Dest. Heimilisfang
192.168.0.0/30

Siðareglur
255 (allt)

Snið
rangar

Flipi „Reglur – Aðgerð“
Viðfang
Gildi

aðgerð
Dulkóða

Stig
krefjast

IPsec samskiptareglur
esp

Tillaga
MyPeerProposal

Líklegast, eins og ég, ertu með snat/masquerade stillt á WAN viðmótinu þínu; þessa reglu þarf að breyta þannig að útleiðandi ipsec pakkar fari inn í göngin okkar:
Farðu í hlutann "IP" - "Eldveggur".
„NAT“ flipann, opnaðu snat/masquerade regluna okkar.

Ítarlegri flipi
Viðfang
Gildi

IPsec stefna
út: enginn

Endurræsir racoon púkann

sudo systemctl restart racoon

Ef racoon byrjar ekki við endurræsingu, þá er villa í stillingunni; í syslog sýnir racoon upplýsingar um línunúmerið sem villan fannst í.

Þegar stýrikerfið ræsist byrjar racoon púkinn áður en netviðmótin eru tekin upp og við tilgreindum strict_address valkostinn í hlustahlutanum; þú þarft að bæta racoon einingunni við systemd skrána
/lib/systemd/system/racoon.service, í [Unit] hlutanum, línan After=network.target.

Nú ættu ipsec göngin okkar að vera komin upp, sjáðu úttakið:

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

Ef göngin eru ekki uppi skaltu skoða syslog eða journalctl -u racoon.

Nú þarftu að stilla L3 tengi þannig að hægt sé að beina umferð. Það eru mismunandi valkostir, við munum nota IPIP, þar sem mikrotik styður það, myndi ég nota vti, en því miður hefur það ekki enn verið útfært í mikrotik. Það er frábrugðið IPIP að því leyti að það getur auk þess hjúpað fjölvarp og sett fw-merki á pakka, með því er hægt að sía þau í iptables og iproute2 (stefnumiðuð leið). Ef þú þarft hámarksvirkni, þá, til dæmis, GRE. En ekki gleyma því að við borgum fyrir viðbótarvirkni með stórum haus.

Þú getur séð þýðingu á góðu yfirliti yfir viðmót jarðganga hér.

Á 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

Nú geturðu bætt við leiðum fyrir netkerfi á bak við mikrotik

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

Til þess að viðmótið okkar og leiðir hækki eftir endurræsingu þurfum við að lýsa viðmótinu í /etc/network/interfaces og bæta við leiðum þar í post-up, eða skrifa allt í eina skrá, til dæmis /etc/ ipip-ipsec0.conf og dragðu það í gegnum post-up, ekki gleyma um eiganda skráarinnar, réttindi og gera það keyranlegt.

Hér að neðan er dæmi um skrá

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

Á Mikrotik:

Hluti „Viðmót“, bættu við nýju viðmóti „IP göng“:

Flipi „IP göng“ - „Almennt“
Viðfang
Gildi

heiti
Að eigin vali (hér eftir nefnt IPIP-IPsec0)

MTU
1480 (ef ekki tilgreint byrjar mikrotik að klippa mtu í 68)

Heimilisfang á staðnum
192.168.0.2

Fjarvistfang
192.168.0.1

IPsec leyndarmál
Slökktu á reitnum (annars verður nýr jafningi búinn til)

Halda á lífi
Slökktu á reitnum (annars slekkur viðmótið stöðugt á sér, þar sem mikrotika hefur sitt eigið snið fyrir þessa pakka og virkar ekki með Linux)

DSCP
erfa

Ekki sundra
nr

Klemma TCP MSS
satt

Leyfa hraða leið
satt

Hluti „IP“ - „Heimilisföng“, bætið við heimilisfanginu:

Viðfang
Gildi

Heimilisfang
192.168.0.2/30

Tengi
IPIP-IPsec0

Nú geturðu bætt leiðum við netið á bak við Linux vél; þegar leið er bætt við verður gátt IPIP-IPsec0 viðmótið okkar.

PS

Þar sem Linux netþjónninn okkar er breytilegur er skynsamlegt að stilla Clamp TCP MSS færibreytuna fyrir ipip tengi á honum:

búðu til skrá /etc/iptables.conf með eftirfarandi innihaldi:

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

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

Ég er með nginx í gangi á netinu á bakvið mikrotik (ip 10.10.10.1), gerðu það aðgengilegt af internetinu, bættu því við /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 

Ekki gleyma að bæta viðeigandi heimildum við iptables ef þú ert með pakkasíur virkar.

Vertu heilbrigður!

Heimild: www.habr.com

Bæta við athugasemd