בתקווה אני לא היחיד שמתלהב מה-EdgeRouters של Ubiquiti.
אני פותח שירשור לשיתוף הגדרות לא טריוויאליות או לא ברורות שיכולות לעניין גם אחרים. אפילו הגדרה בסיסית בראוטרים ביתיים של DMZ לא כזו טריוויאלית ב-edgerouter.
אתחיל את השירשור בכמה נושאים שימושיים לדעתי ובהגדרות שרת VPN שאני כרגע משתמש. אני מנחש שהנושאים באופן כללי יכולים להיות רלוונטים לראוטרים מתקדמים אחרים כגון pfsense או openwrt אבל הקונפיגורציה עצמה לרב תהיה ספציפית ל-edgerouters.
אשמח לתגובות גם על הנושאים שאני מעלה וגם לנושאים אחרים שלדעתכם מעניינים.
כלי הניהול העיקרי של ה-edgerouter הוא ה-CLI אליו מגיעים דרך SSH אבל באמת צריך להקיש את הסיסמא 123456 כל פעם שרוצים להכנס ל-CLI וכל פעם שרוצים להעביר קובץ ב-scp? לא רק שאפשר בלי סיסמא, זה גם יותר מאובטח, תודות ל-public key authentication.
כהערת אגב אציין שאני מכיר כבר שנים את הנושא והשתמשתי בו למערכות אחרות ועדיין הצלחתי להיות חודשים עם ה-edgerouter בלי לקנפג את הדבר הבסיסי הזה, ממש לא ברור לי למה ואיך.
א. openssh - הקליינט שכרגיל מגיע בהתקנות של msys ,linux וכו'. אישית אני פשוט פותח חלון cmd וכותב ssh וזה עובד לי (מסתבר שאצלי זה מגיע מההתקנה של git).
C:\Windows>ssh-keygen -t rsa -b 4096 -C "[email protected]"
Created directory '/c/Users/User/.ssh'.
(אני שובר לשורות כי אחרת מערכת הפורמים מציגה את זה מוזר, במציאות זה הכל שורה אחת).
המפתח עצמו, שאותו נצטרך בשלב הבא, הוא ה"מילה" השניה (כלומר מה-"AAAA" ועד ה-"==" כולל).
שימו לב שאם לא שמרתם את החלק הפומבי של המפתח, תמיד אפשר לפתוח את המפתח הפרטי ב-puttygen ולקבל את המפתח הפומבי (הפוך כמובן שאי אפשר).
(אני שובר לשורות כי אחרת מערכת הפורמים מציגה את זה מוזר, במציאות פקודת כל פקודת set היא שורה אחת).
לחילופין אפשר להשתמש בפקודת ה-loadkey ולהעלות את המפתח מקובץ, במקרה כזה הוא יקבל את השם שמופיע אחרי המפתח עצמו, [email protected] בדוגמא לעיל, כדאי לשנות את זה לשם המכונה לפני שמריצים loadkey או לעשות rename אחר כך.
כעת ה-login יתבצע ללא סיסמא ובצורה יותר מאובטחת. במידה ויש מספר מחשבים, לא להתעצל ולייצר ולהוסיף מפתח שונה לכל מכונה. ככה במידה ואחד המפתחות נחשף (נגיד המחשב נגנב) אז פשוט מוחקים אותו וזה לא משפיע על המפתחות של שאר המכונות.
שימו לב שעדיין אפשר להיכנס לממשק ה-web עם סיסמא ודרכו לשנות הגדרות, כגון לבטל את ההגדרה הנ"ל ואז להיכנס ל-CLI עם סיסמא. אני פתחתי את ה-CLI להתחברות מרחוק (על פורט לא סטנדרטי) אבל את ממשק ה-web לא - לכן יותר חשוב לי לאבטח כמה שיותר את ה-CLI.
אם יש לכם סרטיפיקט אמיתי (בלי מרכאות) מצוין, ראו בהמשך איך להתקין אותו (זה מאד פשוט).
א. אם אין openssl במחשב אז אפשר להוריד מכאן (אני משתמש ב-windows builds מכאן, כנראה שתרצו את גירסת ה-Win64 OpenSSL Light האחרונה).
בקבצי key בשביל private key (נגיד router.key).
קבצי crt בשביל הסרטיפיקט לבדו (כגון router.crt או myCA.crt).
קבצי pem בשביל המפתח הפרטי + הסרטיפיקט (כגון router.pem). אפשר לקבל את קובץ ה-pem ע"י שירשור שני הקבצים הקודמים (לדוגמא ע"י cat router.key router.crt > router.pem).
ד. בדוגמא לעיל הוספתי "extendedKeyUsage = serverAuth,clientAuth" (לעומת המדריך שקישרתי קודם). זה אמנם לא נדרש בשביל הסרטיפיקט של ה-https אבל אני משתמש באותו סרטיפיקט גם בשביל ה-roadwarrior VPN ולפחות וינדוס מסרב להתחבר בלי זה. לדעתי זה לא מפריע להוסיף גם אם אף פעם לא תצטרכו.
ה. התקנת הסרטיפיקט של ה-root CA העצמאי ב-windows נעשית ככה (שוב יש הרבה מדריכים באינטרנט בנושא). מתקינים רק את הסרטיפיקט לבדו (ה-myCA.crt בקונוונציה שלי).
לפחות ב-windows, ה-firefox לא מכבד את הסרטיפקטים שמותקנים ב-windows store - בשביל לסדר את זה צריך להיכנס ל-about:config ולהדליק את ה-security.enterprise_roots.enabled.
שימו לב שה-cert-file צריך להכיל גם את המפתח הפרטי וגם את הסרטיפקט של הראוטר.
משהו יחסית בסיסי לרצות זה לכתוב "ping laptop" ולקבל בצורה יציבה וקונסיסטנטית את ה-IP המקומי של המחשב ששמו laptop. כן בין תחנות windows זה עובד באופן קוסמי עד שזה לא עובד ושוב חוזר לעבוד.... אפשר כמובן להוסיף ל-hosts בכל מכונה את השמות וכתובות של כל המכונות האחרות - שיא הנוחות במיוחד עבור תחנות עם כתובת משתנה (אל תעשו את זה).
תוודאו שאין לכם "service dns forwarding system" (אם צריך תעשו לו delete). אם רוצים גם/רק DNS resolving מהשרתים שהספק נותן ב-dhcp אז אפשר להשתמש בפקודה כגון "set service dns forwarding dhcp eth0".
א. אני משתמש ב-connection-type של respond (שמתורגם ל-"auto=route" של strongswan). מה שגורם שה-vpn לא מאותחל אוטומטית אלא רק ברגע שהראוטר באחד הצדדים רואה בקשה שמיועדת לצד השני הוא מרים את החיבור. כנ"ל אם החיבור נופל לזמן ארוך אז הוא יוקם מחדש רק כאשר תהיה בקשה לתקשורת.
ב. אבטחה מוגברת בשלב הראשון של החיבור ע"י שימוש ב-aes256-sha256 (מוגדר ע"י ה-ike-group). שימו לב שה-erlite לא תומך ב-offload של sha256 אבל הביצועים בשלב זה של החיבור אינם משמעותיים.
בשלב השני של החיבור שימוש ב-aes256-md5 בשביל ביצועים יותר טובים (מוגדר ע"י ה-esp-group). לפחות בניסויים שלי בהרמת חיבור בין erlite ל-erx לא ראיתי ההבדל בביצועים בין aes128 ל-aes256, אבל כן יש שיפור משמעותי בשימוש ב-md5 במקום sha1 (sha256 בכלל לא נתמך ב-offloading של ה-erlite).
השינויים בהשראת החלק הרלוונטי מכאן .
וזה מה שצריך להכניס לקונפיגורציית ה-"set vpn rsa-keys rsa-key-name othersite rsa-key" בראוטר בצד השני.
לקח לי לא מעט זמן להבין מאיפה אני מקבל את הפורמט המוזר הזה למפתח הפומבי, למיטב ידעתי זה לא משהו סטדנרטי אלא משהו ש-vyatta המציאו.
ד. בשביל להפעיל חיבורי vpn אחרים ללא תלות בהגדרת חיבור ה-site-to-site (נגיד ה-road warrior VPN שאציג בפוסט הבא), בחרתי תמיד להגדיר את חוקי ה-firewall ידנית כמו שמוסבר כאן ובמדריכים של הגדרות חיבורי VPN אחרים. במיוחד עם יש רק חיבורי site-to-site אז עדיף לדעתי להשתמש ב-"auto-firewall-nat-exclude" וזהו.
set firewall name WAN_LOCAL rule 90 description "Allow router access from ipsec VPNs"
ב-erlite ה-offloading הרלוונטי מופעל אוטומטית.
במידה וכן יש צורך ב-IPv6 או שרת L2TP אז אין ברירה ואי אפשר להדליק את ה-offload ipsec ב-erx. נקווה שיפתרו את הבעיה בהקדם.
בהעברת קבצים מעל ה-VPN מתקבלים קצבים דומים.
הירידה ל-2 מגה upload היא בגלל החיבור של הוט אבל הירידה ב-download ל-38 מגה כנראה בגלל overhead של ה-vpn שמגביל את ההורדה בגלל קצב ה-upload המוגבל.
חיבור VPN של IKEv2 נחשב יותר קל על ציוד התקשורת ועדיין מאובטח ברמה גבוה ביותר ומאד יציב. הבעיה העיקרית הייתה להבין איך להרים קונפיגורציה של IKEv2 ב-edgerouter. מצאתי כמה פוסטים בנושא אבל עדיין לקח די הרבה מחקר וניסיונות כושלים עד שהצלחתי להרים את זה.
במידה ואין סרטיפקטים אמיתיים אפשר להתשמש בסרטיפקט חתום עצמאית כמו שהסברתי בפוסט כאן.
פרט קטן שלא פירטתי בפוסט לעיל הוא שאני גם מגדיר את ה-dns suffix במתאים (נגיד home.local) בהגדרות VPN בתחנת הקצה (ב-windows זה מוכבה היטב בהגדרות networking של חיבור ה-VPN, נכנסים למאפיינים של ה-IPv4, הגדרות מתקדמות, ותחת DNS למטה אפשר למצוא את ה-dns suffix). זאת בשביל לאפשר גישה נוחה למחשבים ברשת ה-VPN ללא ה-domain המלא. אם מישהו מכיר דרך שה-strongswan ידחוף את זה אוטומטית אשמח לשמוע (כמו שה-dnsmasq עושה בשביל חיבור dhcp ללא VPN).
בסוף הפוסט הנ"ל יש גם את הביצועים שאני מקבל: בחיבור ישיר ל-erlite כ-90/75 (בדומה ל-site-to-site ipsec) ול-erx באופן מרשים כ-200/150.
בחיבור מעל תשתית 100/3 של בזק מול ה-erlite אני מקבל כ-65/3 מגה.
למי שלא רוצה להסתבך ולהסתפק בחיבור L2TP זו גם אופציה לא רעה בכלל במיוחד ב-erlite: קיבלתי כ-72/65 מגה בחיבור ישיר ל-erlite ולא נתקלתי בבעיות בניסוי המוגבל שלי של ה-L2TP.
שימו לב שב ER-X, לפחות כרגע, חייבים לכבות את ה-hardware offloading בשביל שימוש ב-L2TP ולכן המהירות שם הרבה יותר נמוכה (הצלחתי לא לרשום את התוצאה של הבדיקה אבל אם אני זוכר נכון זה היה כ-6 מגה). בנוסף גם אי אפשר לכבות offloading רק בשביל L2TP, כלומר חיבורי site-to-site יספגו פגיעה רצינית בביצועים בשביל האופציה לחיבור ב-L2TP. נקווה שיפתרו את המגבלה הזו בהקדם.
פיייי איזה פוסט יפה, חזק ואמץ.
אני עובד עם pfsense אבל לפחות חלק מההגדרות תופס לכל נתב.
לפי ההודעה שלהם ה-offload ipsec ב-ER-X שבור רק בשימוש של IPv6 או L2TP. היות שאני לא משתמש לא בזה ולא בזה הפעלתי אותו ולא נתקלתי בשום בעיות. אם צריכים חיבורי ipsec בקצב סביר וצריכים IPv6 או L2TP אז צריך לקנות דגם אחר (כגון ה-erlite או ה-edgerouter 4).
כמובן שהרצת pfsense על מכונה טובה זה פתרון אפילו יותר חזק (ה-edgerouters אמנם זולים אבל החומרה שלהם לא בדיוק כזו חזקה). אין לי ניסיון אישי עם pfsense אבל ההתרשמות שלי שגם ה-pfsense וגם ה-edgeOS יחסית נוחים למשתמש המבין - לטעמי הרבה יותר נוחים מ-openwrt ודומיהם (ובטח יותר נוחים מקושחות יצרן בראוטרים ביתיים).
בעיקר לגבי ביצועי ה-ipsec של ה-erlite יש קצת מידע באינטרנט (בעיקר בפורמים של ubiquiti, נגיד כאן): יש כאלה שטוענים שאפשר להגיע עם שני erlites למעל 100 מגה בחיבור ישיר אבל זה נראה לי קצת תמוהה לאור התוצאות שלי עם erlite מול erx. בנוסף הרבה אחרים מציינים את האיזור של 50-100 מגה שזה מתאים בול לתוצאות שלי.
לגבי erx ו-edgerouter 4 (הדגמים האחרים שרלוונטים מבחינתי) אני לא מצליח למצוא מידע. לפי ביצועי ה-erx בקונפיגורצית ה-roadwarrior אני יכול לצפות ששני erxים יגיעו לאיזור ה-150-200 מגה ובהימור ממש פרוע אני מנחש ששני er4ים יגיעו לאיזור ה-400 מגה. כמובן בלי לבדוק קשה להגיד אם אני אפילו קרוב.
במיוחד ה-erx שעולה ממש גרושים (300 ש"ח בארץ) הוא ממש מציאה מבחינת ביצועי IPSec לעומת מחיר לפי מה שאני מכיר.
כמובן שכל זאת רק בחיבור ישיר. במציאות ראיתי ירידה גדולה בביצועים כנראה בגלל ה-upload המוגבל. בדיעבד הייתי צריך גם למודד את צריכת ה-upload כשבדקתי download דרך ה-VPN (בחיבור ישיר) ולהיפך. בהנחה שאני צודק, זה די בעייתי בהינתן מצב ה-upload ברב השוק בארץ.
מישהו נתקל בתופעה הזו גם בציוד אחר (נגיד עם pfsense)?