איך לנתב אפליקציה אחת דרך VPN בלי כל המכונה
שום שולחן עבודה לא מנוהל לא מציע מתג VPN לכל תהליך. בחרו את השכבה שמסננת את התעבורה: socket מכווץ, כלל UID, פרופיל חומת אש או קפיצת SOCKS.
סמל הלקוח אומר מחובר, הממשק קיים, והאפליקציה עדיין לא מגיעה לשום דבר. השילוב הזה נפוץ, כי ממשק וירטואלי יכול להישאר קיים בזמן שהעמית המרוחק, הכתובות או המסלולים שלו חסרים. ip link הוא הכלי הראשון הנכון, והוא גם הקל ביותר לקריאה יתר. דגלים ומונים מתארים שכבה אחת, והשכבות שמעליהן נכשלות באופן בלתי תלוי. זה גם הכלי שאנשים מצטטים כשרוצים להוכיח שהמנהרה למעלה, וזו בדיוק הטענה שהוא לא יכול לתמוך בה לבדו.
קראו את הממשק לפני שאתם קוראים את הסמל
התחילו עם ip -details link show dev tun0 כמתואר במדריך ip-link, והחליפו את הממשק שהלקוח שלכם באמת מחזיק במקום השם המקובל. דגלים, סוג, MTU וזהות הממשק הם תצפיות שימושיות. ניסוח המצב של ממשק וירטואלי לא חייב להתנהג כמו חיווי נשא של כבל פיזי, לכן התייחסו ל-UP כהצהרה על הממשק ולא על המנהרה.
ההבחנה הזו מסבירה את המקרה המבלבל ביותר: ממשק שנשאר קיים בזמן שהצד המרוחק מתחבר מחדש או אינו נגיש.
הגדרות התמדה יכולות להשאיר את הקישור בדיוק כדי שההתחברות מחדש לא תבנה אותו מחדש, כלומר נוכחות אינה בריאות.
הוסיפו מונים ובקשה שאמורה להשתמש בהם
השתמשו בתצוגת הסטטיסטיקה הנתמכת, ip -s link show dev tun0, ורשמו את מוני החבילות והבתים בשני הכיוונים. אחר כך צרו בקשה בלתי מזיקה שאמורה לעבור בממשק והשוו את הכיוון הרלוונטי. בקשה שלקחה את המסלול הישיר של אפליקציה אחרת לא תזיז את המונים האלה, וזו מטרת התרגיל.
אם מונה השידור זז ומונה הקליטה לא, החבילה יצאה ושום דבר לא חזר. זו בעיה שונה מממשק שלא העביר דבר מעולם. אם שני המונים זזים והאפליקציה עדיין נכשלת, התקלה נמצאת מעל הממשק, וזה התקדמות ולא מבוי סתום.
קחו את הקריאה פעמיים, פעם לפני ופעם אחרי, ולא תסמכו על צילום מצב אחד.
כתובות ומסלולים הם שלבים נפרדים
קישור יכול להתקיים בלי הקידומת, בלי תצורת הפותר או בלי המסלול שהאפליקציה צריכה. בדקו את הכתובת עם ip address show dev tun0, אחר כך בדקו איזה מסלול היעד יבחר עם ip route get עבור היעד בפועל. שלוש התצפיות האלה עונות על שלוש שאלות שונות, ורק האחרונה עוסקת בהעברה.
ב-IPsec, מדיניות אבטחה ומצב שיוך עשויים גם הם להיות חשובים, ולא כל עיצוב IPsec מופיע כממשק tun פשוט. חיפוש אחר התקן tun שמעולם לא היה אמור להתקיים הוא דרך מהירה להגיע למסקנה שגויה.
רשמו את השם המדויק, מרחב השמות והזמן עם כל פלט שאתם שומרים, כי אותו שם לכאורה במכולה אחרת או בהפעלה משוחזרת מייצג הקשר אחר לגמרי.
אל תמחקו מה שלא זיהיתם
ממשק לא מוכר אינו מיושן אוטומטית. זהו את הבעלים לפני שאתם מסירים משהו, והשתמשו בפירוק המתועד של הלקוח או בתצורה המנוהלת כשההסרה באמת מכוונת. מחיקת מנהרה חיה כדי לראות מה יקרה היא בדיקה שעונה על שאלה שאיש לא שאל.
אם הממשק שייך לזמן ריצה של מכולות או למרחב שמות רשת שלא יצרתם, הבעלים נמצא פקודה אחת משם וכדאי למצוא אותו קודם.
הזהירות הזו חלה גם על ip link set down, שנראה הפיך ולעיתים קרובות אינו.
מה הבדיקה אמורה להשאיר לכם
בדיקה טובה מסתיימת בארבע עובדות: שם הממשק ומרחב השמות, הדגלים וה-MTU שלו, הפרש המונים מבקשה אמיתית, והמסלול והכתובת שהאפליקציה באמת צריכה. כשהן כתובות, הצעד הבא ברור ושייך לשכבה מסוימת. בלעדיהן, כל שינוי לאחר מכן הוא ניחוש עם תוכנית חזרה לאחור.
השוו את ארבע העובדות האלה לאותן ארבע מהפעלה שעובדת. אם שם הממשק ומרחב השמות תואמים אבל הפרש המונים אפס, הבקשה מעולם לא הגיעה למנהרה. אם הפרש המונים תקין והמסלול מצביע למקום אחר, המנהרה תקינה והניתוב לא. ההשוואה הזו היא מה שהופך ערימת פלט להחלטה.
שמרו את הפלט עם הכרטיס, כי השוואה מאוחרת מועילה רק אם רואים מה השתנה.
ואז סגרו את המעגל בבדיקת האפליקציה שוב, כי הממשק אף פעם לא היה הדבר שמעניין את המשתמש.