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

ניתוב, DNAT ו-SOCKS משנים דברים שונים

מסלול לפי מדיניות כותב מחדש החלטה בשכבה 3. שתי שורות מספיקות כדי לשלוח את התעבורה של לקוח אחד אל הקפיצה הבאה שנבחרה:

ip route add default via 10.50.0.2 table 101
ip rule add from 10.77.0.2 lookup 101

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

SOCKS5 מתחיל בבית גרסה, ברשימת שיטות, בחילופי אימות ובבקשה שמציינת את היעד. אלה נתוני יישום. שום רשומת ניתוב ושום יעד netfilter לא מייצרים אותם, וזו ההשוואה בשורה אחת: ניתוב בוחר מסלול, SOCKS מבקש משרת ליצור חיבור שני.

מקרה ראשון: היישום יכול לדבר SOCKS בעצמו

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

curl --socks5 10.50.0.2:1080 https://docs.example.com
curl --socks5-hostname 10.50.0.2:1080 https://internal.example.com

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

מקרה שני: מתאם שממיר זרימות IP לשיחות פרוקסי

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

קראו את התיעוד שלו לפני שאתם סומכים עליו עם תת-רשת שלמה. מתאמים רבים נושאים TCP היטב ומטפלים ב-UDP רק דרך אגודת UDP של SOCKS5, ואף אחד מהם לא הופך ICMP לתעבורת פרוקסי, כך ש-ping מוצלח לא אומר דבר על מסלול הפרוקסי. DNS הוא המלכודת האחרת: אם המתאם פותר שמות מקומית, רשומות פנימיות בלבד נפתרות לתשובה שגויה, או לכלום.

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

מקרה שלישי: המארח הוא למעשה שער מנותב

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

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

ss -ltnp 'sport = :1080'
tcpdump -ni eth0 -X 'tcp port 1080'

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

בחרו את השכבה עם ארבע שאלות

האם לתוכנית יש הגדרת פרוקסי? השתמשו בה ועצרו שם. האם התעבורה כוללת UDP או ICMP שחייבים לשרוד? רק שער מנותב או שער NAT נושא ICMP, ו-UDP זקוק לאגודת SOCKS5 ששני הצדדים תומכים בה. האם כל תהליך במכונה חייב להיות מכוסה, כולל כאלה שאינכם יכולים להגדיר? אז אתם זקוקים למתאם שמחזיק בממשק ומסיים זרימות. האם אתם יכולים לקחת על עצמכם גם את הניתוב, ה-DNS והחריגות למניעת לולאות שלו? אם לא, השער הפשוט יעלה פחות לתפעול.

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

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