IPIP IPsec VPN тунел помеѓу Linux машина и Mikrotik зад NAT провајдерот

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

  • Eth0 1.1.1.1/32 надворешна IP адреса
  • ipip-ipsec0 192.168.0.1/30 ќе биде нашиот тунел

Миктоик: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 внатрешна IP адреса од давателот. Надворешната NAT IP на давателот е динамична.
  • ipip-ipsec0 192.168.0.2/30 ќе биде нашиот тунел

Ќе создадеме IPsec тунел на Linux машина користејќи racoon. Нема да ги опишам деталите, има добар Член у ввполоскин.

Инсталирајте ги потребните пакети:

sudo install racoon ipsec-tools

Ние го конфигурираме racoon, тој условно ќе дејствува како ipsec сервер. Бидејќи mikrotik во главниот режим не може да пренесе дополнителен идентификатор на клиентот, а надворешната IP адреса преку која се поврзува со Linux е динамична, користењето претходно споделен клуч (овластување за лозинка) нема да работи, бидејќи лозинката мора да се совпадне или со IP адресата на поврзувачкиот хост или со идентификатор.

Ќе користиме овластување користејќи клучеви RSA.

Racoon daemon користи клучеви во RSA формат, а mikrotik го користи PEM форматот. Ако генерирате клучеви користејќи ја алатката plainrsa-gen што доаѓа со racoon, тогаш нема да можете да го конвертирате јавниот клуч за Mikrotika во формат PEM со негова помош - тој се претвора само во една насока: PEM во RSA. Ниту openssl ниту ssh-keygen не можеа да го прочитаат генерираниот клуч од plainrsa-gen, така што конверзијата не може да се изврши ниту со нивно користење.

Ќе генерираме PEM клуч користејќи openssl и потоа ќе го конвертираме во racoon користејќи 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

Примените клучеви ќе ги ставиме во папката: /etc/racoon/certs/server. Не заборавајте да го поставите сопственикот на корисникот под чие име е лансиран ракунскиот демон (обично root) на 600 дозволи.

Ќе го опишам поставувањето на mikrotik при поврзување преку WinBox.

Поставете го клучот server-name.pub.pem на mikrotik: Мени „Датотеки“ - „Подигни“.

Отворете го делот „IP“ - табот „IP сек“ - „Клучеви“. Сега генерираме клучеви - копчето „Генерирај клуч“, потоа го извезуваме јавниот клуч на mikrotika „Expor Pub. Клуч“, можете да го преземете од делот „Датотеки“, десен-клик на датотеката - „Преземи“.

Го увезуваме јавниот клуч Racoon, „Увоз“, во паѓачката листа на полето „Име на датотека“ го бараме server-name.pub.pem што го преземавме претходно.

Јавниот клуч mikrotik треба да се конвертира

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

и ставете го во папката /etc/racoon/certs, не заборавајќи на сопственикот и правата.

racoon config со коментари: /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 конфигурација

Вратете се во делот „IP“ - „IPsec“

Табот „Профили“.
Параметар
Вредност

Име
По ваша дискреција (стандардно)

Алгоритам на хаш
sha512

Алгоритам за криптирање
aes-128

DH-група
modp2048

Proposhal_check
тврдат

Живот
1 г 00:00:00

NAT Traversal
точно (штиклирајте го полето)

ДПД
120

DPD Максимален неуспех
5

Картичка Peers
Параметар
Вредност

Име
По ваша дискреција (во натамошниот текст MyPeer)

Адреса
1.1.1.1 (IP Linux машини)

Локална адреса
10.0.0.2 (IP WAN интерфејс mikrotik)

Профил
стандардно

Режим на размена
Главната

Пасивно
лажни

Испрати INITIAL_CONTACT
вистина

Јазиче за предлог
Параметар
Вредност

Име
По ваша дискреција (во натамошниот текст MyPeerProposal)

Авт. Алгоритми
sha512

Encr. Алгоритми
aes-128-cbc

Живот
08:00:00

Група PFS
modp2048

Табот „Идентитети“.
Параметар
Вредност

пер
MyPeer

Атух. Метод
рса клуч

Клучни
mikrotik.privet.key

Далечински клуч
сервер-име.pub.pem

Група за шаблони за политика
стандардно

Нотрак синџир
празен

Мојот тип на лична карта
авто

Тип на далечински ID
авто

Натпревар од
далечински ид

Конфигурација на режимот
празен

Создадете политика
бр

Картичка „Политики - Општо“
Параметар
Вредност

пер
MyPeer

Тунел
вистина

Срц. Адреса
192.168.0.0/30

Дест. Адреса
192.168.0.0/30

Протокол
255 (сите)

Шаблон
лажни

Картичка „Политики - акција“
Параметар
Вредност

акција
шифрирај

Ниво
бараат

IPsec протоколи
esp

Предлогот
MyPeerProposal

Најверојатно, како мене, имате конфигурирано snat/masquerade на вашиот WAN интерфејс; ова правило треба да се прилагоди така што појдовните ipsec пакети ќе влезат во нашиот тунел:
Одете во делот "IP" - "Firewall".
„NAT“ табот, отворете го нашето правило snat/masquerade.

Напредно јазиче
Параметар
Вредност

Политика на IPsec
надвор: нема

Рестартирање на ракунскиот демон

sudo systemctl restart racoon

Ако Racoon не започне при рестартирање, тогаш има грешка во конфигурацијата; во syslog, racoon прикажува информации за бројот на линијата во која е откриена грешката.

Кога ќе се подигне ОС, ракунскиот демон започнува пред да се отворат мрежните интерфејси и ја наведовме опцијата за строга_адреса во делот за слушање; треба да ја додадете единицата ракун во системската датотека
/lib/systemd/system/racoon.service, во делот [Unit], линијата After=network.target.

Сега нашите ipsec тунели треба да се подигнат, погледнете го излезот:

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

Ако тунелите не се поставени, погледнете го syslog или journalctl -u racoon.

Сега треба да ги конфигурирате интерфејсите L3 за да може сообраќајот да се насочува. Има различни опции, ќе користиме IPIP, бидејќи mikrotik го поддржува, јас би користел vti, но, за жал, сè уште не е имплементиран во mikrotik. Се разликува од IPIP по тоа што може дополнително да инкапсулира мултикаст и да стави fwmarks на пакетите, со кои тие можат да се филтрираат во iptables и iproute2 (рутирање базирано на политики). Ако ви треба максимална функционалност, тогаш, на пример, GRE. Но, не заборавајте дека плаќаме за дополнителна функционалност со голема глава.

Можете да го видите преводот на добар преглед на интерфејсите на тунелите тука.

На 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

Сега можете да додавате рути за мрежи зад mikrotik

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

За да може нашиот интерфејс и маршрутите да се подигнат по рестартирање, треба да го опишеме интерфејсот во /etc/network/interfaces и да додадеме рути таму во пост-ап, или да напишеме сè во една датотека, на пример, /etc/ ipip-ipsec0.conf и повлечете ја преку пост-ап, не заборавајте за сопственикот на датотеката, правата и направете ја извршна.

Подолу е пример датотека

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

На Микротик:

Во делот „Интерфејси“, додадете нов интерфејс „ИП тунел“:

Картичка „IP тунел“ - „Општо“
Параметар
Вредност

Име
По ваша дискреција (во натамошниот текст IPIP-IPsec0)

МТУ
1480 (ако не е одредено, mikrotik почнува да го намалува mtu на 68)

Локална адреса
192.168.0.2

Далечинска адреса
192.168.0.1

IPsec тајна
Деактивирајте го полето (во спротивно ќе се создаде нов Peer)

Го одржи во живот
Деактивирајте го полето (во спротивно интерфејсот постојано ќе се исклучува, бидејќи mikrotika има свој формат за овие пакети и не работи со Linux)

DSCP
наследи

Не фрагментирајте
бр

Прицврстете го TCP MSS
вистина

Дозволи Брза патека
вистина

Дел „IP“ - „Адреси“, додајте ја адресата:

Параметар
Вредност

Адреса
192.168.0.2/30

Интерфејс
IPIP-IPsec0

Сега можете да додавате маршрути до мрежата зад машината за Linux; кога додавате рута, портата ќе биде нашиот IPIP-IPsec0 интерфејс.

PS

Бидејќи нашиот Linux сервер е транзитивен, има смисла да го поставите параметарот Clamp TCP MSS за ipip интерфејси на него:

креирајте датотека /etc/iptables.conf со следнава содржина:

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

и во /etc/network/interfaces
пост-ап iptables-restore < /etc/iptables.conf

Имам nginx што работи на мрежата позади mikrotik (ip 10.10.10.1), направи го достапен од Интернет, додај го на /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 

Не заборавајте да ги додадете соодветните дозволи на iptables ако имате овозможени филтри за пакети.

Бидете здрави!

Извор: www.habr.com

Додадете коментар