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 ще бъде нашият тунел
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 вътрешен IP от доставчика. Външният IP на доставчика е динамичен NAT.
- ipip-ipsec0 192.168.0.2/30 ще бъде нашият тунел
IPsec тунел на Linux машината ще бъде настроен с racoon. Няма да описвам подробности, има добра у .
Инсталираме необходимите пакети:
sudo install racoon ipsec-toolsКонфигурираме racoon, който условно ще играе ролята на ipsec сървър. Тъй като mikrotik в основен режим не може да предава допълнителен идентификатор на клиента, а външният IP адрес, чрез който се свързва с Linux, е динамичен, не можем да използваме preshared key (авторизация по парола), защото паролата трябва да съвпада или с IP адреса на свързващият хост, или с идентификатора.
Ще използваме авторизация по RSA ключове.
Демонът racoon използва ключове в RSA формат, а mikrotik — в PEM формат. Ако генерираме ключовете с помощта на утилита plainrsa-gen, която идва заедно с racoon, не можем да конвертираме публичния ключ за Mikrotik в PEM формат с нея, тъй като тя конвертира само в една посока: PEM в RSA. Сгенерираният plainrsa-gen ключ не можеше да бъде прочетен нито от openssl, нито от ssh-keygen, така че не бихме могли да извършим конверсията и с тях.
Ние ще генерираме 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. Не забравяйте да установите собственика на потребителя, от името на когото се стартира демонът racoon (обикновено root), права 600.
Настройката на mikrotik ще опиша при свързване през WinBox.
Ключът server-name.pub.pem ще качим в mikrotik: Меню „Files“ — „Upload.“
Отваряме раздела „IP“ — „IP sec“ — таб „Keys“. Сега генерираме ключове — бутон „Generate Key“, след това експортираме публичния ключ на mikrotik „Export Pub. Key“, можете да го свалите от раздела „Files“, с десен клик върху файла — „Download.“
Импортираме публичния ключ racoon, „Import“, в падащото меню на полето „File name“ търсим качения преди това server-name.pub.pem.
Публичният ключ на mikrotik трябва да бъде конвертиран
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keyи поставен в папката /etc/racoon/certs, не забравяйте за собственика и правата.
Конфигурация на racoon с коментари: /etc/racoon/racoon.conf
информация о журнале; # Ниво на записите, при дебъгване използваме 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 и споразумение с хостовете, които се свързват. Tъй като 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"
Вкладка "Профили"
Параметър
Стойност
Name
По ваше усмотрение (по подразбиране default)
Алгоритъм на хеширане
sha512
Алгоритъм за шифроване
aes-128
DH-Група
modp2048
Proposhal_check
claim
Време на живот
1d 00:00:00
NAT Traversal
вярно (поставете отметка)
DPD
120
DPD Максимален провал
5
Вкладка "Партньори"
Параметър
Стойност
Name
По ваше усмотрение (по-нататък MyPeer)
Address
1.1.1.1 (IP на Linux машината)
Локален адрес
10.0.0.2 (IP на WAN интерфейса на mikrotik)
Профил
по подразбиране
Режим на размяна
main
Пасивен
неверно
Изпращане на INITIAL_CONTACT
истинно
Вкладка "Предложение"
Параметър
Стойност
Name
По ваше усмотрение (по-нататък MyPeerProposal)
Алгоритми на удостоверяване
sha512
Алгоритми на криптиране
aes-128-cbc
Време на живот
08:00:00
PFS Група
modp2048
Вкладка "Идентичности"
Параметър
Стойност
Партньор
MyPeer
Метод на удостоверяване
rsa key
Ключ
mikrotik.privet.key
Отдалечен ключ
server-name.pub.pem
Група по шаблони на политики
по подразбиране
Notrack Chain
празно
Тип на моя ID
auto
Тип на отдалечения ID
auto
Сравнение по
отдалечен ID
Конфигурация на режима
празно
Генериране на политика
не
Вкладка "Политики — Общи"
Параметър
Стойност
Партньор
MyPeer
Тунел
истинно
Изходящ адрес
192.168.0.0/30
Целеви адрес
192.168.0.0/30
Протокол
255 (всички)
Шаблон
неверно
Вкладка "Политики — Действие"
Параметър
Стойност
Action
encrypt
Ниво
изисква
IPsec Протоколи
esp
Предложение
MyPeerProposal
Вероятно имате, както и аз, на WAN интерфейса настроен snat/masquerade, това правило трябва да се коригира, за да изходящите пакети ipsec преминат през нашия тунел:
Преминаваме в раздела "IP" — "Firewall".
Вкладка "NAT", отворете правилото ни snat/masquerade.
Вкладка "Разширени"
Параметър
Стойност
Политика на IPsec
out: none
Рестартиране на демона racoon
sudo systemctl restart racoonАко при рестартиране racoon не се стартира, значи в конфигурацията има грешка, в syslog racoon извежда информация за номера на реда, в който е открита грешката.
Демонът racoon при зареждане на ОС стартира преди повдигането на мрежовите интерфейси, а ние указахме в секцията listen опция strict_address, необходимо е да добавим в файла systemd юнита 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 се отличава с това, че допълнително може да инкапсулира multicast и да поставя етикети (fwmark) на пакетите, по които може да се филтрират в 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 и там да добавим маршрутите с post-up, или да запишем всичко в един файл, например, /etc/ipip-ipsec0.conf и да го извикаме чрез post-up. Не забравяйте за собственика на файла, правата и да го направите изпълняем.
Под катай е пример на файл.
#!/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На Mikrotik:
Раздел «Interfaces», добавяме нов интерфейс «IP tunnel»:
Вкладка «IP tunnel» — «General»
Параметър
Стойност
Name
На ваше усмотрение (по-нататък IPIP-IPsec0)
MTU
1480 (ако не указвате, Mikrotik започва да намалява mtu до 68)
Локален адрес
192.168.0.2
Remote Address
192.168.0.1
Ipsec Secret
Деактивираме полето (иначе ще се създаде нов Peer)
Keepalive
Деактивираме полето (иначе интерфейсът постоянно ще се изключва, тъй като Mikrotik има свой формат на тези пакети и не работи с Linux)
DSCP
наследяване
Dont Fragment
не
Clamp TCP MSS
истинно
Позволи Fast Path
истинно
Раздел «IP» — «Addresses», добавяме адрес:
Параметър
Стойност
Address
192.168.0.2/30
Interface
IPIP-IPsec0
Сега можем да добавим маршрути за мрежите зад Linux машината, при добавяне на маршрута, gateway ще бъде нашият интерфейс 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
post-up iptables-restore < /etc/iptables.conf
В мрежата зад Mikrotik имам работещ nginx (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, ако имате включени филтри на пакетите.
Бъдете здрави!
Източник: habr.com
