ИПИП ИПсец ВПН тунел између Линук машине и Микротика иза НАТ провајдера

Линук: Убунту 18.04.4 ЛТС (ГНУ/Линук 4.15.0-91-генерички к86_64)

  • Етх0 1.1.1.1/32 екстерни ИП
  • ипип-ипсец0 192.168.0.1/30 ће бити наш тунел

Миктоик: ЦЦР 1009, РоутерОС 6.46.5

  • Етх0 10.0.0.2/30 интерни ИП од провајдера. Спољни НАТ ИП провајдера је динамичан.
  • ипип-ипсец0 192.168.0.2/30 ће бити наш тунел

Направићемо ИПсец тунел на Линук машини користећи рацоон. Нећу описивати детаље, постоји један добар чланак у ввполоскин.

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

sudo install racoon ipsec-tools

Конфигуришемо рацоон, он ће условно деловати као ипсец сервер. Пошто микротик у главном режиму не може да пренесе додатни идентификатор клијента, а спољна ИП адреса преко које се повезује са Линуком је динамичка, коришћење унапред дељеног кључа (ауторизација лозинком) неће радити, јер лозинка мора да се подудара или са ИП адресом хост за повезивање или са идентификатором.

Користићемо ауторизацију помоћу РСА кључева.

Рацоон даемон користи кључеве у РСА формату, а микротик користи ПЕМ формат. Ако генеришете кључеве помоћу плаинрса-ген услужног програма који долази са рацоон-ом, тада нећете моћи да конвертујете јавни кључ за Микротику у ПЕМ формат уз његову помоћ - он се претвара само у једном правцу: ПЕМ у РСА. Ни опенссл ни ссх-кеиген нису могли да прочитају генерисани кључ од стране плаинрса-гена, тако да конверзија неће бити могућа ни помоћу њих.

Генерисаћемо ПЕМ кључ користећи опенссл, а затим га конвертовати за рацоон користећи плаинрса-ген:

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

Примљене кључеве ћемо ставити у фасциклу: /етц/рацоон/цертс/сервер. Не заборавите да подесите власника корисника под чијим именом се покреће рацоон даемон (обично роот) на 600 дозвола.

Описаћу подешавање микротика при повезивању преко ВинБок-а.

Отпремите сервер-наме.пуб.пем кључ у микротик: Мени “Филес” - “Уплоад”.

Отворите одељак „ИП“ - „ИП сек“ - картица „Кључеви“. Сада генеришемо кључеве - дугме „Генериши кључ“, а затим извозимо јавни кључ микротике „Екпор Пуб. Кључ", можете га преузети из одељка "Датотеке", кликните десним тастером миша на датотеку - "Преузми".

Увеземо рацоон јавни кључ, „Импорт“, у падајућој листи поља „Филе наме“ тражимо сервер-наме.пуб.пем који смо раније преузели.

Јавни кључ микротик треба да се конвертује

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

и ставите га у фасциклу /етц/рацоон/цертс, не заборављајући на власника и права.

рацоон конфигурација са коментарима: /етц/рацоон/рацоон.цонф

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

микротик цонфиг

Вратите се на одељак „ИП“ – „ИПсец“

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

Име
По вашем нахођењу (подразумевано)

Хаш алгоритам
схаКСНУМКС

Алгоритам шифровања
аес-128

ДХ-Гроуп
модп2048

Пропосхал_цхецк
тврдити

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

НАТ Траверсал
тачно (означите поље)

ДПД
120

ДПД Максимални отказ
5

Картица вршњаци
Параметар
Вредност

Име
По вашем нахођењу (у даљем тексту МиПеер)

адреса
1.1.1.1 (ИП Линук машине)

Локална адреса
10.0.0.2 (ИП ВАН интерфејс микротик)

Профил
Уобичајено

Режим размене
главни

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

Пошаљи ИНИТИАЛ_ЦОНТАЦТ
прави

Картица Предлог
Параметар
Вредност

Име
По вашем нахођењу (у даљем тексту МиПеерПропосал)

Аутх. Алгоритми
схаКСНУМКС

Енцр. Алгоритми
аес-128-цбц

Живот
08:00:00

ПФС Гроуп
модп2048

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

Крушка
МиПеер

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

Кључ
микротик.привет.кеи

Даљински кључ
сервер-наме.пуб.пем

Група шаблона политике
Уобичајено

Нотрацк Цхаин
празан

Мој ИД тип
ауто

Ремоте ИД Типе
ауто

Матцх Би
даљински ид

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

Генерате Полици
не

Картица „Смернице – Опште“
Параметар
Вредност

Крушка
МиПеер

Тунел
прави

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

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

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

Шаблон
лажан

Картица „Смернице – радња“
Параметар
Вредност

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

ниво
захтевају

ИПсец протоколи
есп

предлог
МиПеерПропосал

Највероватније, као и ја, имате конфигурисан снат/маскуераде на вашем ВАН интерфејсу; ово правило треба да се прилагоди тако да одлазни ипсец пакети иду у наш тунел:
Идите на одељак "ИП" - "Заштитни зид".
Картица „НАТ“, отворите наше правило за снат/маскараду.

Адванцед Таб
Параметар
Вредност

ИПсец политика
оут: ниједан

Поновно покретање демона ракуна

sudo systemctl restart racoon

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

Када се ОС покрене, рацоон демон се покреће пре него што се покрену мрежни интерфејси, а ми смо навели опцију стрицт_аддресс у одељку за слушање; потребно је да додате рацоон јединицу у системд датотеку
/либ/системд/систем/рацоон.сервице, у одељку [Јединица], ред После=нетворк.таргет.

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

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

Ако тунели нису подигнути, погледајте сислог или јоурналцтл -у рацоон.

Сада морате да конфигуришете Л3 интерфејсе тако да се саобраћај може усмеравати. Постоје различите опције, користићемо ИПИП, пошто микротик то подржава, ја бих користио вти, али, нажалост, још увек није имплементиран у микротику. Разликује се од ИПИП-а по томе што може додатно инкапсулирати мултицаст и ставити фвмаркове на пакете, помоћу којих се могу филтрирати у иптаблес и ипроуте2 (рутирање засновано на политици). Ако вам је потребна максимална функционалност, онда, на пример, ГРЕ. Али не заборавите да додатну функционалност плаћамо великом главом.

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

На Линук-у:

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

Сада можете да додате руте за мреже иза микротика

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

Да би наш интерфејс и руте били подигнути након поновног покретања, потребно је да опишемо интерфејс у ​​/етц/нетворк/интерфацес и да додамо руте тамо у пост-уп-у, или све запишемо у једну датотеку, на пример, /етц/ ипип-ипсец0.цонф и провуците га кроз пост-уп, не заборавите на власника фајла, права и учините га извршним.

Испод је пример датотеке

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

На Микротику:

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

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

Име
По вашем нахођењу (у даљем тексту ИПИП-ИПсец0)

МТУ
1480 (ако није наведено, микротик почиње да сече мту на 68)

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

Ремоте Аддресс
192.168.0.1

ИПсец Сецрет
Деактивирајте поље (у супротном ће бити креиран нови Пеер)

Одржи у животу
Деактивирајте поље (у супротном ће се интерфејс стално гасити, пошто микротика има свој формат за ове пакете и не ради са Линуком)

ДСЦП
наследити

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

Стезаљка ТЦП МСС
прави

Дозволи брзу путању
прави

Одељак „ИП“ - „Адресе“, додајте адресу:

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

адреса
192.168.0.2/30

Интерфејс
ИПИП-ИПсец0

Сада можете да додате руте у мрежу иза Линук машине; када додајете руту, мрежни пролаз ће бити наш ИПИП-ИПсец0 интерфејс.

PS

Пошто је наш Линук сервер транзитиван, има смисла поставити Цламп ТЦП МСС параметар за ипип интерфејсе на њему:

креирајте датотеку /етц/иптаблес.цонф са следећим садржајем:

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

и у /етц/нетворк/интерфацес
пост-уп иптаблес-ресторе < /етц/иптаблес.цонф

Имам нгинк који ради на мрежи иза микротика (ип 10.10.10.1), учини га доступним са Интернета, додај га у /етц/иптаблес.цонф:

*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 

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

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

Извор: ввв.хабр.цом

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