Twnnel IPIP IPsec VPN rhwng peiriant Linux a Mikrotik y tu ôl i ddarparwr NAT

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

  • Eth0 1.1.1.1/32 IP allanol
  • ipip-ipsec0 192.168.0.1/30 fydd ein twnnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 IP mewnol gan y darparwr. Mae IP NAT allanol y darparwr yn ddeinamig.
  • ipip-ipsec0 192.168.0.2/30 fydd ein twnnel

Byddwn yn creu twnnel IPsec ar beiriant Linux gan ddefnyddio racoon. Wna i ddim disgrifio'r manylion, mae yna un da erthygl у vvpoloskin.

Gosodwch y pecynnau angenrheidiol:

sudo install racoon ipsec-tools

Rydym yn ffurfweddu racoon, bydd yn gweithredu fel gweinydd ipsec yn amodol. Gan na all mikrotik yn y prif fodd drosglwyddo dynodwr cleient ychwanegol, a bod y cyfeiriad IP allanol y mae'n cysylltu â Linux trwyddo yn ddeinamig, ni fydd defnyddio allwedd a rennir (awdurdodiad cyfrinair) yn gweithio, gan fod yn rhaid paru'r cyfrinair naill ai â'r cyfeiriad IP o y gwesteiwr cysylltu, neu gyda dynodwr.

Byddwn yn defnyddio awdurdodi gan ddefnyddio allweddi RSA.

Mae'r daemon racoon yn defnyddio allweddi yn y fformat RSA, ac mae mikrotik yn defnyddio'r fformat PEM. Os ydych chi'n cynhyrchu allweddi gan ddefnyddio'r cyfleustodau plainrsa-gen sy'n dod gyda racoon, yna ni fyddwch yn gallu trosi'r allwedd gyhoeddus ar gyfer Mikrotika i fformat PEM gyda'i help - mae'n trosi i un cyfeiriad yn unig: PEM i RSA. Ni allai openssl na ssh-keygen ddarllen yr allwedd a gynhyrchir gan plainrsa-gen, felly ni fydd modd eu defnyddio ychwaith i'w trosi.

Byddwn yn cynhyrchu allwedd PEM gan ddefnyddio openssl ac yna'n ei throsi ar gyfer racoon gan ddefnyddio 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

Byddwn yn rhoi'r allweddi a dderbyniwyd yn y ffolder: /etc/racoon/certs/server. Peidiwch ag anghofio gosod perchennog y defnyddiwr y mae'r daemon racŵn yn cael ei lansio o dan ei enw (gwreiddyn fel arfer) i 600 caniatâd.

Byddaf yn disgrifio'r gosodiad mikrotik wrth gysylltu trwy WinBox.

Llwythwch yr allwedd gweinydd-name.pub.pem i mikrotik: Dewislen “Ffeiliau” - “Llwytho i fyny”.

Agorwch yr adran “IP” - “IP sec” - tab “Keys”. Nawr rydym yn cynhyrchu allweddi - y botwm “Cynhyrchu Allwedd”, yna allforio allwedd gyhoeddus mikrotika “Expor Pub. Allwedd", gallwch ei lawrlwytho o'r adran "Ffeiliau", de-gliciwch ar y ffeil - "Lawrlwytho".

Rydyn ni'n mewnforio'r allwedd gyhoeddus racoon, “Import”, yn y gwymplen o'r maes “Enw ffeil” rydyn ni'n edrych am yr enw gweinydd.pub.pem rydyn ni wedi'i lawrlwytho'n gynharach.

Mae angen trosi allwedd gyhoeddus mikrotik

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

a'i roi yn y ffolder /etc/racoon/certs, heb anghofio am y perchennog a'r hawliau.

config racoon gyda sylwadau: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

cyfluniad mikrotik

Dychwelyd i'r adran "IP" - "IPsec"

tab "Proffiliau".
Paramedr
Gwerth

Enw
Yn ôl eich disgresiwn (yn ddiofyn)

Algorithm Hash
sha512

Algorithm Amgryptio
aes- 128

DH-Grŵp
modp2048

Gwiriad_cynnig
hawlio

Oes
1d 00:00:00

NAT Traversal
gwir (ticiwch y blwch)

DPD
120

DPD Methiant mwyaf
5

Tab cyfoedion
Paramedr
Gwerth

Enw
Yn ôl eich disgresiwn (cyfeirir ato o hyn ymlaen fel MyPeer)

cyfeiriad
1.1.1.1 (peiriannau IP Linux)

Cyfeiriad Lleol
10.0.0.2 (microtik rhyngwyneb IP WAN)

Proffil
diofyn

Modd Cyfnewid
prif

Yn Ddeifiol
ffug

Anfon INITIAL_CONTACT
yn wir

Tab cynnig
Paramedr
Gwerth

Enw
Yn ôl eich disgresiwn (cyfeirir ato o hyn ymlaen fel MyPeerProposal)

Awd. Algorithmau
sha512

Amg. Algorithmau
aes-128-cbc

Oes
08:00:00

Grŵp PFS
modp2048

tab "Hunaniaethau".
Paramedr
Gwerth

Cymheiriaid
FyPerch

Atuh. Dull
allwedd rsa

allweddol
mikrotik.privet.key

Allwedd Anghysbell
gweinydd-enw.pub.pem

Grŵp Templedi Polisi
diofyn

Cadwyn Notrack
gwag

Fy Math ID
auto

Math ID o Bell
auto

Cyfateb Erbyn
id o bell

Ffurfweddiad Modd
gwag

Cynhyrchu Polisi
dim

Tab "Polisïau - Cyffredinol"
Paramedr
Gwerth

Cymheiriaid
FyPerch

Twnnel
yn wir

Src. Cyfeiriad
192.168.0.0/30

Dest. Cyfeiriad
192.168.0.0/30

Protocol
255 (i gyd)

templed
ffug

Tab "Polisïau - Gweithredu"
Paramedr
Gwerth

Gweithred
amgryptio

Lefel
gofyn

Protocolau IPsec
esp

Cynnig
Fy Nghynnig Cyfoedion

Yn fwyaf tebygol, fel fi, mae gennych snat / masquerade wedi'i ffurfweddu ar eich rhyngwyneb WAN; mae angen addasu'r rheol hon fel bod pecynnau ipsec sy'n mynd allan yn mynd i'n twnnel:
Ewch i'r adran "IP" - "Firewall".
Tab "NAT", agorwch ein rheol snat/masquerade.

Tab Uwch
Paramedr
Gwerth

Polisi IPsec
allan: dim

Ailgychwyn y gythraul racoon

sudo systemctl restart racoon

Os na fydd racoon yn cychwyn ar ailgychwyn, yna mae gwall yn y ffurfwedd; yn syslog, mae racoon yn dangos gwybodaeth am y rhif llinell y canfuwyd y gwall ynddo.

Pan fydd yr OS yn cychwyn, mae'r daemon racoon yn cychwyn cyn i'r rhyngwynebau rhwydwaith gael eu codi, a gwnaethom nodi'r opsiwn strict_address yn yr adran gwrando; mae angen i chi ychwanegu'r uned racoon i'r ffeil systemd
/lib/systemd/system/racoon.service, yn yr adran [Uned], llinell After=network.target.

Nawr dylai ein twneli ipsec fod i fyny, edrychwch ar yr allbwn:

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

Os na fydd y twneli i fyny, edrychwch ar syslog, neu journalctl -u racoon.

Nawr mae angen i chi ffurfweddu rhyngwynebau L3 fel y gellir cyfeirio traffig. Mae yna wahanol opsiynau, byddwn yn defnyddio IPIP, gan fod mikrotik yn ei gefnogi, byddwn yn defnyddio vti, ond, yn anffodus, nid yw wedi'i weithredu eto yn mikrotik. Mae'n wahanol i IPIP yn yr ystyr y gall hefyd grynhoi aml-ddarlledu a rhoi fwmarks ar becynnau, a thrwy hynny gellir eu hidlo mewn iptables ac iproute2 (llwybrau ar sail polisi). Os oes angen y swyddogaeth fwyaf arnoch, yna, er enghraifft, GRE. Ond peidiwch ag anghofio ein bod yn talu am ymarferoldeb ychwanegol gyda phen uwchben mawr.

Gallwch weld y cyfieithiad o drosolwg da o ryngwynebau twnnel yma.

Ar 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

Nawr gallwch chi ychwanegu llwybrau ar gyfer rhwydweithiau y tu ôl i mikrotik

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

Er mwyn i'n rhyngwyneb a'n llwybrau gael eu codi ar ôl ailgychwyn, mae angen i ni ddisgrifio'r rhyngwyneb yn /etc/network/interfaces ac ychwanegu llwybrau yno yn y post-up, neu ysgrifennu popeth mewn un ffeil, er enghraifft, /etc/ ipip-ipsec0.conf a'i dynnu trwy'r post-up, peidiwch ag anghofio am berchennog y ffeil, hawliau a'i wneud yn weithredadwy.

Isod mae ffeil enghreifftiol

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

Ar Mikrotik:

Adran “Rhyngwynebau”, ychwanegu rhyngwyneb newydd “Twnnel IP”:

Tab “Twnnel IP” - “Cyffredinol”
Paramedr
Gwerth

Enw
Yn ôl eich disgresiwn (y cyfeirir ato o hyn ymlaen fel IPIP-IPsec0)

MTU
1480 (os nad yw wedi'i nodi, mae mikrotik yn dechrau torri mtu i 68)

Cyfeiriad Lleol
192.168.0.2

Cyfeiriad o Bell
192.168.0.1

Cyfrinach IPsec
Analluogi'r maes (fel arall bydd Cymheiriaid newydd yn cael ei greu)

Ceidwadol
Analluogi'r maes (fel arall bydd y rhyngwyneb yn diffodd yn gyson, gan fod gan mikrotika ei fformat ei hun ar gyfer y pecynnau hyn ac nid yw'n gweithio gyda Linux)

DSCP
etifeddu

Peidiwch â Darnio
dim

Clamp TCP MSS
yn wir

Caniatáu Llwybr Cyflym
yn wir

Adran “IP” - “Cyfeiriadau”, ychwanegwch y cyfeiriad:

Paramedr
Gwerth

cyfeiriad
192.168.0.2/30

rhyngwyneb
IPIP-IPsec0

Nawr gallwch chi ychwanegu llwybrau at y rhwydwaith y tu ôl i beiriant Linux; wrth ychwanegu llwybr, porth fydd ein rhyngwyneb IPIP-IPsec0.

PS

Gan fod ein gweinydd Linux yn drosiannol, mae'n gwneud synnwyr gosod y paramedr Clamp TCP MSS ar gyfer rhyngwynebau ipip arno:

creu ffeil /etc/iptables.conf gyda'r cynnwys canlynol:

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

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

Mae gen i nginx yn rhedeg ar y rhwydwaith y tu ôl i mikrotik (ip 10.10.10.1), ei wneud yn hygyrch o'r Rhyngrwyd, ei ychwanegu at /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 

Peidiwch ag anghofio ychwanegu'r caniatâd priodol at iptables os oes gennych hidlwyr pecyn wedi'u galluogi.

Byddwch yn iach!

Ffynhonnell: hab.com

Ychwanegu sylw