رد شدن PSK در L2TP/IPsec: اول پنجره گفتوگو، بعد فایلها
کلیدی که روی صفحه میبینید هنوز میتواند به یک فایل راز قدیمی یا یک شکست خط نامرئی ببازد. آن را از فیلد NetworkManager تا /etc/ipsec.d دنبال کنید.
کلید از پیش اشتراکگذاشتهشده را از پیام مدیر در پنجره گفتوگوی NetworkManager جایگذاری میکنید، کادر نمایش آن را تیک میزنید و کاراکتر به کاراکتر یکسان است. با این حال اتصال پیش از بالا آمدن تونل با خطای احراز هویت تمام میشود. بار اول که این را دیدم گمان کردم کلید غلط است؛ نبود. دو چیز دیگر تعیین میکند که دیمن واقعاً چه میخواند: فایل رازی که افزونه برای آن اتصال مینویسد، و اینکه آیا مقدار بدون تغییر از پنجره گفتوگو گذشته است.
مسیر زیر کلید را از فیلد تا فایل دنبال میکند، و همین ترتیب به شما میگوید کجا گم شده است. این کار را روی ماشینی انجام دهید که شکست میخورد، نه روی ماشینی که کار میکند، چون تفاوت این دو ماشین معمولاً چیدمان فایلهاست نه کلید.
از پنجره گفتوگو شروع کنید، اما به فیلد اعتماد نکنید
زبانه IPsec اتصال را باز کنید و کلید را به جای جایگذاری دوباره تایپ کنید. کلیدی که از پیام چت، PDF یا مدیر گذرواژه کپی شده باشد میتواند با شکست خط پایانیای برسد که فیلد نشان نمیدهد، و کاراکترهای نمایشدادهشده هنوز درست به نظر میرسند.
روی کنترل نمایش گذرواژه کلیک کنید و به انتهای رشته نگاه کنید، نه وسط آن. اگر نشانگر زیر متن خط خالی بگذارد، آن را پاک کنید و کاراکتر آخر را دوباره تایپ کنید. همین یک اصلاح سهم شگفتانگیزی از این گزارشها را حل میکند و کمتر از خواندن هر لاگی هزینه دارد.
اگر کلید از سامانه تیکتی میآید که خطوط بلند را میشکند، آن را از کانالی بخواهید که نمیشکند. طولها را با مدیر مقایسه کنید نه اینکه دو رشته را کنار هم ببینید؛ کاراکتر گمشده در نقطه شکستن در فونت متناسب نامرئی است.
کلید را به داخل /etc/ipsec.d دنبال کنید
افزونه هرگز PSK را به عنوان آرگومان خط فرمان به دیمن IPsec نمیدهد. در عوض مقدار را در یک فایل راز ذخیره میکند و ترتیب میدهد که دیمن آن فایل را وارد کند، با افزودن یک خط include به /etc/ipsec.secrets اگر وجود نداشته باشد. آنچه پنجره گفتوگو نگه میدارد ورودی آن فایل تولیدشده است، نه مقدار مورد استفاده.
پیش از تغییر هر چیز، فهرست کنید چه وجود دارد:
ipsec --version
sudo ls -l /etc/ipsec.d/*.secrets /etc/ipsec.d/ipsec.nm-l2tp.secrets 2>/dev/null
sudo grep -n "include" /etc/ipsec.secrets
نسخههای قدیمیتر افزونه برای هر اتصال یک فایل مینوشتند، به نام UUID اتصال، مثلاً /etc/ipsec.d/nm-l2tp-ipsec-<uuid>.secrets. حذف یک پروفایل در اپلت آن فایل را بهطور قابل اتکا حذف نمیکند. اگر فایلی قدیمی از سرور پیشین هنوز روی دیسک و هنوز وارد شده باشد، دیمن میتواند رازی را انتخاب کند که به پروفایلی تعلق دارد که دیگر استفاده نمیکنید، و اتصال شکست میخورد در حالی که فیلد مرئی درست است.
بفهمید تغییر 1.2.12 با ارتقاها چه کرد
نسخه 1.2.12 افزونه فایلهای راز هر اتصال را با یک فایل مشترک واحد جایگزین کرد، /etc/ipsec.d/ipsec.nm-l2tp.secrets. ارتقا فایلهای قدیمیتر مبتنی بر UUID را پاک نمیکند، و خط موجود include /etc/ipsec.d/*.secrets آنها را هنوز وارد میکند. نسخه 1.2.16 پردازش پیشنهادهای پیشفرض را تغییر داد، نه چیدمان رازها را.
این تاریخچه توضیح میدهد چرا دو ماشین با چیزی که شبیه همان پروفایل است رفتار متفاوت دارند. کلید یکسان است؛ مجموعه فایلهایی که دیمن وارد میکند یکسان نیست. وقتی فایلی یتیم را برمیدارید، به جای حذف آن را کنار بگذارید، اتصال را تأیید کنید، سپس وقتی وضعیت کارکرد ثبت شد آن را حذف کنید. تغییر نام مقدار قدیمی را قابل بازیابی نگه میدارد اگر معلوم شود ایراد جای دیگری است.
کاراکترهایی را جدا کنید که قالب ذخیرهسازی نمیتواند نگه دارد
مستندات strongSwan برای رشته راز مشترک میگوید مقدار نمیتواند شکست خط یا کاراکتر گیومه دوتایی داشته باشد. کلیدی که از سندی جایگذاری شده میتواند هر یک از این دو را بدون هیچ تفاوت بصری در یک پنجره گفتوگوی معمولی حمل کند.
از 1.2.12 به بعد مقدار ذخیرهشده متن ساده نیست. افزونه PSK را پیش از رسیدن به فایل با base64 کد میکند، و یادداشتهای انتشار همین کدگذاری را دلیل پذیرفتنی بودن گیومه دوتایی در کلید میدانند. پس گیومهای که در فیلد تایپ میشود بازنماییکردنی است؛ همین برای هر کاراکتر کنترلی درست نیست.
طول محدودیت دیگری است. هیچ کمینه جهانی در نرمافزار L2TP/IPsec اعمال نمیشود: برخی کلاینتها کلیدهای کوتاهتر از بیست کاراکتر را میپذیرند و برخی دروازهها کمینهای اعمال میکنند. اگر کلید کوتاهی رد شود، قاعده به سیاست سرور یا اعتبارسنجی همان کلاینت تعلق دارد، و بالا بردن چیزی بهصورت محلی آن را تغییر نمیدهد.
بخوانید کدام لایه احراز هویت شکست خورده است
ابتدا ipsec --version را اجرا کنید، چون strongSwan و Libreswan نام فایل و نحو متفاوتی دارند و توصیه برای یکی میتواند به دیگری آسیب بزند. سپس مرحله شکست را از پیام کلاینت یا لاگ دیمن بخوانید: شکایت درباره کلید از پیش اشتراکگذاشتهشده رویدادی متفاوت از رد شدن نام کاربری و گذرواژه است.
PSK دو سر تونل را احراز هویت میکند. نام کاربری و گذرواژه شخص داخل L2TP را احراز هویت میکنند و PPP پس از برپا شدن انجمن IPsec به آنها میپردازد. PSK درست با حساب غلط باز هم شکست میخورد، و تغییر حساب کلیدی را که دیمن هرگز درست نخوانده ترمیم نمیکند.
وقتی تیکت را میبندید، هر چهار مورد را بنویسید: نسخه افزونه، فایل راز مورد استفاده، اینکه کلید دوباره تایپ شد یا جایگذاری، و لایهای که در خطا نام برده شده. آنگاه هر کس بعداً این مسیر را تکرار کند میتواند مستقیم به تفاوت میان ماشین کارکردی و ماشین شکستخورده بپردازد.