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

העוזר והדמון הם אובייקטים שונים

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

במארח systemd, התחל מהיחידה הפעילה ולא מרשימת התיקייה. השם תלוי באריזה: תמונות Debian ו-Raspberry Pi OS חושפות בדרך כלל מופע תבנית כמו openvpn-server@server, בעוד התקנות ישנות יותר משתמשות ב-openvpn@server. שאל את המנהל איזו פועלת במקום לנחש משם קובץ.

systemctl list-units --type=service --all | grep -i openvpn
systemctl cat openvpn-server@server

קרא את ExecStart= בפלט הזה. הוא מציין את הקובץ הניתן להרצה ואת האפשרויות שהמנהל באמת מפעיל, כולל כל --config נתיב; קובץ תצורה שיושב ליד ואליו לא מפנה שום פקודה אינו חלק מהמנהרה הפועלת.

עקוב אחר שרשרת התצורה שהדמון פתר

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

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

systemctl show -p ExecStart --value openvpn-server@server
grep -E '^(config|dev|proto|port|local|log|log-append|status|ca|cert|key|tls-auth|tls-crypt)' /etc/openvpn/server/server.conf

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

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

התאם את היומן לתהליך, לא לשגיאה שאתה זוכר

שני יעדי רישום נפוצים, ורק אחד מהם הוא ה-journal. עם log-append מוגדר, הדמון כותב לאותו קובץ וה-journal שומר מעט מעבר לשורות האתחול. בלעדיו, journalctl הוא מקור האירועים.

journalctl -u openvpn-server@server -n 80 --no-pager

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

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

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

בנייה מחדש של המנהרה אינה שלב אבחוני

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

אותו דבר חל על השבתת tls-auth או tls-crypt, הרפיית verify-x509-name, או ויתור על גורם שני כדי לקבל סטטוס ירוק. מנהרה שמתחברת מפני שהאימות הוסר היא מערכת אחרת, לא מערכת מתוקנת.

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

מה למסור לאדם הבא

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

הסתר נתונים רגישים לפני השיתוף. מפתחות פרטיים, auth-user-pass קבצים, חומר מפתח סטטי וחבילות לקוח מלאות אינם שייכים לכרטיס; שמות אפשרויות וצורת השרשרת מספיקים בדרך כלל לעין שנייה.

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

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