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

הפרידו את הדרישה לפני קריאת כל רשימת פורטים

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

LineWho starts itWhat can block itQuestion for the provider
Outbound destinationYour applicationEgress filter on the exit nodeIs this protocol and port allowed to that destination?
Inbound publishingA remote peerNo mapping, no public address, short lifetimeWhich protocol, which external port, and how long does the mapping last?
Tunnel transportYour client to the gatewayThe access network drops that protocolDoes the client offer a fallback the local network permits?

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

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

גישה יוצאת נכשלת במדיניות היעד, לא במנהרה

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

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

מדדו לפני שמתווכחים. הריצו את אלה במחשב שיעמוד מאחורי המנהרה, פעם כשהמנהרה כבויה ופעם כשהיא פועלת:

ss -lntup | sort
nc -vz -w 3 203.0.113.10 443
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://example.com

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

פרסום נכנס דורש מיפוי, כתובת ותוחלת חיים

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

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

אמתו קודם את החצי המקומי, כי מאזין מת ונתיב כניסה חסום נראים מבחוץ אותו דבר:

ss -lntup | grep -E ':(8080|51820)\b'
python3 -m http.server 8080 --bind 0.0.0.0
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080

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

התעבורה של המנהרה עצמה היא שאלה נפרדת

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

ClientOuter transportDefault portWhen it helps
OpenVPNUDP1194Default mode; needs outbound UDP to pass
OpenVPNTCP443UDP is dropped and TCP 443 is not
WireGuardUDP51820Short handshake; there is no TCP mode
IKEv2/IPsecUDP500 and 4500Mobile clients; 4500 carries NAT traversal

רשת שמשליכה UDP יוצא תקבל מנהרת TCP 443 ותדחה מנהרת UDP, ולכן מצב גיבוי שייך לדף הדרישות. שינוי הנשא אינו מזיז פורט יישום בתוך המנהרה ואינו מרחיב מדיניות יעד; אלה נשארים בשורות שלהם.

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

ping -M do -s 1400 203.0.113.10
ping -M do -s 1372 203.0.113.10

ב-Windows אותה בדיקה היא ping -f -l 1400 203.0.113.10. הגדירו את MTU המנהרה מתחת לגודל הגדול ביותר שעובר, ואז בדקו שוב את ההעברה שנכשלה.

אמתו את שלוש השורות לפני שאתם משלמים על תוכנית

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

ss -lntup | sort
nc -vz -w 3 203.0.113.10 443
python3 -m http.server 8080 --bind 0.0.0.0
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080
ping -M do -s 1400 203.0.113.10

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

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

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