مسیرهای تفکیکشده L2TP روی Mac: چرا آدرس میزبان کار نمیکند
setadditionalroutes جفت شبکه و ماسک میخواهد، کل فهرست را جایگزین میکند و به نام دقیق سرویس نیاز دارد. پیش از سرزنش دروازه، جدول را بررسی کنید.
VPN وصل میشود، نوار منو آن را نشان میدهد، و یک میزبان داخلی هنوز پاسخ نمیدهد. در این وضعیت سه علت ممکن وجود دارد و اینکه کدام صدق میکند به نحوهٔ پیکربندی تونل بستگی دارد. یا فرمان مسیر در جایی که آدرس شبکه لازم بود از آدرس میزبان استفاده کرده، یا خود پروفایل یک مسیر پیشفرض نصب میکند که تصمیم را میبلعد، یا کلاینت تونل PPP است که به جای کلید پروفایل به یک قلاب نیاز دارد. آنها را به همین ترتیب بررسی کنید، چون رد کردن اولی ارزانترین است.
مقصد یک آدرس شبکه است، ماسک پیشوند را توصیف میکند
networksetup -setadditionalroutes سهتاییهای مقصد، ماسک زیرشبکه و دروازه را میگیرد. فراخوانیای که یک زیرشبکهٔ داخلی را از تونل میفرستد چنین است:
sudo networksetup -setadditionalroutes "VPN (L2TP)" 192.168.1.0 255.255.255.0 10.2.0.0
توجه کنید مقصد چیست: آدرس شبکه، نه آدرس سروری که میخواهید به آن برسید. در موردی که این مقاله را به وجود آورد، همان فرمان با 192.168.1.20 در آن جایگاه هیچ کار مفیدی نکرد و جایگزین کردنش با 192.168.1.0 بلافاصله کار کرد. همان ماسک، همان دروازه، یک عدد متفاوت. تمام این شکست در مقیاس کوچک همین است.
دلیل حسابی است نه سیاستی. آدرس میزبان همراه با ماسک /24، 192.168.1.0/24 را توصیف نمیکند؛ چیزی را توصیف میکند که جدول مسیریابی نمیتواند بهطور مفید نگه دارد، پس ورودی رد یا نادیده گرفته میشود و تونل در نهایت کمتر از آنچه میخواستید حمل میکند.
وقتی دقیقاً یک میزبان میخواهید، از آدرس میزبان با ماسک 255.255.255.255 استفاده کنید. جفتهای مختلط جایی است که این کار خراب میشود، نه استفاده از آدرس میزبان بهعنوان چنین. /32 ساختهشده از یک آدرس مسیر مشروعی است؛ /24 ساختهشده از یک آدرس اشتباه است.
فراخوانی فهرست را جایگزین میکند، و نام تحتاللفظی است
دو رفتار افراد را در اولین تلاش غافلگیر میکند. فرمان فهرست کامل مسیرهای اضافی را تنظیم میکند نه اینکه به آن بیفزاید، پس فراخوانیای که یک پیشوند اضافه میکند بقیه را که قبلاً آنجا بودند بیصدا حذف میکند. کل مجموعه را در یک فراخوانی بسازید.
نام سرویس هم برچسبی نیست که خودتان ساختهاید. آن را از ابزار بخوانید و دقیقاً کپی کنید، همراه با پسوند نوع:
networksetup -listallnetworkservices
نامی که یک نویسه تفاوت داشته باشد نه خطای قابل خواندنی تولید میکند نه مسیری. کپی و چسباندن تکنیک درست در اینجا است، نه بازنویسی از حافظه.
وقتی پروفایل مسیر پیشفرض را مطالبه میکند
مسیرهای تفکیکشده در برابر مسیر پیشفرض برای هر مقصدی که صریحاً پوشش نمیدهند شکست میخورند، و پروفایل L2TP که برای تونل کامل پیکربندی شده دقیقاً همان را نصب میکند. اگر پروفایل بگوید همهچیز از تونل میگذرد، فهرست مسیرهای اضافی خیلی کم تغییر میکند. ورودی شما غلط نیست؛ فقط برای مقصدهایی که هرگز نامشان را نمیبرد بیربط است. کنترل این معمولاً در تنظیم ارسال همهٔ ترافیک در پروفایل است نه در هیچ فرمان مسیری.
پیش از ویرایش ورودیهای بیشتر تصمیم بگیرید کدام مدل را واقعاً میخواهید. تونل کامل با استثناها پیکربندی متفاوتی از تونل تفکیکشده با پیشوندهای مشخص است، و آمیختن این دو جدولی میسازد که هیچکس نمیتواند پیشبینی کند.
اگر سازمان تونل کامل را الزامی میداند، تلاش برای تفکیک محلی آن را متوقف کنید و الزام را به کسی ببرید که سیاست را در اختیار دارد. مسیری که محلی اضافه شده و با آن تناقض دارد به هر حال با بهروزرسانی بعدی پروفایل حذف خواهد شد.
تونلهای PPP به جای کلید به قلاب نیاز دارند
برای تونلهای مبتنی بر PPP، defaultroute کلید پروفایلی است که مسیر پیشفرض میسازد؛ آن را حذف کنید و کلاینت دیگر هر مقصدی را مطالبه نمیکند. سپس مسیرها پس از ظاهر شدن واسط اضافه میشوند، معمولاً از /etc/ppp/ip-up:
#!/bin/sh
/sbin/route add -net 192.168.1.0 -interface ppp0
اسکریپت را در مالکیت root و قابلاجرا نگه دارید، و وقتی بیش از یک پروفایل تونل روی دستگاه وجود دارد نگهبانی روی نام واسط اضافه کنید. قلابی که برای هر پیوند PPP اجرا میشود و یک نام دستگاه را فرض میکند، خطای کوچکی با عمر طولانی است.
تفکیک را با سه درخواست بررسی کنید
جدول را هنگام اتصال بگیرید و توجه کنید کدام واسط به تونل خدمت میکند. سپس مقصد مشخص را بررسی کنید نه اینکه به وضعیت خروج فرمانی که آن را ساخته اعتماد کنید. کد خروج گزارش میکند که آیا ابزار آرگومانها را پذیرفته، نه اینکه ترافیک مسیر موردنظر شما را میرود.
با سه درخواست که تفکیک را اثبات میکنند تمام کنید: یک میزبان داخلی با آدرس، یک نام داخلی از طریق resolver داخلی، و یک سایت عمومی که هنوز باید از اتصال محلی استفاده کند. اگر سایت عمومی اکنون از تونل هم میگذرد، تفکیک هرگز رخ نداده، هر چه فهرست مسیرها بگوید.
یک بار دیگر وصل شوید و درخواست داخلی را تکرار کنید، چون مسیرهایی که دستی اضافه میشوند میتوانند از واسطی که آنها را معتبر کرده بیشتر عمر کنند و پس از افتادن تونل ترافیک را بیصدا به چالهٔ سیاه تبدیل کنند.