نفق IPIP IPsec VPN بين جهاز Linux وMikrotik خلف موفر NAT

لينكس: أوبونتو 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 هو نفقنا

ميكتوك: سي سي آر 1009، راوتر أو إس 6.46.5

  • Eth0 10.0.0.2/30 IP الداخلي من الموفر. يعتبر عنوان NAT IP الخارجي الخاص بالموفر ديناميكيًا.
  • سيكون ipip-ipsec0 192.168.0.2/30 هو نفقنا

سنقوم بإنشاء نفق IPsec على جهاز Linux باستخدام racoon. لن أصف التفاصيل، فهناك تفاصيل جيدة مقالة у vvpoloskin.

قم بتثبيت الحزم اللازمة:

sudo install racoon ipsec-tools

نقوم بتكوين راكون، وسوف يعمل بشكل مشروط كخادم IPSEC. نظرًا لأن mikrotik في الوضع الرئيسي لا يمكنه إرسال معرف عميل إضافي، وعنوان IP الخارجي الذي يتصل من خلاله بنظام Linux ديناميكي، فإن استخدام مفتاح مشترك مسبقًا (تخويل كلمة المرور) لن يعمل، نظرًا لأنه يجب مطابقة كلمة المرور إما مع عنوان IP الخاص بـ المضيف المتصل، أو مع المعرف.

سوف نستخدم الترخيص باستخدام مفاتيح RSA.

يستخدم البرنامج الخفي racoon المفاتيح بتنسيق RSA، ويستخدم mikrotik تنسيق PEM. إذا قمت بإنشاء مفاتيح باستخدام الأداة المساعدة plainrsa-gen التي تأتي مع racoon، فلن تتمكن من تحويل المفتاح العام لـ Mikrotika إلى تنسيق PEM بمساعدتها - فهو يتحول فقط في اتجاه واحد: PEM إلى RSA. لا يمكن لـ opensl أو ssh-keygen قراءة المفتاح الذي تم إنشاؤه بواسطة plainrsa-gen، لذلك لن يكون التحويل ممكنًا باستخدامهما أيضًا.

سنقوم بإنشاء مفتاح PEM باستخدام opensl ثم نقوم بتحويله إلى 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 باسمه (عادةً الجذر) إلى 600 إذن.

سأصف إعداد mikrotik عند الاتصال عبر WinBox.

قم بتحميل مفتاح server-name.pub.pem إلى mikrotik: قائمة "الملفات" - "تحميل".

افتح قسم "IP" - "IP sec" - علامة التبويب "المفاتيح". الآن نقوم بإنشاء المفاتيح - زر "إنشاء مفتاح"، ثم تصدير المفتاح العام لـ mikrotika "Expor Pub. "مفتاح"، يمكنك تنزيله من قسم "الملفات"، انقر بزر الماوس الأيمن على الملف - "تنزيل".

نقوم باستيراد مفتاح racoon العام، "استيراد"، في القائمة المنسدلة لحقل "اسم الملف" ونبحث عن server-name.pub.pem الذي قمنا بتنزيله سابقًا.

يحتاج المفتاح العام لـ mikrotik إلى التحويل

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

Proposhal_check
مطالبة

حياة
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)

مصادقة. الخوارزميات
sha512

إنكر. الخوارزميات
AES-128-سي بي سي

حياة
08:00:00

مجموعة PFS
modp2048

علامة التبويب "الهويات".
المعلمة
قيمة

لند
ماي بير

أتوه. طريقة
مفتاح آر إس إيه

القفل
mikrotik.privet.key

مفتاح التحكم
اسم الخادم.pub.pem

مجموعة قوالب السياسة
الافتراضي

سلسلة نوتراك
فارغ

نوع هويتي
السيارات

نوع المعرف البعيد
السيارات

المباراة حسب
معرف بعيد

تكوين الوضع
فارغ

توليد السياسة
لا

علامة التبويب "السياسات - عام"
المعلمة
قيمة

لند
ماي بير

نفق
صحيح

سرك. عنوان
192.168.0.0/30

الوجهة عنوان
192.168.0.0/30

بروتوكول
255 (الكل)

قالب
زائف

علامة التبويب "السياسات - الإجراء"
المعلمة
قيمة

اكشن
تشفير

مستوى
يتطلب

بروتوكولات IPsec
ESP

مقترح
MyPeerProposal

على الأرجح، مثلي، قمت بتكوين snat/masquerade على واجهة WAN الخاصة بك؛ تحتاج هذه القاعدة إلى التعديل بحيث تنتقل حزم ipsec الصادرة إلى نفقنا:
انتقل إلى قسم "IP" - "جدار الحماية".
علامة التبويب "NAT"، افتح قاعدة snat/masquerade الخاصة بنا.

علامة التبويب المتقدمة
المعلمة
قيمة

سياسة IPsec
خارج: لا شيء

إعادة تشغيل شيطان الراكون

sudo systemctl restart racoon

إذا لم يبدأ racoon عند إعادة التشغيل، فهذا يعني وجود خطأ في التكوين؛ في سجل النظام، يعرض racoon معلومات حول رقم السطر الذي تم اكتشاف الخطأ فيه.

عند تشغيل نظام التشغيل، يبدأ البرنامج الخفي racoon قبل ظهور واجهات الشبكة، وقمنا بتحديد خيار الصارم_address في قسم الاستماع، وتحتاج إلى إضافة وحدة racoon إلى ملف systemd
/lib/systemd/system/racoon.service، في قسم [الوحدة]، سطر 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

إذا لم تكن الأنفاق مفتوحة، فانظر إلى سجل النظام أو Journalctl -u racoon.

أنت الآن بحاجة إلى تكوين واجهات L3 بحيث يمكن توجيه حركة المرور. هناك خيارات مختلفة، سنستخدم IPIP، نظرًا لأن mikrotik يدعمه، سأستخدم vti، لكن لسوء الحظ، لم يتم تنفيذه بعد في mikrotik. وهو يختلف عن IPIP في أنه يمكنه أيضًا تغليف البث المتعدد ووضع علامات fwmarks على الحزم، والتي يمكن من خلالها تصفيتها في 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

الآن يمكنك إضافة مسارات للشبكات خلف 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":

علامة التبويب "نفق IP" - "عام"
المعلمة
قيمة

الاسم
وفقًا لتقديرك (المشار إليه فيما يلي باسم IPIP-IPsec0)

MTU
1480 (إذا لم يتم تحديده، يبدأ mikrotik في خفض mtu إلى 68)

العنوان المحلي
192.168.0.2

عنوان بعيد
192.168.0.1

IPsec السري
قم بإلغاء تنشيط الحقل (وإلا سيتم إنشاء نظير جديد)

حافظ على حياتك
قم بإلغاء تنشيط الحقل (وإلا سيتم إيقاف تشغيل الواجهة باستمرار، نظرًا لأن 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 بعد المتابعة < /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

إضافة تعليق