پروتکل 47 در برابر پورت TCP 47: دو سرآیند، دو قاعده
شماره پروتکل و پورت در دو سرآیند متفاوت زندگی میکنند، پس یک قاعده نمیتواند جای دیگری را بگیرد. PPTP این دو را جدا میکند و کادر پورت نمیتواند GRE را بیان کند.
شبکههای هتل و دیوارهای آتش کنفرانس اغلب کادر مجوز سفارشی نشان میدهند و کسی 47 را در آن تایپ میکند به امید اینکه PPTP کار کند. قاعده ساخته میشود، تونل همچنان شکست میخورد و تلاش بعدی شماره دیگری به کار میبرد. خطا در خود بسته است: IPv4 یک فیلد پروتکل دارد که نام آنچه پس از سرآیند IP میآید را میگوید، در حالی که TCP و UDP فیلدهای پورت دارند که فقط وقتی وجود دارند که داخل یکی از آن سرآیندها باشی. اینها دو املای یک مجوز نیستند.
سرآیند IPv4 پروتکل بعدی را نام میبرد
فیلد پروتکل یک بایت در سرآیند IPv4 است و شمارهای را نگه میدارد که بار مفید را توصیف میکند: 6 برای TCP، 17 برای UDP، 47 برای GRE، 50 برای ESP. هر چیزی که بستهها را فیلتر میکند پیش از نگاه عمیقتر آن مقدار را میخواند، چون سرآیند عمیقتر فقط پس از شناخته شدن نوع معنا دارد. بعداً در گفتوگو یک پورت را عوض کن، این فیلد تکان نخورده است.
پس قاعدهای که در برابر پروتکل 47 نوشته شده لایه IP را توصیف میکند. هیچ پورتی در تصمیم مشارکت ندارد.
پورتها درون TCP و UDP وجود دارند، جای دیگری نه
پورتها شناسههای شانزدهبیتی درون سرآیندهای TCP و UDP هستند و کارشان جدا کردن گفتوگوهایی است که یک نشانی را شریکاند. سرآیند GRE یک مقدار نوع پروتکل، اغلب EtherType، بههمراه کلیدهای اختیاری برای چندگانگی حمل میکند. بنابراین عبارت پورت 47 چیزی را نام نمیبرد که یک بسته GRE بتواند با آن مطابقت کند.
رابطهای دیوار آتش در مقدار نمایش این جزئیات متفاوتاند. برخی شماره پروتکل میپذیرند، برخی فهرستی نامدار ارائه میدهند و چندتایی فقط TCP یا UDP با پورت میپذیرند.
PPTP هر دو لایه را همزمان به کار میبرد
PPTP روشنترین نمونه است چون کارش را آگاهانه میان دو لایه تقسیم میکند. اتصال کنترل یک نشست TCP به پورت 1723 است و مسیر داده GRE، پروتکل 47، است بدون اینکه هیچ پورتی در جایی دخیل باشد. دیوار آتشی که 1723 را مجاز میکند و چیزی دیگر را نه، میگذارد مذاکره آغاز شود و سپس بار مفید را دور میریزد. تونل بهجای شکست در اتصال، پس از احراز هویت معلق به نظر میرسد و به همین دلیل علامت غالباً بهعنوان مشکل گذرواژه گزارش میشود.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
هنگام نوشتن قاعده، دو سطر را جدا بخوان و هر کدام را با نحو فروشنده بررسی کن. یک سطر پورت میخواهد، دیگری شماره پروتکل میخواهد و هیچ ورودی واحدی هر دو را پوشش نمیدهد.
چرا صفحه بازفرست پورت نمیتواند GRE را بیان کند
فرم بازفرستی که فقط TCP و UDP میپذیرد نمیتواند GRE را توصیف کند، هر نامی که فرم داشته باشد. ترجمه نشانی دشواری دومی میافزاید، چون GRE پورت ندارد و مترجم باید بهجای آن شناسه فراخوانی را دنبال کند. برخی روترهای خانگی دستیاری دارند که این کار را انجام میدهد؛ بسیاری ندارند و هیچ ورودی مجوز TCP افزودهای آن رفتار را ایجاد نخواهد کرد.
جایی که تونل مدرن نیاز واقعی است، طرحی را انتخاب کن که آگاهانه از TCP یا UDP استفاده میکند نه اینکه امیدوار باشی مترجم درست حدس بزند.
کپسولهسازی تعیین میکند فیلتر چه میبیند
کپسولهسازی بسته بیرونی را تغییر میدهد و بسته بیرونی همان چیزی است که قاعده با آن مطابقت میکند. ESP بومی پروتکل 50 است، در حالی که عبور از NAT، ESP را درون UDP 4500 میپیچد تا از ترجمه نشانی جان سالم به در ببرد. فیلتری که UDP 4500 را مجاز میکند هرگز پروتکل 50 را نمیبیند و فیلتری که برای پروتکل 50 نوشته شده هرگز با شکل پیچیده مطابقت نمیکند.
بپرس کلاینت و دروازه بر کدام کپسولهسازی توافق کردهاند، سپس قاعده را دقیقاً برای همان شکل بیرونی بنویس و نه بیشتر.
قاعده را طوری بنویس که کسی بتواند بررسیاش کند
هر قاعده را بهصورت خانواده نشانی، پروتکل بیرونی، پورتهای انتقال اگر باشند، جهت و هر دو نقطه پایانی بیان کن. بازبین میتواند آن جمله را با یک ضبط بسته مقایسه کند و به داوری برسد. دستور باز کردن 47 را هیچکس نمیتواند بررسی کند و به همین دلیل سالها در دفترچههای رویه زنده میماند.
آزمونی را اضافه کن که آن را اثبات میکند: هنگام ضبط روی رابط بیرونی متصل شو و پروتکل و پورت بیرونیای را که واقعاً در رد ظاهر میشوند تأیید کن.