NAT provayderinin arxasında Linux maşını və Mikrotik arasında IPIP IPsec VPN tuneli

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

  • Eth0 1.1.1.1/32 xarici IP
  • ipip-ipsec0 192.168.0.1/30 bizim tunelimiz olacaq

Miktoik: CCR 1009, RouterOS 6.46.5

  • Provayderdən Eth0 10.0.0.2/30 daxili IP. Provayderin xarici NAT IP-si dinamikdir.
  • ipip-ipsec0 192.168.0.2/30 bizim tunelimiz olacaq

Rakun istifadə edərək Linux maşınında IPsec tuneli yaradacağıq. Detalları təsvir etməyəcəyəm, yaxşısı var məqalə у vvpoloskin.

Lazımi paketləri quraşdırın:

sudo install racoon ipsec-tools

Biz racoon-u konfiqurasiya edirik, o, şərti olaraq ipsec serveri kimi çıxış edəcək. Mikrotik əsas rejimdə əlavə müştəri identifikatorunu ötürə bilmədiyindən və onun Linux-a qoşulduğu xarici IP ünvanı dinamik olduğundan, əvvəlcədən paylaşılmış açardan (parol icazəsi) istifadə edilməyəcək, çünki parol ya istifadəçinin IP ünvanı ilə uyğunlaşdırılmalıdır. birləşdirən host və ya identifikator ilə.

RSA açarlarından istifadə edərək avtorizasiyadan istifadə edəcəyik.

Rakun demonu RSA formatında açarlardan, mikrotik isə PEM formatından istifadə edir. Rakun ilə birlikdə gələn plainrsa-gen yardım proqramından istifadə edərək açarlar yaratsanız, onun köməyi ilə Mikrotika üçün açıq açarı PEM formatına çevirə bilməyəcəksiniz - o, yalnız bir istiqamətdə çevrilir: PEM-dən RSA-ya. Nə openssl, nə də ssh-keygen plainrsa-gen tərəfindən yaradılan açarı oxuya bilmədi, buna görə də onlardan istifadə etməklə çevirmə mümkün olmayacaq.

Openssl istifadə edərək PEM açarı yaradacağıq və sonra onu plainrsa-gen istifadə edərək racoon üçün çevirəcəyik:

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

Alınan açarları qovluğa qoyacağıq: /etc/racoon/certs/server. Rakun demonunun adı ilə işə salındığı istifadəçinin sahibini (adətən root) 600 icazəyə təyin etməyi unutmayın.

WinBox vasitəsilə qoşulduqda mikrotik quraşdırmanı təsvir edəcəyəm.

Server-name.pub.pem düyməsini mikrotikə yükləyin: Menyu “Fayllar” - “Yüklə”.

"IP" bölməsini açın - "IP sec" - "Açarlar" sekmesini. İndi biz açarları yaradırıq - "Açar yarat" düyməsi, sonra mikrotika ictimai açarını ixrac edirik "Export Pub. Açar, onu "Fayllar" bölməsindən yükləyə bilərsiniz, faylın üzərinə sağ vurun - "Yüklə".

Biz racoon ictimai açarını idxal edirik, “İmport”, “Fayl adı” sahəsinin açılan siyahısında əvvəllər yüklədiyimiz server-name.pub.pem-i axtarırıq.

Mikrotik açıq açarı çevirmək lazımdır

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

və sahibini və hüquqlarını unutmadan onu /etc/racoon/certs qovluğuna qoyun.

şərhlərlə racoon konfiqurasiyası: /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 konfiqurasiya

"IP" bölməsinə qayıdın - "IPsec"

"Profillər" nişanı
Parametr
Dəyər

ad
Sizin mülahizənizlə (standart olaraq)

Hash alqoritmi
sha512

Şifrələmə alqoritmi
aes-128

DH-Qrupu
modp2048

Təklif_yoxlayın
iddia

Həyat
1 gün 00:00:00

NAT keçidi
doğru (qutunu işarələyin)

DPD
120

DPD Maksimum uğursuzluq
5

Həmyaşıdlar nişanı
Parametr
Dəyər

ad
Sizin mülahizənizlə (bundan sonra MyPeer adlandırılacaq)

ünvan
1.1.1.1 (IP Linux maşınları)

Yerli Ünvan
10.0.0.2 (IP WAN interfeysi mikrotik)

Profil
default

Mübadilə rejimi
Elanlar

Passiv
saxta

INITIAL_CONTACT göndərin
doğru

Təklif tab
Parametr
Dəyər

ad
Sizin mülahizənizlə (bundan sonra MyPeerProposal adlandırılacaq)

Auth. Alqoritmlər
sha512

Encr. Alqoritmlər
aes-128-cbc

Həyat
08:00:00

PFS Qrupu
modp2048

"Şəxsiyyətlər" nişanı
Parametr
Dəyər

Həmyaşıd
MyPeer

Atuh. Metod
rsa açarı

Aparıcı
mikrotik.privet.key

Uzaqdan Açar
server-name.pub.pem

Siyasət Şablon Qrupu
default

Notrack zənciri
boş

Şəxsiyyət vəsiqəsi növüm
auto

Uzaqdan ID Növü
auto

Match By
uzaq id

Rejimin konfiqurasiyası
boş

Siyasət yaradın
No.

"Siyasətlər - Ümumi" nişanı
Parametr
Dəyər

Həmyaşıd
MyPeer

Tunel
doğru

Src. Ünvan
192.168.0.0/30

Hədəf. Ünvan
192.168.0.0/30

protokol
255 (hamısı)

şablon
saxta

"Siyasətlər - Fəaliyyət" nişanı
Parametr
Dəyər

fəaliyyət
şifrelemek

Səviyyəli
sorğuçu

IPsec Protokolları
esp

Təklif
MyPeerProposal

Çox güman ki, mənim kimi, WAN interfeysinizdə konfiqurasiya edilmiş snat/maskarad var; bu qaydaya düzəliş edilməlidir ki, gedən ipsec paketləri bizim tunelimizə daxil olsun:
"IP" - "Firewall" bölməsinə keçin.
"NAT" nişanı, snat/maskarad qaydamızı açın.

Qabaqcıl Tab
Parametr
Dəyər

IPsec Siyasəti
çıxdı: heç biri

Rakun iblisi yenidən işə salır

sudo systemctl restart racoon

Əgər racoon yenidən başladıqdan sonra işə başlamazsa, o zaman konfiqurasiyada xəta var; syslog-da racoon xətanın aşkar edildiyi sətir nömrəsi haqqında məlumatları göstərir.

ƏS işə salındıqda, racoon demonu şəbəkə interfeysləri açılmazdan əvvəl işə başlayır və biz dinləmə bölməsində strict_address seçimini təyin etdik; siz sistem faylına racoon vahidini əlavə etməlisiniz.
/lib/systemd/system/racoon.service, [Unit] bölməsində After=network.target sətri.

İndi ipsec tunellərimiz yuxarı olmalıdır, çıxışa baxın:

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

Tunellər yuxarı deyilsə, syslog və ya journalctl -u racoon-a baxın.

İndi siz L3 interfeyslərini konfiqurasiya etməlisiniz ki, trafik yönləndirilə bilsin. Fərqli variantlar var, biz IPIP istifadə edəcəyik, mikrotik onu dəstəklədiyi üçün vti istifadə edərdim, amma təəssüf ki, hələ mikrotikdə tətbiq olunmayıb. O, IPIP-dən onunla fərqlənir ki, o, əlavə olaraq multicast-ı əhatə edə və paketlərə fwmarks qoya bilər, bunun vasitəsilə iptables və iproute2-də (siyasətə əsaslanan marşrutlaşdırma) süzülə bilər. Əgər sizə maksimum funksionallıq lazımdırsa, o zaman, məsələn, GRE. Ancaq unutmayın ki, böyük bir başlıq ilə əlavə funksionallıq üçün pul ödəyirik.

Tunel interfeyslərinin yaxşı nəzərdən keçirilməsinin tərcüməsini görə bilərsiniz burada.

Linux-da:

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

İndi mikrotikin arxasındakı şəbəkələr üçün marşrutlar əlavə edə bilərsiniz

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

Yenidən başladıqdan sonra interfeysimizin və marşrutlarımızın yüksəldilməsi üçün biz /etc/network/interfaces-də interfeysi təsvir etməli və post-upda oraya marşrutlar əlavə etməliyik və ya hər şeyi bir faylda yazmalıyıq, məsələn, /etc/ ipip-ipsec0.conf və onu post-up vasitəsilə çəkin, fayl sahibini, hüquqlarını unutma və onu icra edilə bilən hala gətir.

Aşağıda bir nümunə fayldır

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

Mikrotikdə:

"İnterfeyslər" bölməsinə yeni "IP tuneli" interfeysi əlavə edin:

"IP tunel" nişanı - "Ümumi"
Parametr
Dəyər

ad
Sizin mülahizənizlə (bundan sonra IPIP-IPsec0 adlandırılacaq)

MTU
1480 (müəyyən edilməyibsə, mikrotik mtu-nu 68-ə qədər kəsməyə başlayır)

Yerli Ünvan
192.168.0.2

Uzaqdan Ünvan
192.168.0.1

IPsec sirri
Sahəni deaktiv edin (əks halda yeni Peer yaradılacaq)

Qorumalı
Sahəni deaktiv edin (əks halda interfeys daim sönür, çünki mikrotika bu paketlər üçün öz formatına malikdir və Linux ilə işləmir)

DSCP
devralır

Parçalamayın
No.

TCP MSS-ni sıxın
doğru

Sürətli yola icazə verin
doğru

Bölmə "IP" - "Ünvanlar", ünvanı əlavə edin:

Parametr
Dəyər

ünvan
192.168.0.2/30

Interface
IPIP-IPsec0

İndi siz Linux maşınının arxasında şəbəkəyə marşrutlar əlavə edə bilərsiniz; marşrut əlavə edərkən şlüz bizim IPIP-IPsec0 interfeysimiz olacaq.

PS

Linux serverimiz keçidli olduğundan, ipip interfeysləri üçün Clamp TCP MSS parametrini təyin etməyin mənası var:

aşağıdakı məzmunu olan /etc/iptables.conf faylı yaradın:

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

və /etc/network/interfaces-də
post-up iptables-bərpa < /etc/iptables.conf

Mikrotik (ip 10.10.10.1) arxasındakı şəbəkədə işləyən nginx var, onu İnternetdən əlçatan edin, /etc/iptables.conf-a əlavə edin:

*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 

Paket filtrləriniz aktivdirsə, iptables-ə müvafiq icazələri əlavə etməyi unutmayın.

Sağlam qalmaq!

Mənbə: www.habr.com

Добавить комментарий