Linux you אובונטו 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 תהיה המנהרה שלנו
אנו ניצור מנהרה IPsec על מכונת לינוקס באמצעות רקון. אני לא אתאר את הפרטים, יש אחד טוב
התקן את החבילות הדרושות:
sudo install racoon ipsec-tools
אנו מגדירים את דביבון, הוא יפעל כשרת ipsec על תנאי. מכיוון ש-mikrotik במצב ראשי אינו יכול לשדר מזהה לקוח נוסף, וכתובת ה-IP החיצונית שדרכה הוא מתחבר ללינוקס היא דינמית, שימוש במפתח משותף מראש (הרשאת סיסמה) לא יעבוד, מכיוון שהסיסמה חייבת להיות מותאמת גם עם כתובת ה-IP של המארח המחבר, או עם מזהה.
אנו נשתמש בהרשאה באמצעות מפתחות RSA.
דמון הרקון משתמש במפתחות בפורמט RSA, ו-mikrotik משתמש בפורמט PEM. אם אתה יוצר מפתחות באמצעות כלי השירות plainrsa-gen שמגיע עם racoon, אז לא תוכל להמיר את המפתח הציבורי של Mikrotika לפורמט PEM בעזרתו - הוא ממיר רק בכיוון אחד: PEM ל-RSA. לא openssl ולא ssh-keygen יכלו לקרוא את המפתח שנוצר על ידי plainrsa-gen, כך שההמרה לא תתאפשר גם באמצעותם.
ניצור מפתח PEM באמצעות openssl ולאחר מכן נמיר אותו לדביבון באמצעות 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. אל תשכח להגדיר את הבעלים של המשתמש שתחת שמו מושק דמון הדביבון (בדרך כלל root) ל-600 הרשאות.
אני אתאר את הגדרת mikrotik בעת חיבור דרך WinBox.
העלה את מפתח השרת-name.pub.pem ל-mikrotik: תפריט "קבצים" - "העלה".
פתח את הקטע "IP" - "IP sec" - לשונית "מפתחות". כעת אנו יוצרים מפתחות - כפתור "צור מפתח", ולאחר מכן ייצא את המפתח הציבורי של mikrotika "Expor Pub. מפתח", אתה יכול להוריד אותו מקטע "קבצים", לחץ לחיצה ימנית על הקובץ - "הורד".
אנו מייבאים את המפתח הציבורי של רקון, "ייבוא", ברשימה הנפתחת של השדה "שם קובץ" אנו מחפשים את השרת-name.pub.pem שהורדנו קודם לכן.
יש להמיר את המפתח הציבורי של mikrotik
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
ושם אותו בתיקייה /etc/racoon/certs, בלי לשכוח את הבעלים והזכויות.
תצורת רקון עם הערות: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
תצורת mikrotik
חזור לקטע "IP" - "IPsec"
הכרטיסייה "פרופילים".
פרמטר
ערך
שם
לפי שיקול דעתך (כברירת מחדל)
אלגוריתם חשיש
sha512
אלגוריתם הצפנה
aes-128
DH-Group
modp2048
בדיקה_הצעה
לטעון
משך חיים
1 ד 00:00:00
מעבר NAT
נכון (סמן את התיבה)
DPD
120
DPD מקסימום כשל
5
כרטיסיית עמיתים
פרמטר
ערך
שם
לפי שיקול דעתך (להלן MyPeer)
כתובת
1.1.1.1 (מכונות IP Linux)
כתובת מקומית
10.0.0.2 (ממשק IP WAN mikrotik)
פּרוֹפִיל
ברירת מחדל
מצב החלפה
ראשי
פסיבי
שקר
שלח INITIAL_CONTACT
נָכוֹן
לשונית הצעות
פרמטר
ערך
שם
לפי שיקול דעתך (להלן MyPeerProposal)
Auth. אלגוריתמים
sha512
Encr. אלגוריתמים
aes-128-cbc
משך חיים
08:00:00
קבוצת PFS
modp2048
כרטיסיית "זהויות".
פרמטר
ערך
Peer
MyPeer
אטו. שיטה
מפתח rsa
מפתח
mikrotik.privet.key
מפתח מרחוק
server-name.pub.pem
קבוצת תבניות מדיניות
ברירת מחדל
שרשרת נוטראק
ריק
סוג תעודת הזהות שלי
המכונית
סוג זיהוי מרחוק
המכונית
התאמה לפי
מזהה מרחוק
תצורת מצב
ריק
צור מדיניות
לא
לשונית "מדיניות - כללי"
פרמטר
ערך
Peer
MyPeer
מנהרה
נָכוֹן
Src. כתובת
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 לא מתחיל עם הפעלה מחדש, אז יש שגיאה בתצורה; ב-syslog, racoon מציג מידע על מספר השורה שבו זוהתה השגיאה.
כאשר מערכת ההפעלה מאתחלת, הדמון הרקיע מתחיל לפני שממשקי הרשת מועלים, וציינו את האפשרות strict_address בקטע ההאזנה; עליך להוסיף את יחידת הרקון לקובץ 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
אם המנהרות אינן למעלה, תסתכל על syslog, או journalctl -u racoon.
כעת עליך להגדיר ממשקי L3 כך שניתן יהיה לנתב את התעבורה. ישנן אפשרויות שונות, אנו נשתמש ב-IPIP, מכיוון ש-mikrotik תומך בו, הייתי משתמש ב-vti, אך, לצערי, הוא עדיין לא יושם ב-mikrotik. זה שונה מ-IPIP בכך שהוא יכול בנוסף לקלוט שידור רב ולשים סימני fw על מנות, שבאמצעותם ניתן לסנן אותם ב-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 ולמשוך אותו דרך פוסט-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
במיקרוטיק:
סעיף "ממשקים", הוסף ממשק חדש "מנהרת IP":
לשונית "מנהרת IP" - "כללי"
פרמטר
ערך
שם
לפי שיקול דעתך (להלן IPIP-IPsec0)
MTU
1480 (אם לא צוין, mikrotik מתחיל לחתוך את mtu ל-68)
כתובת מקומית
192.168.0.2
כתובת מרחוק
192.168.0.1
סוד IPsec
השבת את השדה (אחרת ייווצר עמית חדש)
להשאיר בחיים
השבת את השדה (אחרת הממשק יכבה כל הזמן, מכיוון של-mikrotika יש פורמט משלה עבור חבילות אלה ואינו עובד עם לינוקס)
DSCP
לָרֶשֶׁת
אל תפרג
לא
מהדק TCP MSS
נָכוֹן
אפשר נתיב מהיר
נָכוֹן
סעיף "IP" - "כתובות", הוסף את הכתובת:
פרמטר
ערך
כתובת
192.168.0.2/30
מִמְשָׁק
IPIP-IPsec0
כעת אתה יכול להוסיף מסלולים לרשת מאחורי מכונת לינוקס; בעת הוספת מסלול, השער יהיה ממשק ה-IPIP-IPsec0 שלנו.
PS
מכיוון ששרת הלינוקס שלנו טרנזיטיבי, הגיוני להגדיר בו את פרמטר 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
יש לי 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