נתקו פרופיל OpenVPN GUI אחד, לא את כל המנהרות
מנהרה שמנוהלת על ידי GUI דורשת פקודת GUI, ומנהרה שמנוהלת על ידי שירות דורשת שליטה בשירות. זהו איזו תוכנית מחזיקה בפרופיל לפני שתכתבו סקריפט.
סקריפט ניתוק נכשל בדרך כלל מסיבה אחת: הוא פונה לבעלים הלא נכון. מנהרה שמנוהלת על ידי OpenVPN GUI של הקהילה שייכת להפעלה של אותו GUI, מנהרה שהופעלה על ידי שירות Windows שייכת לשירות, ו-OpenVPN Connect לא שייכת לאף אחד מהם. עברו על הבדיקות האלה לפי הסדר ועצרו כשהבעלים אינו ברור. שליחת פקודת kill משום שהבעלים היה מעורפל היא בדיוק הדרך שבה ניתוק של פרופיל אחד הופך להפסקה של כל האתר.
עבור חיבור שמנוהל על ידי GUI, הפקודה השימושית היא הודעה ל-GUI, ולא אות ל-openvpn.exe.
ראשית, זהו את הבעלים
הביטו איזו תוכנית באמת מציגה את מצב החיבור לפני שתכתבו משהו. סמל במגש המערכת פירושו שהפעלת ה-GUI היא הבעלים. רשומת שירות פירושה שהשירות הוא הבעלים. חלון יישום נפרד עם רשימת פרופילים משלו פירושו שאף אחד מהם, וחל עליו הממשק שלו עצמו, הספציפי לגרסה.
בדקו גם את החשבון ואת הפעלת שולחן העבודה. אין להניח שמשימה מתוזמנת שרצה כמשתמש אחר, או בהפעלה לא אינטראקטיבית, שולטת ב-GUI שאדם מחובר רואה. אי ההתאמה הזו מייצרת פקודה שמסתיימת באופן נקי ולא משנה דבר, וזהו סוג הכשל היקר ביותר לאיתור מתוך יומן.
לאחר מכן שלחו את הניתוק של הבעלים עצמו
כשה-GUI מותקן בנתיב שבדוגמה וקיים פרופיל בשם office, הפקודה כולה היא שורה אחת:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect officeהחליפו אותה בנתיב ההתקנה האמיתי שלכם ובשם התצורה המדויק, כולל אותיות גדולות וקטנות כפי שה-GUI מציג אותן. תיעוד הפקודות של הפרויקט מפרט את בקרות ה-GUI הנתמכות, והדוגמה הזו שייכת ל-OpenVPN GUI בלבד — היא אינה פקודה לכל יישום שיש בו OpenVPN בשמו.
עבור מנהרה בבעלות שירות, הבקרה הנכונה היא השירות, ולא קובץ ההרצה של ה-GUI. בדקו את השירות המותקן ואת הפרופילים שהוא מנהל לפני שתעצרו משהו, משום שעצירה יכולה להפיל כמה מנהרות בבת אחת ולא תקבלו תוצאה לכל פרופיל בנפרד.
ודאו ששום דבר אחר לא נופל
ה-GUI מתעד גם פקודה disconnect_all, וההיקף שלה הוא בדיוק הסיבה שהיא הכלי הלא נכון לסקריפט שאמור לעצור רק את office. אם מתחשק לכם להשתמש בה לשם פשטות, שאלו מה עוד מחובר באותה מכונה ואיך המשתמש יבחין בזה.
taskkill /F /IM openvpn.exe גרוע יותר בשתי דרכים. הוא בוחר תהליכים לפי שם קובץ ההרצה, והוא כופה סיום, כך שהוא אינו מבטא לא שם פרופיל ולא את רצף הניתוק הרגיל של הבעלים. לקרוא לזה כיבוי מסודר מסתיר את שתי הבעיות מאחורי קוד יציאה אחד.
בכל נתיב שתבחרו, בדקו את היקף ההשפעה לפני השינוי: פרטו את הפרופילים המחוברים, רשמו אילו מהם אמורים לשרוד, ובדקו אותם שוב לאחר מכן.
אמתו את המצב, לא את קוד היציאה
לאחר בקשת הניתוק, קראו את מצב החיבור הנקוב דרך הבעלים שלו במקום לסמוך על ערך ההחזרה של הפקודה. אם הצעד הבא זקוק לרשת לאחר הפירוק, המתינו לשינוי המצב הזה עם פסק זמן מפורש במקום להניח שהניקוי הסתיים כשהתהליך חזר. סקריפט שמתחרה בפירוק ייכשל לסירוגין והאשמה תיפול על ה-VPN.
אם המצב לא משתנה לעולם, סביר להניח שהבעלים אינו זה שאליו פניתם. בדקו שוב את ההפעלה ואת החשבון לפני שתעלו לפקודה חזקה יותר.
מה לרשום ביומן
רשמו את שם הפרופיל, את הבעלים שאליו פניתם ואת הקשר ההפעלה, וכן את המצב שהתקבל. אל תשפכו את התצורה המלאה או את פרטי ההתחברות ליומן המשימה, ואל תרשמו את שורת הפקודה אם היא מכילה נתיב לקובץ עם סודות.
הודעת שגיאה שמציינת את הפרופיל ואת ההקשר מספיקה כדי שהאדם הבא ישחזר את הבעיה. יומן שרושם רק קוד יציאה כללי מחזיר אותם להתחלה, ושם בדיוק הניחושים מתחילים מחדש.