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

המחזור שמסתיר את השגיאה הראשונה

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

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

לפני שתשנו משהו, תפסו מחזור שלם אחד. רשמו את הכתובת המרוחקת, את שלב ה-TLS הנקוב בשגיאה ואם התהליך יוצא בכלל.

מנגנון הניסיון החוזר שמאחורי הלולאה

ניסיון חוזר הוא ברירת המחדל מפני שכמה פסקי זמן לא קשורים חולקים את אותו מנגנון. connect-retry קובע את המרווח בין ניסיונות התחברות, connect-retry-max יכול להגביל באיזו תדירות כל רשומה מרוחקת מנוסה, ו-resolv-retry שולט בחיפושי שמות חוזרים. כשל במשא ומתן TLS מגיע למנגנון הזה כאירוע תעבורה, ולכן הלקוח מתזמן ניסיון נוסף במקום לדווח. ברירת המחדל מועילה לקישור לא יציב ומזיקה לפגם שלא יכול להתרפא.

האפשרות --tls-exit משנה רק את מקרה המשא ומתן. המדריך מתאר אותה כיציאה בכשל משא ומתן TLS, שצר יותר מאשר יציאה בכל שגיאה. פסקי זמן, כשלי פותר ופניות אימות נדחות שומרים על ההתנהגות שלהם.

לגרום ללקוח לצאת בכשל TLS

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

המפקח מחליט אם היציאה הזו גלויה. יחידת systemd עם Restart=always או Restart=on-failure מפעילה את הלקוח מחדש, ולכן הלולאה נמשכת והאפשרות נראית כאילו אינה עושה דבר. בדקו את המדיניות לפני שתאשימו את הלקוח:

systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager

Restart=no מאפשר לתהליך להישאר למטה, ו-Restart=on-failure עדיין מפעיל מחדש אחרי מצב שאינו אפס. אם אתם רוצים שהכשל יהיה גלוי אבל השירות יתאושש מקריסות לא קשורות, הגדירו Restart=on-failure והשתמשו ב-StartLimitBurst וב-StartLimitIntervalSec כדי לעצור את סערת ההפעלות מחדש. אחר כך קראו את מצב היחידה כדי לאשר את קוד היציאה האחרון: systemctl status מדווח עליו, והיומן שומר את השגיאה הראשונה מעל ההפעלות מחדש.

כתבו את ההחלטה ביחידה או בהערות הפרופיל. פרופיל שיוצא בכשל TLS נראה כמו תאונה לאדם הבא אלא אם הסיבה נרשמה. ציינו אילו כשלים צריכים לעצור את התהליך ואילו צריכים לנוסות שוב.

להוכיח את זה עם נקודת קצה חד-פעמית

כדי לראות את ההתנהגות לפני שתסמכו עליה, העתיקו את הפרופיל והפנו את העותק לנקודת קצה שמקבלת חיבור TCP אבל אף פעם לא מדברת OpenVPN. מאזין שעונה ואז שותק מספיק. עם tls-exit, הלקוח אמור להסתיים כשהלחיצה נכשלת; בלעדיה, אותו פרופיל אמור להמשיך להסתובב. השתמשו בעותק, ולעולם לא בפרופיל העובד.

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

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

שלבים שהאפשרות הזו לא מגיעה אליהם

דחיית אימות היא שלב מאוחר יותר. אם השרת מעריך את החשבון ודוחה אותו, TLS כבר נוהל, ולכן tls-exit אינו פועל. הגדרות הניסיון החוזר של האימות הן המקום הבא להסתכל בו, והסיבה של השרת חשובה יותר מהשורה האחרונה של הלקוח. סיסמה שגויה ותעודה חסרה יכולות לייצר הודעות דומות בצד הלקוח.

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

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

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