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

מה משמעות שלושת החלקים של השורה

התאריך והשנייה השלמה באים קודם, ו-us= נושא את השארית מתחת לשנייה אחת. הערך 12345 הוא שנים עשר אלף שלוש מאות ארבעים וחמש מיקרושניות, כלומר 0.012345 שניות, כך שהשורה מתארת 09:15:30.012345 כשהשעה המודפסת היא 09:15:30. המונה מתחיל מחדש בכל שנייה חדשה, כך ששורה מאוחרת יותר יכולה להדפיס שבריר קטן יותר בלי שאף שעון ילך אחורה. רק חותמת הזמן המלאה מסדרת אירועים.

2026-11-02 08:41:07 us=4820

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

הריפוד הוא המלכודת. us=42 הוא ארבעים ושתיים מיקרושניות, נכתב .000042, לא .42. רפדו את המספר השלם לשש מקומות משמאל לפני ההמרה, והערך מפסיק להיראות כמו שבר עשרוני של הספרות שאתם רואים.

המרת שורה בלי מחשבון

קחו את השנייה המודפסת כבסיס והתייחסו אל us= כאל השבר. עבור 09:15:30 עם us=12345 הצורה העשרונית היא 09:15:30.012345; עבור us=900000 היא 09:15:30.900000. הספרות שאחרי הנקודה העשרונית הן המספר השלם המרופד, אף פעם לא המספר השלם חלקי אלף. כתיבת הצורה בת שש הספרות תחילה מונעת את רוב הטעויות.

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

כאשר השדה חסר מהיומן

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

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

grep -nE '^[[:space:]]*verb[[:space:]]+[0-9]' /etc/openvpn/server.conf

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

מה שש ספרות לא מוכיחות

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

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

ערך us= טרי לא מוכיח שלקוח חדש התחבר, וערך חוזר לא מוכיח אירוע כפול. שדות העמית והחיבור עונים על השאלות האלה.

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