NAT үйлчилгээ үзүүлэгчийн ард байгаа Линукс машин ба Mikrotik хооронд IPIP IPsec VPN туннель

Линукс: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-ерөнхий 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 нь манай хонгил байх болно

Бид racoon ашиглан Linux машин дээр IPsec туннель үүсгэх болно. Би нарийн ширийн зүйлийг тайлбарлахгүй, сайн зүйл байна нийтлэл у ввполоскин.

Шаардлагатай багцуудыг суулгана уу:

sudo install racoon ipsec-tools

Бид racoon-ийг тохируулдаг, энэ нь нөхцөлт байдлаар ipsec серверийн үүрэг гүйцэтгэх болно. Үндсэн горимд байгаа mikrotik нь нэмэлт клиент танигчийг дамжуулах боломжгүй бөгөөд Линукс руу холбогдох гадаад IP хаяг нь динамик тул нууц үг нь IP хаягтай таарч байх ёстой тул урьдчилан хуваалцсан түлхүүр (нууц үгийн зөвшөөрөл) ашиглах нь ажиллахгүй. холбогч хост эсвэл танигчтай.

Бид RSA түлхүүрүүдийг ашиглан зөвшөөрлийг ашиглах болно.

Ракон демон нь RSA форматын түлхүүрүүдийг ашигладаг бол mikrotik нь PEM форматыг ашигладаг. Хэрэв та racoon-д дагалддаг plainrsa-gen хэрэглүүрийг ашиглан түлхүүр үүсгэвэл түүний тусламжтайгаар Mikrotika-ийн нийтийн түлхүүрийг PEM формат руу хөрвүүлэх боломжгүй болно - энэ нь зөвхөн нэг чиглэлд хөрвүүлдэг: PEM-ээс RSA. Openssl болон ssh-keygen аль нь ч үүсгэсэн түлхүүрийг plainrsa-gen-ээр уншиж чадахгүй байгаа тул тэдгээрийг ашиглан хөрвүүлэх боломжгүй болно.

Бид openssl ашиглан PEM түлхүүр үүсгэж, дараа нь plainrsa-gen ашиглан racoon-д хөрвүүлнэ.

#  Генерируем ключ
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 зөвшөөрлийг тохируулахаа бүү мартаарай.

Би WinBox-ээр холбогдох үед микротикийн тохиргоог тайлбарлах болно.

Mikrotik руу server-name.pub.pem түлхүүрийг байршуулна уу: "Файл" цэс - "Байршуулах".

"IP" хэсгийг нээнэ үү - "IP сек" - "Түлхүүр" таб. Одоо бид түлхүүрүүдийг үүсгэнэ - "Түлхүүр үүсгэх" товч, дараа нь "Export Pub" микротика нийтийн түлхүүрийг экспорт хийнэ. Түлхүүр", та үүнийг "Файл" хэсгээс татаж авч болно, файл дээр хулганы баруун товчийг дарна уу - "Татаж авах".

Бид "Импорт" гэсэн racoon нийтийн түлхүүрийг импортолж, "Файлын нэр" талбарын унадаг жагсаалтаас өмнө нь татаж авсан server-name.pub.pem-ийг хайдаг.

Микротик нийтийн түлхүүрийг хөрвүүлэх шаардлагатай

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

мөн /etc/racoon/certs хавтсанд хийж, эзэмшигч болон эрхийг нь мартаж болохгүй.

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

микротик тохиргоо

"IP" хэсэг рүү буцах - "IPsec"

"Профайл" таб
Үзүүлэлт
үнэ цэнэ

нэр
Таны үзэмжээр (анхдагчаар)

Хэш алгоритм
sha512

Шифрлэлтийн алгоритм
aes-128

DH-бүлэг
modp2048

Санал_шалгах
нэхэмжлэл

Насан туршийн
1 өдөр 00:00:00

NAT дамжуулалт
үнэн (хайрцагыг шалгана уу)

DPD
120

DPD Хамгийн их бүтэлгүйтэл
5

Үе тэнгийнхний таб
Үзүүлэлт
үнэ цэнэ

нэр
Таны үзэмжээр (цаашид MyPeer гэх)

Хаяг
1.1.1.1 (IP Linux машинууд)

Орон нутгийн хаяг
10.0.0.2 (IP WAN интерфэйс микротик)

Хувийн
Анхдагч байна

Биржийн горим
үндсэн

Идэвхгүй
хуурамч

INITIAL_CONTACT илгээх
үнэн

Саналын таб
Үзүүлэлт
үнэ цэнэ

нэр
Таны үзэмжээр (цаашид MyPeerProposal гэх)

Aut. Алгоритмууд
sha512

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

Насан туршийн
08:00:00

PFS групп
modp2048

"Identities" таб
Үзүүлэлт
үнэ цэнэ

нөхдөөс
MyPeer

Атух. Арга
rsa түлхүүр

түлхүүр
mikrotik.privet.key

Алсын түлхүүр
server-name.pub.pem

Бодлогын загварын бүлэг
Анхдагч байна

Нотракийн сүлжээ
хоосон

Миний ID төрөл
автомашин

Алсын ID төрөл
автомашин

Тохируулагч
алсын ID

Горимын тохиргоо
хоосон

Бодлого үүсгэх
Үгүй

"Бодлого - Ерөнхий" таб
Үзүүлэлт
үнэ цэнэ

нөхдөөс
MyPeer

Туннель
үнэн

Src. Хаяг
192.168.0.0/30

Dest. Хаяг
192.168.0.0/30

Протокол
255 (бүгд)

Загвар
хуурамч

"Бодлого - Үйлдэл" таб
Үзүүлэлт
үнэ цэнэ

үйл ажиллагааны
шифрлэх

түвшин
шаарддаг

IPsec протоколууд
ЕС

Санал
MyPeerProposal

Магадгүй та надтай адил WAN интерфэйс дээрээ snat/masquerade тохируулсан байх магадлалтай; энэ дүрмийг гарч байгаа ipsec пакетууд манай хонгил руу орохын тулд тохируулах шаардлагатай.
"IP" - "Галт хана" хэсэгт очно уу.
"NAT" таб, манай snat/masquerade дүрмийг нээнэ үү.

Нарийвчилсан таб
Үзүүлэлт
үнэ цэнэ

IPsec бодлого
гарч: байхгүй

Ракон чөтгөрийг дахин эхлүүлж байна

sudo systemctl restart racoon

Хэрэв racoon дахин эхлүүлэх үед эхлэхгүй бол тохиргоонд алдаа гарсан байна; syslog дээр racoon нь алдаа илэрсэн мөрийн дугаарын мэдээллийг харуулдаг.

Үйлдлийн систем ачаалагдах үед сүлжээний интерфэйсүүд гарч ирэхээс өмнө раконы демон ажиллаж эхэлдэг бөгөөд бид сонсох хэсэгт strict_address сонголтыг зааж өгсөн; та racoon нэгжийг systemd файлд нэмэх хэрэгтэй.
/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-г ашиглах болно, учир нь микротик үүнийг дэмждэг тул би vti-г ашиглах болно, гэхдээ харамсалтай нь микротик дээр хараахан хэрэгжээгүй байна. Энэ нь IPIP-ээс ялгаатай нь multicast-ыг нэмэлтээр бүрхэж, пакетууд дээр fwmark-уудыг байрлуулж, iptables болон iproute2 (бодлогод суурилсан чиглүүлэлт) дээр шүүж болдог. Хэрэв танд хамгийн их ажиллагаа хэрэгтэй бол жишээлбэл, GRE. Гэхдээ бид том толгойтой нэмэлт функцийг төлдөг гэдгийг бүү мартаарай.

Та туннелийн интерфейсийн сайн тойм орчуулгыг харж болно энд.

Линукс дээр:

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

Дахин ачаалсны дараа бидний интерфэйс болон чиглүүлэлтүүдийг нэмэгдүүлэхийн тулд бид /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

Mikrotik дээр:

"Интерфейс" хэсэгт "IP туннель" шинэ интерфейс нэмнэ:

"IP туннель" таб - "Ерөнхий"
Үзүүлэлт
үнэ цэнэ

нэр
Таны үзэмжээр (цаашид IPIP-IPsec0 гэх)

МТУ
1480 (хэрэв заагаагүй бол микротик mtu-г 68 болгож багасгаж эхэлнэ)

Орон нутгийн хаяг
192.168.0.2

Алсын хаяг
192.168.0.1

IPsec нууц
Талбарыг идэвхгүй болгох ( эс тэгвээс шинэ Peer үүснэ)

Амьд байх
Талбарыг идэвхгүй болгох (эсвэл микротика нь эдгээр багцуудад өөрийн гэсэн форматтай бөгөөд Линукс дээр ажиллахгүй тул интерфэйс байнга унтардаг)

DSCP
өвлөнө

Битгий хуваах
Үгүй

TCP MSS хавчаар
үнэн

Хурдан замыг зөвшөөрөх
үнэн

"IP" - "Хаяг" хэсэгт хаягийг нэмнэ үү:

Үзүүлэлт
үнэ цэнэ

Хаяг
192.168.0.2/30

Interface
IPIP-IPsec0

Одоо та Линукс машины ард сүлжээнд маршрут нэмэх боломжтой; чиглүүлэлт нэмэх үед гарц нь манай IPIP-IPsec0 интерфейс байх болно.

PS

Манай Линукс сервер шилжилт хөдөлгөөнтэй тул түүн дээр ipip интерфейсийн Clamp TCP MSS параметрийг тохируулах нь зүйтэй юм.

Дараах агуулгатай /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-сэргээх < /etc/iptables.conf

Надад mikrotik (ip 10.10.10.1)-ийн ард байгаа сүлжээнд nginx ажиллаж байгаа бөгөөд үүнийг интернетээс ашиглах боломжтой болгож, /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

сэтгэгдэл нэмэх