הפרופיל עבד ביום שלישי, וביום שישי הלקוח מסתובב שלושים שניות ומוותר. שום דבר במחשב שלכם לא השתנה. וזו בדיוק הנקודה: תצורה שהורדה מתארת מארח אחד ברגע אחד, ולמפעיל בצד השני אין שום חובה לשמור על התיאור הזה נכון. הפיתוי הוא להתחיל לערוך הגדרות אבטחה עד שהמנהרה תחזור. האינסטינקט הזה הוא הסיבה שאנשים מגיעים להריץ פרופיל עם אימות תעודות כבוי, וזה גרוע יותר מאשר בלי מנהרה בכלל.

הקובץ מתאר רגע, לא חוזה

קובץ תצורה הוא אוסף של הנחות: שם המארח הזה מאזין בפורט הזה עם הפרוטוקול הזה, מציג תעודה שמתאימה לשם הזה, ומקבל את פרטי ההתחברות האלה. כשאיזו מהן מפסיקה להיות נכונה, הקובץ מיושן והתיקון שייך לצד המפעיל של הגבול, לא להגדרות שלכם.

רשימות צמתים ציבוריות מבהירות זאת מטבען. את הצמתים מפעילים מתנדבים, הם מופיעים ונעלמים, כתובות ממוחזרות ופורטים נחסמים על ידי הרשת שהם יושבים מאחוריה. הרשימה היא תמונת מצב שמתחדשת, והעותק בדיסק שלכם הוא צילום של תמונת מצב ישנה יותר.

שירותים מסחריים משתנים לאט יותר, אבל לא אף פעם. רשויות תעודות מתחלפות, מאזין עובר מכתובת משותפת לכתובת ייעודית, פרוטוקול ישן מוסר ורשימת צפנים חדשה נוחתת. כל אחד מאלה בלתי נראה עד שהלקוח שלכם מנסה להתחבר ומקבל תשובה שונה מזו שהקובץ מצפה לה.

קראו את שלב הכשל לפני שאתם נוגעים בהגדרה

הודעת השגיאה אומרת איזו הנחה נשברה, ולכל הנחה תיקון שונה לחלוטין. עריכת צפנים כששם המארח כבר לא נפתר מבזבזת אחר צהריים ולא מלמדת אף אחד דבר.

What happensThe assertion that brokeSupported response
Name never resolvesThe host still exists under that nameGet a current endpoint from the operator
TCP connect times outThe listener is on that port and reachableCheck the current published port, then the local network
TLS or key exchange failsThe peer presents the expected identityCompare the certificate, not the cipher list
Authentication rejectedThe account is still validGet 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

אם שני הגיבובים נבדלים רק ברווחים, יש לכם שינוי עיצוב. אם הם נבדלים בנקודות קצה, המפעיל הזיז משהו והקובץ המפורסם הוא הסמכות. אם הקובץ המפורסם ישן מזה שבידיכם, אתם כנראה מסתכלים במטמון, והתשובה המיושנת תשלח אתכם לכיוון הלא נכון.

הוציאו את הרשומה הישנה משימוש ותעדו מה קרה

לאחר אימות תחליף עובד, מחקו את הפרופיל הישן במקום לשמור אותו כגיבוי. רשומה מיושנת שמתחברת חצי היא מלכודת: היא תיבחר בזמן תקלה, היא תיכשל לאט, והאדם שמאתר את התקלה יבלה את עשר הדקות הראשונות בקובץ הלא נכון.

נהלו רשומה קצרה מחוץ לתצורה: התאריך, נקודת הקצה הישנה, שלב הכשל ומה החליף אותה. צמתים ציבוריים מתחלפים, ושישה שבועות לאחר מכן אותה שאלה מגיעה עם אדם אחר. שורה אחת בקובץ הערות עונה עליה בשניות.

אם מרשת אחת כל צומת נכשל באותה דרך ומרשת אחרת אף אחד, הפסיקו לערוך פרופילים והביטו בנתיב המקומי. פורטל שבי, טווח פורטים מסונן או פרוקסי מיירט יפיקו שגיאות זהות אצל ספקים לא קשורים, והתבנית הזו היא האות היחיד שהבעיה מעולם לא הייתה הקובץ.

מאמרים קשורים