OpenVPN דרך פרוקסי HTTP: קראו קודם את תשובת CONNECT
פרוקסי CONNECT מעביר בתים, ולכן שני הקצוות זקוקים ל-TCP. קראו 407, 403 ו-503 לפני שאתם מאשימים תעודות, והשאירו את אימות השרת פעיל.
כוונו לקוח VPN לפרוקסי HTTP ארגוני, והעובדה השימושית הראשונה היא שהפרוקסי אינו מדבר בפרוטוקול של ה-VPN. הוא פותח חיבור TCP רגיל לכתובת שציינתם ואז זז הצידה, ומשאיר ללקוח ולשרת לנהל את החלפתם שלהם דרך הזרם הזה. כל מה שהלקוח צריך, מסוג התעבורה ועד למאזין של השרת, חייב להתאים לסידור הזה. שתי אי-התאמות מסבירות את רוב הכשלים: פרופיל UDP המכוון לפרוקסי CONNECT, ותשובת פרוקסי שנחשבת בטעות לשגיאת VPN.
מה הפרוקסי נושא ומה לא
הפרוקסי הוא רק שלב תעבורה. הוא אינו הופך לפרוקסי של הדפדפן שלכם, אינו שומר במטמון את האתרים שאתם מבקרים בהם דרך המנהרה, ואינו רואה את התעבורה הפנימית אלא אם מישהו הגדיר בדיקה במכוון. המנהרה שהוא פותח אטומה לו כברירת מחדל.
משמעות הדבר גם היא שהפרוקסי אינו יכול לתקן שרת שאין לו מאזין מתאים. הרשאה להגיע ליעד ושירות שמאזין ביעד הזה הם שני עובדות נפרדות, ורק הראשונה שייכת למנהל הפרוקסי.
המוביל חייב להיות TCP בשני הקצוות
פרוקסי CONNECT רגיל מעביר רק זרם בתים , ולכן הלקוח חייב להשתמש בתעבורת זרם. קטע לקוח למקרה הזה נראה כך:
proto tcp-client
remote vpn.example.net 1194
http-proxy proxy.corp.example 3128צד השרת זקוק למאזין TCP אמיתי בפורט הנקוב בשורת remote. החלפת proto udp ב-proto tcp-client בפרופיל יוצרת לקוח שמצפה לזרם; היא אינה יוצרת את הזרם בצד השני. אם אותו שרת עונה גם ב-UDP בפורט הזה, זהו מאזין אחר, לא מצב שני של אותו מאזין.
היכן שקיימת מופע TCP נפרד, התקן המנהרה, מאגר הכתובות והניתוב שלו הם משאבים משל עצמם. העתקת תצורה עובדת ושינוי מילת התעבורה משאירה את המשאבים האלה מצביעים למופע המקורי, מה שמייצר חיבור שמאמת ואז אינו מנתב דבר.
קראו את תשובת הפרוקסי לפני תוצאת ה-VPN
ההחלפה הראשונה של הלקוח היא שורת בקשה שמציינת את מארח היעד ואת הפורט. התשובה לשורה הזו אומרת לכם אם קיים בכלל זרם בתים, והיא מגיעה לפני שנבדקת תעודה או פרטי התחברות כלשהם:
CONNECT vpn.example.net:1194 HTTP/1.1
Host: vpn.example.net:1194| Proxy reply | What it means | Where to look next |
|---|---|---|
407 Proxy Authentication Required | The proxy wants its own credentials | The client's proxy auth options, not the VPN account |
403 Forbidden | The destination or method is not permitted | The proxy's access policy for that host and port |
503 Service Unavailable | The proxy could not complete the upstream connection | The proxy's own logs and the server's listener |
תשובה במחלקה 200 ל-CONNECT פירושה שהזרם קיים. היא אינה אומרת דבר על כך אם תעודת השער מהימנה, אם המפתח המשותף תואם או אם חשבון המשתמש תקף. הבדיקות האלה מתרחשות לאחר מכן, בתוך הזרם, והן נכשלות עם ההודעות של הלקוח עצמו ולא עם שורת מצב של HTTP. חפשו ביומן הלקוח את OpenVPN האירוע הראשון אחרי לחיצת היד עם הפרוקסי, ולא את השורה האחרונה לפני שהחלון נסגר.
פרטי ההתחברות של הפרוקסי ושל ה-VPN הם לעיתים קרובות זהויות שונות בידי צוותים שונים. 407 אינו סיסמה שגויה בחשבון ה-VPN, ותעודה שנדחתה אינה בעיית הרשאות של הפרוקסי.
מה CONNECT אינו חושף
מנהרת CONNECT מפורשת אינה יירוט. הפרוקסי מעביר בתים ואינו מסיים את הפעלת ה-TLS של ה-VPN, ולכן אימות תעודת השרת בידי הלקוח נשאר משמעותי וצריך להישאר פעיל. כיבוי האימות כדי לעבור פרוקסי פותר בעיה אחרת מזו שלכם.
קיימים הסדרים נפרדים שבהם ארגון מסיים ובודק TLS במכוון. אלה דורשים תצורת אמון משלהם והחלטת מדיניות משלהם, והם אינם מה ששורת http-proxy רגילה מבקשת.
המחיר של TCP בתוך TCP
העברת המנהרה מעל TCP שומרת על הזרם החיצוני מסודר ועם שליחה חוזרת, והתעבורה הפנימית היא בדרך כלל גם TCP. שני מנגנוני ההתאוששות אינם מתואמים, ולכן מקטע אבוד אחד יכול לעצור כל מה שחולק את הזרם החיצוני הזה עד שישלח שוב. זהו ויתור אמיתי למען תאימות, לא שדרוג חינם.
השתמשו בנתיב הפרוקסי כאשר הרשת אינה משאירה לכם חלופה, והעדיפו נתיב UDP ישיר היכן שהמדיניות מאפשרת. בכל מקרה, אחרי שינוי ודאו שאותו פרוקסי, אותו יעד ואותו פרופיל מגיעים לשלב הבא; דפדפן שטוען דף בכתובת הזו מפעיל פרוטוקול אחר ואינו מוכיח דבר על המנהרה.