IPIP IPsec VPN tunnel tusken Linux masine en Mikrotik efter NAT provider

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

  • Eth0 1.1.1.1/32 eksterne IP
  • ipip-ipsec0 192.168.0.1/30 sil ús tunnel wêze

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 ynterne IP fan de provider. De eksterne NAT IP fan de provider is dynamysk.
  • ipip-ipsec0 192.168.0.2/30 sil ús tunnel wêze

Wy sille in IPsec-tunnel oanmeitsje op in Linux-masine mei racoon. Ik sil de details net beskriuwe, d'r is in goede ien artikel у vvpoloskin.

Ynstallearje de nedige pakketten:

sudo install racoon ipsec-tools

Wy konfigurearje racoon, it sil betingst fungearje as in ipsec-tsjinner. Om't mikrotik yn 'e haadmodus gjin ekstra kliïntidentifikaasje kin ferstjoere, en it eksterne IP-adres wêrmei't it mei Linux ferbynt dynamysk is, sil it brûken fan in foardielde kaai (wachtwurdautorisaasje) net wurkje, om't it wachtwurd moat wurde oerienkomme mei it IP-adres fan de ferbinende host, of mei identifier.

Wy sille autorisaasje brûke mei RSA-kaaien.

De racoon-daemon brûkt kaaien yn it RSA-formaat, en mikrotik brûkt it PEM-formaat. As jo ​​​​kaaien generearje mei it plainrsa-gen-hulpprogramma dat komt mei racoon, dan kinne jo de iepenbiere kaai foar Mikrotika net nei PEM-formaat mei har help konvertearje - it konvertearret mar yn ien rjochting: PEM nei RSA. Noch openssl noch ssh-keygen koene de generearre kaai lêze troch plainrsa-gen, sadat de konverzje ek net mei har kin wurde útfierd.

Wy sille in PEM-kaai generearje mei openssl en dan konvertearje foar racoon mei 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

Wy sille de ûntfongen kaaien yn 'e map pleatse: /etc/racoon/certs/server. Ferjit net de eigner fan 'e brûker yn te stellen ûnder waans namme de racoon-daemon wurdt lansearre (meastentiids root) op 600 tagongsrjochten.

Ik sil de mikrotik opset beskriuwe by it ferbinen fia WinBox.

Upload de server-name.pub.pem-kaai nei mikrotik: Menu "Triemen" - "Upload".

Iepenje de "IP" seksje - "IP sec" - "Keys" tab. No generearje wy kaaien - de knop "Generearje Key", eksportearje dan de mikrotika iepenbiere kaai "Expor Pub. Key", kinne jo it downloade fan 'e seksje "Triemen", rjochts-klikke op it bestân - "Download".

Wy ymportearje de iepenbiere kaai fan racoon, "Ymportearje", yn 'e dellûklist fan it fjild "Triemnamme" sykje wy nei de server-name.pub.pem dy't wy earder ynladen hawwe.

De mikrotik iepenbiere kaai moat wurde konvertearre

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

en set it yn 'e map /etc/racoon/certs, net te ferjitten oer de eigner en rjochten.

racoon config mei opmerkingen: /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 konfiguraasje

Gean werom nei de seksje "IP" - "IPsec"

Tab "Profilen".
Parameter
wearde

namme
Nei eigen goedtinken (standert)

Hash Algoritme
sha512

Fersiferingsalgoritme
aes-128

DH-groep
modp2048

Proposhal_check
claim

Lifetime
1d 00:00:00

NAT Traversal
wier (selektearje it fakje)

DPD
120

DPD Maksimum mislearring
5

Peers tab
Parameter
wearde

namme
Nei eigen goedtinken (hjirnei oantsjutten as MyPeer)

Adres
1.1.1.1 (IP Linux-masines)

Lokaal adres
10.0.0.2 (IP WAN ynterface mikrotik)

Profyl
standert

Exchange Mode
main

Passyf
falsk

Stjoer INITIAL_CONTACT
wier

Foarstel tab
Parameter
wearde

namme
Nei eigen goedtinken (hjirnei oantsjutten as MyPeerProposal)

Auth. Algoritmen
sha512

Encr. Algoritmen
aes-128-cbc

Lifetime
08:00:00

PFS Group
modp2048

Tab "Identiteiten".
Parameter
wearde

par
MyPeer

Atuh. Metoade
rsa kaai

Kaai
mikrotik.privet.key

Remote Key
servernamme.pub.pem

Beliedsjabloangroep
standert

Notrack Chain
leech

Myn ID Type
auto

Remote ID Type
auto

Wedstriid By
ôfstân id

Mode Konfiguraasje
leech

Generearje belied
nee

Tab "Belied - Algemien"
Parameter
wearde

par
MyPeer

tunnel
wier

Src. Adres
192.168.0.0/30

Dest. Adres
192.168.0.0/30

Protokol
255 (allegear)

template
falsk

Tab "Belied - Aksje"
Parameter
wearde

Aksje
kodearje

Peil
oanfreger

IPsec-protokollen
esp

Foarstel
MyPeerProposal

Meast wierskynlik, lykas ik, hawwe jo snat / maskerade konfigureare op jo WAN-ynterface; dizze regel moat oanpast wurde sadat útgeande ipsec-pakketten yn ús tunnel gean:
Gean nei de seksje "IP" - "Firewall".
"NAT" tab, iepenje ús snat / maskerade regel.

Avansearre Tab
Parameter
wearde

IPsec Belied
út: gjin

De wasbeerdemon opnij starte

sudo systemctl restart racoon

As racoon net begjint by opnij starte, dan is d'r in flater yn 'e konfiguraasje; yn syslog toant racoon ynformaasje oer it linenûmer wêryn't de flater ûntdutsen is.

As it OS opstart, begjint de racoon-daemon foardat de netwurkynterfaces wurde opbrocht, en wy spesifisearje de strict_address-opsje yn 'e harkseksje; jo moatte de racoon-ienheid tafoegje oan it systemd-bestân
/lib/systemd/system/racoon.service, yn 'e [Unit] seksje, line After=network.target.

No moatte ús ipsec-tunnels omheech wêze, sjoch nei de útfier:

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

As de tunnels net omheech binne, sjoch dan nei syslog, of journalctl -u racoon.

No moatte jo L3-ynterfaces konfigurearje sadat ferkear kin wurde trochstjoerd. D'r binne ferskate opsjes, wy sille IPIP brûke, om't mikrotik it stipet, soe ik vti brûke, mar spitigernôch is it noch net ymplementearre yn mikrotik. It ferskilt fan IPIP yn dat it ek multicast kin ynkapselje en fwmarks op pakketten pleatse, wêrtroch se kinne wurde filtere yn iptables en iproute2 (beliedsbasearre routing). As jo ​​nedich maksimale funksjonaliteit, dan, bygelyks, GRE. Mar ferjit net dat wy betelje foar ekstra funksjonaliteit mei in grutte overhead holle.

Jo kinne de oersetting sjen fan in goede resinsje fan tunnelynterfaces hjir.

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

No kinne jo rûtes tafoegje foar netwurken efter mikrotik

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

Om ús ynterface en rûtes te ferheegjen nei in trochstart, moatte wy de ynterface beskriuwe yn /etc/network/interfaces en rûtes dêr taheakje yn 'e post-up, of alles yn ien bestân skriuwe, bygelyks /etc/ ipip-ipsec0.conf en lûk it troch post-up, ferjit net oer de triemeigner, rjochten en meitsje it útfierber.

Hjirûnder is in foarbyldbestân

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

Op Mikrotik:

Seksje "Interfaces", foegje in nije ynterface "IP-tunnel" ta:

Tab "IP-tunnel" - "Algemien"
Parameter
wearde

namme
Nei eigen goedtinken (hjirnei oantsjutten as IPIP-IPsec0)

MTU
1480 (as net spesifisearre, mikrotik begjint mtu nei 68 te snijen)

Lokaal adres
192.168.0.2

Adres op ôfstân
192.168.0.1

IPsec geheim
Deaktivearje it fjild (oars sil in nije peer oanmakke wurde)

Yn libben hâlde
Deaktivearje it fjild (oars sil de ynterface konstant útskeakelje, om't mikrotika in eigen opmaak hat foar dizze pakketten en wurket net mei Linux)

DSCP
ierde

Net Fragmentearje
nee

Klem TCP MSS
wier

Tastean Fast Paad
wier

Seksje "IP" - "Adressen", foegje it adres ta:

Parameter
wearde

Adres
192.168.0.2/30

interface
IPIP-IPsec0

No kinne jo rûtes tafoegje oan it netwurk efter in Linux-masine; by it tafoegjen fan in rûte sil gateway ús IPIP-IPsec0-ynterface wêze.

PS

Sûnt ús Linux-tsjinner transityf is, makket it sin om de Clamp TCP MSS-parameter foar ipip-ynterfaces derop yn te stellen:

meitsje in triem /etc/iptables.conf mei de folgjende ynhâld:

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

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

Ik haw nginx rinnen op it netwurk efter mikrotik (ip 10.10.10.1), meitsje it tagonklik fan it ynternet, foegje it ta oan /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 

Ferjit net de passende tagongsrjochten ta te foegjen oan iptables as jo pakketfilters ynskeakele hawwe.

Be healthy!

Boarne: www.habr.com

Add a comment