Kerio در لینوکس: دادن MAC مورد انتظار سرور به kvnet
kvnet در هر اتصال از نو ساخته میشود، بنابراین تغییر یکباره نشانی از دست میرود. مقداری را که کلاینت ثبت کرده بخوانید و آن را از یک قلاب پس از اتصال اعمال کنید.
سه چیز باید پیش از آنکه تونل Kerio ترافیک را حمل کند همخوان باشند: نشانی روی واسط kvnet، مقداری که کلاینت ثبت کرده، و آنچه سیاست سرور یا DHCP انتظار دارد. وقتی همخوان نیستند، تونل همچنان احراز هویت میکند و همچنان بالا میآید، و همین است که خطا را گیجکننده میکند. واسط برای هر اتصال ساخته میشود، پس نشانیای که دستی تنظیم شود به همان نشست تعلق دارد و به هیچ چیز دیگر. این شکل مسئله است، و راهحل یک قلاب است نه یک فایل پیکربندی. باقی ماجرا این است که مقدار را از کجا بخوانیم و کجا اعمالش کنیم.
چرا نشانی مدام برمیگردد
kvnet یک آداپتور مجازی است که کلاینت هنگام شروع اتصال میسازد و هنگام پایان حذف میکند. بنابراین یک ip link set دستی دقیقاً بهاندازه همان نشستی که رویش اعمال شده دوام میآورد، و اتصال بعدی از آنچه کلاینت تخصیص میدهد شروع میشود. روی ماشینی که کلاینت نمیتواند نشانی مورد انتظار را اعمال کند، هر اتصال دوباره همان ناهمسانی را بازمیگرداند، و قاعده اجاره یا دسترسی دستگاه را دوباره رد میکند.
این الگو بهخودیخود تشخیصی است. تونلی که یک نشست کار میکند و در نشست بعد شکست میخورد مشکل اعتبارنامه نیست، چون اعتبارنامهها میان اتصالها تغییر نمیکنند.
مقدار را از کلاینت بخوانید، نه از واسط
کلاینت لینوکس جزئیات گفتوگو را در گزارش اشکالزدایی خود مینویسد، و نشانیای که قصد استفاده از آن را دارد آنجا بهعنوان آخرین توکن نشانیگونه در توالی اتصال ظاهر میشود. آن را با آنچه هسته واقعاً نگه میدارد مقایسه کنید، که یک readlink فاصله دارد: cat /sys/class/net/kvnet/address.
اگر آن دو متفاوت باشند، کلاینت مقدار درست را میدانست و در اعمال آن شکست خورده است، و قلابی که آن را پس از وجود واسط اعمال کند این شکاف را میبندد. اگر گزارش اصلاً نشانیای نداشته باشد، مشکل زودتر است و به نسخه کلاینت یا پروفایل سرور تعلق دارد نه به یک اسکریپت.
آن را پس از وجود واسط اعمال کنید
کاربران NetworkManager میتوانند اسکریپتی را در پوشه توزیعکننده آن بگذارند و فقط وقتی واسط VPN بالا میآید عمل کنند. کلاینتی که systemd مدیریتش میکند به دقت بیشتری نیاز دارد: یک drop-in که هنگام آغاز سرویس اجرا میشود معمولاً پیش از وجود آداپتور فعال میشود، پس قلاب باید منتظر واسط بماند نه آن را فرض کند. آنگاه نشانی را تنظیم کنید، و اگر هسته در حالی که پیوند بالاست امتناع کند، آن را پایین بیاورید، نشانی را تنظیم کنید و دوباره بالا بیاورید. توکن استخراجشده را پیش از سپردن به ip link از میان یک الگوی MAC دوباره بخوانید، تا یک خط گزارش غیرمنتظره نتواند به آرگومان تبدیل شود.
هر چیزی که با root از گزارش یک کلاینت اجرا میشود مالکیت محدود میخواهد: فایلی متعلق به root، نه قابل نوشتن توسط دیگران، و هیچ درهمآمیزی پوسته فراتر از نشانی اعتبارسنجیشده. بررسی الگو را داخل اسکریپت نگه دارید. نگذارید محتوای گزارش تعیین کند کدام فرمان اجرا میشود.
اجاره را بررسی کنید نه پیوند را
ip -4 -o addr show dev kvnet باید نشانیای در محدوده مورد انتظار نشان دهد، ip neigh show dev kvnet باید دروازه را نشان دهد، و یک سرویس پشت VPN باید پاسخ دهد. سپس یک بار قطع و دوباره وصل شوید؛ اگر نشانی برگشت، قلاب روی رویداد اشتباه فعال میشود یا اصلاً فعال نمیشود.
واسطی که با نشانی درست ظاهر میشود و هرگز اجاره نمیگیرد به سمت سرور اشاره دارد. این بررسی دیگری است و معمولاً تیم دیگری. پیش از ویرایش دوباره قلاب تأیید کنید که حساب مجاز است و استخر هنوز نشانی دارد.
پس از ارتقا راهحل موقت را بازبینی کنید
نسخهای از کلاینت که نشانی را درست تنظیم میکند قلاب شما را با مقدار کهنهای رها میکند، که خطای تازهای است که یک اصلاح وارد کرده است. هرگز MAC را از ماشین دیگر یا نوشته انجمن کپی نکنید؛ از مقداری استفاده کنید که همین کلاینت برای همین حساب ثبت میکند، و تاریخی را که آن را بررسی کردهاید یادداشت کنید.
اسکریپت را آنقدر کوتاه نگه دارید که در یک نشست خوانده شود. راهحلهای موقتی که گزارشها را تجزیه میکنند طبیعتاً گذرا هستند. آنهایی که میمانند همانهایی هستند که خواننده آینده بدون رشته اصلی میفهمد.