لينكس: أوبونتو 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. لن أصف التفاصيل، فهناك تفاصيل جيدة
قم بتثبيت الحزم اللازمة:
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