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

שקע אחד, מחזיק אחד

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

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

What you needMechanism that fitsWhat it cannot do
Periodic list of connected clientsStatus file written on an intervalDeliver events as they happen
Interactive prompts and session controlThe single management connectionServe two controllers at once
Multiple consumers of eitherOne owner process that fans outExist without you writing it

החליטו איזה רכיב מחזיק בשליטה

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

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

השתמשו בתמונות מצב של סטטוס עבור האספנים

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

status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix

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

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

פריסה היא תכנון, לא מצב

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

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

התייחסו לשקע כאל הרשאה, לא כאל מדדים

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

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

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