NFS clientaddr روی VPN: بر اساس نسخه جزئی تصمیم بگیرید، نه عادت
clientaddr فقط برای NFSv4.0 یک نشانی فراخوان اعلام میکند. نسخه جزئی توافقشده را بخوانید، مسیر بازگشت را بررسی کنید و آن را از خطاهای نصب جدا کنید.
clientaddr یکی از آن گزینههای نصب است که مدتها پس از از بین رفتن دلیلش، در خط فرمان کپی میشود. به سرور NFSv4.0 میگوید کلاینت را کجا فراخوانی کند. سرور را انتخاب نمیکند، هر درخواست را به نشانی مبدأ مقید نمیکند و ترافیک را به تونل هدایت نمیکند. روی لپتاپی با چند نشانی، برای تصمیمگیری درباره اینکه اصلاً اعمال میشود یا نه سه پرسش لازم است.
سه شرط تعیین میکند که آیا این گزینه اهمیت دارد
نخستین شرط نسخه جزئی توافقشده است، چون 4.1 و 4.2 فراخوانها را متفاوت مدیریت میکنند. دومین شرط این است که آیا سرور میتواند به نشانیای که اعلام میکنید برسد؛ تونل مسیریابیشده معمولاً این را مجاز میکند و مسیر ترجمهشده معمولاً نه. سومین شرط این است که آیا خطایی که دنبالش هستید اصلاً خطای فراخوان است.
| Condition | If yes | If no |
|---|---|---|
| Version is 4.0 | The option can matter | Skip it; inspect the session instead |
| Server can reach the address | Advertise it | Fix reachability first |
| Failure is a callback | Diagnose callback path | Look at mount and export |
پاسخ دادن به آنها با ترتیب اشتباه همان راهی است که مردم یک نشانی فراخوان به نصب 4.2 اضافه میکنند و نتیجه میگیرند که گزینه خراب است.
نخست نسخه جزئی را بخوانید
nfsstat -m
برای یک نصب موجود، این اطلاعات و پرچمهای نصب را چاپ میکند، از جمله نسخه مؤثر به شکل vers=4.0، vers=4.1 یا vers=4.2. یادداشتی که فقط «NFSv4» میگوید، تنها جزئیاتی را حذف میکند که تعیین میکند این گزینه مرتبط است یا نه. عدد را بخوانید، نه کلمه را.
اگر رشته نسخه از پیشفرض سرور آمده و نه از خط فرمان شما، بپرسید کدام نسخه جزئی توافق شده است. سرور میتواند نسخه جزئی بالاتر را رد کند و عقبنشینی کند، و همان عقبنشینی دقیقاً حالتی است که فراخوان ناگهان اهمیت پیدا میکند. خط نصبی که نوشتهاید ممکن است نصبی را که دارید توصیف نکند.
برای 4.0، نشانیای اعلام کنید که سرور به آن برسد
سرور NFSv4.0 ممکن است به اتصال جداگانهای به کلاینت نیاز داشته باشد، برای نمونه وقتی یک واگذاری را فراخوانی میکند. با چند رابط یا جدول مسیریابی نامتعارف، کشف خودکار نشانی فراخوان ممکن است نشانیای را انتخاب کند که سرور نمیتواند استفاده کند.
mount -t nfs -o vers=4.0,clientaddr=10.8.0.6 10.8.0.1:/export /mnt/share
نشانی پیش از دونقطه سرور است و مقصد میماند. نشانی فراخوان به کلاینت تعلق دارد و باید از سمت سرور در تونل قابل دسترسی باشد. نشانی حلقهای سرور را به خودش برمیگرداند. نشانی خصوصی کلاینت بدون مسیر بازگشت هم به همان اندازه بیفایده است، هرچند روی کلاینت درست به نظر میرسد.
این را بهعنوان نمونه استفاده کنید، نه دلیلی برای تنزل یک نصب کارکرده. نشانیها و مسیر خروجی را جایگزین کنید و احراز هویت و گزینههای دیگری را که سرور میخواهد نگه دارید. حذف آنها برای جا افتادن یک نمونه، تغییری دیگر با نتیجهای دیگر است، و روی سروری که نوع امنیتی را الزام میکند، پیش از هر تلاش فراخوان شکست میخورد.
4.1 و 4.2 از این گزینه استفاده نمیکنند
Linux NFSv4.1 و 4.2 فراخوانها را روی اتصالهایی که کلاینت برقرار کرده منتقل میکنند، و 4.1 آن سازوکار را backchannel مینامد. آنها به باز کردن اتصال تازه توسط سرور به یک نشانی اعلامشده وابسته نیستند، بنابراین clientaddr مسیر فراخوان 4.1 یا 4.2 را تعمیر نمیکند.
این به آن معنا نیست که 4.1 و 4.2 هیچ مشکل فراخوانی ندارند. به این معناست که تشخیص متفاوت است: نشست برقرارشده و وضعیت backchannel آن را بررسی کنید، نه اینکه به دنبال درگاه فراخوان ورودی بگردید که هرگز قرار نبود وجود داشته باشد. نبود قاعده ورودی، وضعیت مورد انتظار است، نه نقصی که باید اصلاح شود.
خطای نصب را از خطای فراخوان جدا کنید
نخست روشن کنید که آیا کلاینت به سرویس NFS میرسد و آیا سرور خروجی و درخواست احراز هویت را میپذیرد. اتمام مهلت پیش از این تبادل هیچ چیزی درباره نشانی فراخوان نمیگوید. تغییر یکی در حالی که نصب هنوز شکست میخورد، تحقیق را نزدیکتر نمیکند و خطای اصلی را پشت یک گزینه نصب تازه پنهان میکند.
تنها زمانی که شواهد یک فراخوان 4.0 ناموفق را نشان دهد، نشانی اعلامشده اهمیت پیدا میکند، همراه با مسیر بازگشت سرور، شنونده سمت کلاینت و هر فیلتری میان آنها. تغییر عدد در گزینه نصب نمیتواند آن مسیرها را بسازد؛ فقط میتواند به مسیری که از قبل وجود دارد اشاره کند. بنویسید کدامیک از آن چهار مورد را بررسی کردهاید، چون گزارش بعدی بدون هیچیک از آنها خواهد رسید.
ریشه NFS در بوت زودهنگام محیطی جدا با پیشنیازهای خودش است: initramfs پیش از امکان نصب به ابزارها و شبکه نیاز دارد. نصبی که پس از ورود کار میکند چیزی درباره آن توالی اثبات نمیکند، و خطای هنگام بوت بهندرت از initramfs یا شبکه نام میبرد.