GRE MTU

گاهی اوقات پس از اینکه Tunnel مورد نظرمان را به کمک GRE تنظیم کردیم، با وجود اینکه قادر به Ping کردن یا Telnet به سمت مقابل هستیم اما صفحات و Page های اینترنت را نمیتوانیم باز کنیم یا مثلا FTP کار نمیکند. اما مشکل از کجاست؟

MTU به معنی Maximum Transmission Unit حداکثر دیتای قابل انتقال در یک بسته (Packet) یا فریم است. درون هدر TCP نیز این قابلیت تحت نام MSS یا Maximum Segment Size وجود دارد که برای قراردادن عدد میزان مجاز Data از لایه Application درون هر TCP Segment در نظر گرفته شده. وقتی که از Tunnel یا هر پروتکلی که Overhead روی دیتای IP ما قرار میدهد استفاده کنیم سایز نهایی ممکن است بزرگتر شده و ارتباط دچار مشکل شود.

GRE MTU مشکل

در مثال بالا پس از اینکه کلاینت سعی به برقراری ارتباط را سرور دارد، ارتباط Client با سرور برقرار میشود و در خلال برقراری TCP میزان MSS موردنظر خود را اعلام میکنند. بر این اساس سایز هر Segment در این ارتباط محاسبه میشود. (Packet به دیتا در لایه 3 میگویند در حالی که Segment به دیتای لایه 4 و TCP اشاره میکند که بعدا درون Packet توسط لایه سه قرار میگیرد. مدل OSI را بخاطر داشته باشید) بنابراین در مثال ما Server به توافق میرسد که 1500 بایت را در هر سگمنت به Client ارسال کند. سگمنت را درون پکت قرارداده و به روتر خود ارسال میکند زمانی که قرار است روتر آنرا Encapsulate کند و درون GRE Tunnel قراردهد روتر متوجه میشود که سایز بسته برای قرارگیری GRE زیاد است و باید بجای یک بسته (با توجه به محدودیت MTU) آنرا درون دو IP Packet قراردهد.

از طرفی بیت DF به معنی Dont Fragment روی بسته ست شده پس نمیتواند آنرا Fragment کرده و در دو بسته ارسال کند پس آنرا دور ریخته و ارسال نمیکند اما به فرستنده پیام معروف ICMP را ارسال میکند:

Internet Control Message Protocol (ICMP) type 3 code 4 packet 
(Destination Unreachable; Fragmentation Needed and DF set)

و بسیار معمول است که ICMP را آدم بی کاری این بین بعنوان تمهیدی امنیتی Block کرده باشد و لذا این پیام نرسد. پس از شناخت اشکال ارتباط پیدا کردن راه حل ساده شد چندین کار بعنوان راه حل میتوان انجام داد:

توسط یک  Policy بیت DF را 0 کنیم تا بسته قابل Fragment شدن شود.

 

access-list 169 permit tcp 10.0.0.0 0.255.255.255 any

interface fastethernet0/0

ip policy route-map no-df

route-map no-df permit 10

match ip address 169

set ip df 0

 

Access-List شماره 169 رنج شبکه متصل به روتر را که قرار است داخل تونل رود اما بیت پکت های آن نباید با DF مارک شوند تنظیم میکند.

 

یکی دیگر از راه های حل این مساله تغییر سایز MTU و MSS است:

interface tunnel0

ip tcp adjust-mss 1436

ip mtu 1500

 

این مشکل ممکن است روی پروتکل های دیگر که Encapsulation چند باره دارند برخورد کنید نظیر PPPoE در ADSL که توسط اصلاح MSS و MTU قابل حل است بطور مثال در ADSL تنظیم بالا را بجای تانل درون Interface Dialer انجام میدهیم.

نوشته های مرتبط

این نوشته در IOS Tricks, IP Routing, پاسخ به پرسش ها ارسال شده است. افزودن پیوند یکتا به علاقه‌مندی‌ها.

2 پاسخ به GRE MTU

  1. طاها می‌گوید:

    با سلام
    جا داره واقعا از شما تشکر کنم ، این مطلبی که اشاره کردین خیلی مفید و راهگشا بود.

  2. امیری می‌گوید:

    سلام. من مدتی پیش در ره اندازی یک لینک رادیویی و مبتنی ب IPSec/GRE به همین مشکل برخوردم که مدتی طول کشید تا به موضوع و دستور مربوط به mtu رسیدم.
    از اینکه این موضوع جزیی ولی مهم و کارا را مطرح کردید و همچنین از کل وبلاگ آموزنده شما بسیار متشکرم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>