התצורה הציבורית של VPN הפסיקה לעבוד? קראו את שלב הכשל
פרופיל שהורדתם מתאר מארח אחד ביום אחד. קראו איזו הנחה נשברה, בדקו את התעודה שהצד השני מציג, ולעולם אל תבטלו את האימות.
הפרופיל עבד ביום שלישי, וביום שישי הלקוח מסתובב שלושים שניות ומוותר. שום דבר במחשב שלכם לא השתנה. וזו בדיוק הנקודה: תצורה שהורדה מתארת מארח אחד ברגע אחד, ולמפעיל בצד השני אין שום חובה לשמור על התיאור הזה נכון. הפיתוי הוא להתחיל לערוך הגדרות אבטחה עד שהמנהרה תחזור. האינסטינקט הזה הוא הסיבה שאנשים מגיעים להריץ פרופיל עם אימות תעודות כבוי, וזה גרוע יותר מאשר בלי מנהרה בכלל.
הקובץ מתאר רגע, לא חוזה
קובץ תצורה הוא אוסף של הנחות: שם המארח הזה מאזין בפורט הזה עם הפרוטוקול הזה, מציג תעודה שמתאימה לשם הזה, ומקבל את פרטי ההתחברות האלה. כשאיזו מהן מפסיקה להיות נכונה, הקובץ מיושן והתיקון שייך לצד המפעיל של הגבול, לא להגדרות שלכם.
רשימות צמתים ציבוריות מבהירות זאת מטבען. את הצמתים מפעילים מתנדבים, הם מופיעים ונעלמים, כתובות ממוחזרות ופורטים נחסמים על ידי הרשת שהם יושבים מאחוריה. הרשימה היא תמונת מצב שמתחדשת, והעותק בדיסק שלכם הוא צילום של תמונת מצב ישנה יותר.
שירותים מסחריים משתנים לאט יותר, אבל לא אף פעם. רשויות תעודות מתחלפות, מאזין עובר מכתובת משותפת לכתובת ייעודית, פרוטוקול ישן מוסר ורשימת צפנים חדשה נוחתת. כל אחד מאלה בלתי נראה עד שהלקוח שלכם מנסה להתחבר ומקבל תשובה שונה מזו שהקובץ מצפה לה.
קראו את שלב הכשל לפני שאתם נוגעים בהגדרה
הודעת השגיאה אומרת איזו הנחה נשברה, ולכל הנחה תיקון שונה לחלוטין. עריכת צפנים כששם המארח כבר לא נפתר מבזבזת אחר צהריים ולא מלמדת אף אחד דבר.
| What happens | The assertion that broke | Supported response |
|---|---|---|
| Name never resolves | The host still exists under that name | Get a current endpoint from the operator |
| TCP connect times out | The listener is on that port and reachable | Check the current published port, then the local network |
| TLS or key exchange fails | The peer presents the expected identity | Compare the certificate, not the cipher list |
| Authentication rejected | The account is still valid | Get credentials reissued or stop using the service |
dig +short vpn.example.net
curl -sS -o /dev/null -w 'connect=%{time_connect} tls=%{time_appconnect}\n' --max-time 8 https://vpn.example.net:443/
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief </dev/nullהשורה האמצעית מפרידה בין נתיב חסום לבין לחיצת יד שבורה, והשלישית מציגה את המנפיק ואת תוקף התעודה שמוצגת בפועל. אם המנפיק הזה אינו זה שהפרופיל נעץ, התעודה השתנתה, ואף אפשרות בצד הלקוח לא תחזיר את הנעילה הישנה להיות נכונה.
שינויי תעודה וזהות הם השקטים
רוב הכשלים מכריזים על עצמם. שינויי זהות לא, מפני שלקוח שנעץ שם תעודה ידחה תעודה חדשה לגמרי תקינה עם הודעה שרבים קוראים כבאג. המנהרה תקינה. הנעילה מיושנת.
חפשו את אפשרויות הזהות לפני שאתם מסיקים משהו:
grep -nE '^(remote|proto|auth|verify-x509-name|tls-crypt|key-direction|ca) ' profile.ovpn
openssl x509 -in profile-ca.crt -noout -subject -datesאם הפרופיל נושא CA מוטמע והמפעיל עבר לרשות חדשה, הקובץ הישן לא יכול לאמת את השרת החדש. החלפת בלוק ה-CA בזה שפרסם המפעיל היא תיקון לגיטימי. מחיקת הוראת האימות איננה, ואלה אותן הקשות מקלדת עם תוצאה שונה מאוד.
שדרוג לקוח יכול ליצור את אותו סימפטום בלי שום שינוי מצד המפעיל. אפשרויות שנסבלו בשקט נדחות כעת, או שפרוטוקול מיושן מוסר. זו מגבלת תאימות בתוכנה שלכם, וכדאי לנסות פרופיל שני באותו לקוח לפני שאתם מאשימים את השרת.
רק המפעיל יכול לפרסם תחליף תקף
כשצומת נעלם, התחליף חייב לבוא מאותו מקור שפרסם את המקור. פרופיל שמגיע בהודעה ישירה מפני שהוא «משתמש באותו שם שרת» הוא תצורה לא מאומתת מצד לא ידוע, וייבוא שלה נותן לאותו צד שליטה בניתוב שלכם.
הבדיקה זולה. הביאו את הקובץ הנוכחי מהמקום המפורסם, השוו את נקודת הקצה והפרוטוקול לרשימה, ואשרו את טביעת האצבע של חומר ה-CA במקום לסמוך על שם הקובץ:
curl -sS -o current.ovpn https://example.org/nodes/current.ovpn
sha256sum current.ovpn profile.ovpn
grep -nE '^(remote|proto) ' current.ovpnאם שני הגיבובים נבדלים רק ברווחים, יש לכם שינוי עיצוב. אם הם נבדלים בנקודות קצה, המפעיל הזיז משהו והקובץ המפורסם הוא הסמכות. אם הקובץ המפורסם ישן מזה שבידיכם, אתם כנראה מסתכלים במטמון, והתשובה המיושנת תשלח אתכם לכיוון הלא נכון.
הוציאו את הרשומה הישנה משימוש ותעדו מה קרה
לאחר אימות תחליף עובד, מחקו את הפרופיל הישן במקום לשמור אותו כגיבוי. רשומה מיושנת שמתחברת חצי היא מלכודת: היא תיבחר בזמן תקלה, היא תיכשל לאט, והאדם שמאתר את התקלה יבלה את עשר הדקות הראשונות בקובץ הלא נכון.
נהלו רשומה קצרה מחוץ לתצורה: התאריך, נקודת הקצה הישנה, שלב הכשל ומה החליף אותה. צמתים ציבוריים מתחלפים, ושישה שבועות לאחר מכן אותה שאלה מגיעה עם אדם אחר. שורה אחת בקובץ הערות עונה עליה בשניות.
אם מרשת אחת כל צומת נכשל באותה דרך ומרשת אחרת אף אחד, הפסיקו לערוך פרופילים והביטו בנתיב המקומי. פורטל שבי, טווח פורטים מסונן או פרוקסי מיירט יפיקו שגיאות זהות אצל ספקים לא קשורים, והתבנית הזו היא האות היחיד שהבעיה מעולם לא הייתה הקובץ.