הפכו טווח IP מהכתובת הראשונה לאחרונה למסלולי VPN מדויקים
טווח מהכתובת הראשונה לאחרונה לעיתים רחוקות מתאים לתחילית אחת. הפכו אותו לבלוקי CIDR מדויקים כדי שמסלול לא יתפוס יעדים מחוץ לטווח.
מישהו נותן לכם כתובת ראשונה ואחרונה ומבקש מסלול VPN. המהלך המפתה הוא לבחור את התחילית הקצרה ביותר שמכילה את שני הקצוות, ומהלך זה מוסיף בשקט יעדים שאיש לא ביקש. לבלוק CIDR תמיד יש גודל של חזקה של שתיים וכתובת התחלה מיושרת אליו, ולכן טווח שרירותי בדרך כלל דורש יותר מאחד. עברו על הטווח, חלקו אותו בדיוק, ואז בדקו את הכתובות ממש מחוצה לו.
התחילו מהטווח, לא מהתחילית
רשמו את הכתובת הראשונה ואת הכתובת האחרונה לפני שתכתבו כל דבר אחר. הזוג הוא הדרישה; תחילית היא רק ביטוי אפשרי אחד שלו, ולפעמים שגוי. שני מספרים גם הרבה יותר קלים לבדיקה ממסכה.
טווח מיושר מתקפל לבלוק אחד. טווח לא מיושר מתפרק לכמה, והפירוק מדויק ולא מקורב. מה שאסור לכם לעשות הוא לעגל החוצה ולקרוא לזה מספיק קרוב, כי הכתובות הנוספות מקבלות את המדיניות שהמסלול נושא.
שני כיווני השגיאה חשובים. עבור מסלול אל תוך המנהרה, כתובות נוספות נמשכות אל תוך ה-VPN. עבור חריגת עקיפה, כתובות נוספות מדלגות עליה. אף אחת מהתוצאות אינה נראית בטבלת מסלולים שמציגה רק את התחילית שהתקנתם.
מקרה ראשון: הטווח במקרה מיושר
קחו 198.51.100.64 עד 198.51.100.127. הכתובת הראשונה מיושרת על גבול של 64 כתובות והטווח הוא בדיוק 64 כתובות, ולכן /26 יחיד מתאר אותו בלי שום שארית.
זה המקרה הקל וכדאי לזהות אותו, כי הוא אומר שהדרישה כנראה נכתבה על ידי מישהו שכבר חשב בתחיליות. הוא גם אומר שהבדיקה קצרה: ודאו שהגודל הוא חזקה של שתיים ושההתחלה היא כפולה של הגודל הזה.
טווחי תיעוד יוצרים דוגמאות טובות דווקא מפני שאיש אינו בעליהם. אל תתקינו את הכתובות האלה על מנהרה אמיתית ואל תניחו שטווח שקיבלתם הוא מרחב תיעוד רק מפני שהוא נראה יוצא דופן.
מקרה שני: הוא לא, אז חלקו אותו
כעת קחו 198.51.100.100 עד 198.51.100.107. אלה שמונה כתובות, שהן חזקה של שתיים, אבל 100 אינו כפולה של שמונה. בלוק יחיד בגודל הזה לא יכול להתחיל שם, ולכן הטווח חייב להיות מכוסה ביותר מאחד.
הכיסוי המדויק הוא שני בלוקי /30: 198.51.100.100/30 מכסה 100 עד 103, ו-198.51.100.104/30 מכסה 104 עד 107. שמונה כתובות בסך הכול, דבר לא מחוץ לטווח, והפירוק ייחודי לטווח נתון.
python3 -c "from ipaddress import ip_address, summarize_address_range as s; print(*s(ip_address('198.51.100.100'), ip_address('198.51.100.107')), sep='\n')"
פונקציית הספרייה התקנית עושה את החשבון עבורכם, ותיעוד ipaddress מגדיר מה היא מחזירה. מה שהיא לא עושה הוא לבחור שער, להחליט למי שייכות הכתובות, או להעניק גישה לשירות כלשהו שמאחוריהן.
מדדו מה התחילית הרחבה הייתה תופסת
לפני שתקבלו קיצור דרך, חשבו כמה הוא עולה. /28 שמתחיל ב-198.51.100.96 מכסה 96 עד 111, שהם שש עשרה כתובות במקום שמונה. השמונה הנוספות הן 96 עד 99 ו-108 עד 111, וכל אחת מהן הייתה יורשת את המסלול.
python3 -c "from ipaddress import ip_network as n; w=set(n('198.51.100.96/28')); t=set(n('198.51.100.100/30'))|set(n('198.51.100.104/30')); print(len(w), len(t), sorted(w-t))"
שמונה יעדים נוספים הם מספר מוחשי שאפשר לשים בבקשת שינוי. זה גם המספר שמחליט אם קיצור הדרך מקובל, וזו שאלה של מדיניות ולא של חשבון.
הפרידו בין חשבון לגילוי. טווח שמספק מפעיל הרשת מומר בדיוק. תשובת DNS אחת משירות משתנה אינה מבססת את הטווח המלא או הקבוע של אותו שירות, ושמות לא קשורים יכולים לחלוק כתובת.
התקינו את הקבוצה המדויקת ואמתו את הקצוות
מסרו כל תחילית שנוצרה למי שאחראי על תצורת ה-VPN ותנו לו להתקין אותה דרך המנגנון הנתמך. אם הדרישה צריכה שני רשומות, השאירו שתי רשומות במקום להרחיב אחת כדי לקצר טופס.
sudo ip route add 198.51.100.100/30 via 10.90.0.1 dev tun0 sudo ip route add 198.51.100.104/30 via 10.90.0.1 dev tun0 ip route get 198.51.100.101 ip route get 198.51.100.97
שתי הפקודות האחרונות הן אלה שאנשים מדלגים עליהן. הכתובת הפנימית הראשונה אמורה ללכת במסלול החדש, והכתובת ממש מחוץ לטווח לא. אם שתיהן הולכות באותה דרך, הטווח הורחב איפשהו בין הדרישה לתצורה.
תעדו את הכתובת הראשונה, הכתובת האחרונה והתחיליות שמבטאות אותן. האדם הבא שיבדוק את הכלל יוכל אז להשוות את הדרישה לתצורה בלי לחזור על החשבון, וההבדל בין מסלול מדויק למסלול נוח יישאר גלוי.