آیا کلاینت OpenVPN شما باید از nobind یا پورت ثابت استفاده کند؟
nobind انتخاب پورت مبدأ را برای کلاینتی که به بیرون وصل میشود به هسته میسپارد. سه شرط تعیین میکند که این را میخواهید یا بهجای آن یک پورت محلی سنجاقشده.
دو پروفایلی که تنها در یک خط تفاوت دارند، همان لحظهای که کلاینت دومی روی همان میزبان آغاز میشود رفتار متفاوتی نشان میدهند. یکی nobind دارد و هر پورت محلیای را که هسته بدهد میگیرد؛ دیگری 1194 را رزرو میکند و نمونه دوم با آدرسی که پیشتر در حال استفاده است از کار میافتد. همان خط تعیین میکند چه کسی پورت مبدأ را برمیگزیند، و این بهنوبه خود تعیین میکند که آیا پروفایل میتواند در کنار چیز دیگری روی دستگاه وجود داشته باشد. سه پرسش این را روشن میکند، و پرسش نخست پیش از رسیدن به دو پرسش دیگر به بیشتر پروفایلها پاسخ میدهد.
nobind در واقع از چه چیزی صرفنظر میکند
بهطور پیشفرض کلاینت پیش از تماس یک سوکت محلی را مقید میکند، و پورت محلی 1194 است مگر اینکه پروفایل چیز دیگری بگوید. nobind آن رزرو را برمیدارد، بنابراین پشته در زمان اتصال یک پورت بیاستفاده اختصاص میدهد. این یک استثنا است نه پیشفرض، و کلاینتی که آن خط را ندارد 1194 را نگه میدارد، و همین دقیقاً دلیل برخورد نمونه دومِ سنجاقنشده است. بیشتر پروفایلهای کلاینت توزیعشده به همین دلیل این دستور را دارند، و اینکه یک فایل نمونه کاری را انجام دهد با پیشفرض بودن آن سازوکار یکی نیست.
چیزی که تغییر نمیکند طرف دور است. سرور همچنان همانجایی گوش میدهد که پروفایل میگوید، و پورت مقصد در پیکربندی همچنان پورت مقصد است. پورت مبدأ پویا نشانی بازگشت سوکت خود شما را تغییر میدهد و چیزی از سوکت سرور را نه.
همچنین چیزی را پنهان نمیکند. نشانی عمومی شما همان است که مسیر آن را به آن ترجمه میکند، بسته همچنان از شبکه محلی میگذرد، و هر که آن شبکه را اداره میکند همچنان یک جریان میبیند. nobind نه ویژگی حریم خصوصی است و نه دور زدن فایروال.
سه شرطی که آن را تعیین میکند
یک پرسش دو پرسش دیگر را تعیین میکند، پس پیش از ویرایش هر چیزی به آن پاسخ دهید. اگر همتا به بیرون وصل میشود، پرسشهای باقیمانده تنها تصمیمی را که پیشتر گرفته شده دقیقتر میکنند. اگر اتصالهای ورودی را میپذیرد، هیچ تنظیمی روی پورت محلی آن را در دسترس نمیکند.
آیا این همتا اتصال را آغاز میکند؟ اگر به بیرون وصل میشود، پورت مبدأ پویا بیخطر و معمولاً ترجیحپذیر است، چون پاسخ از همان جریان بازمیگردد. اگر منتظر اتصالهای ورودی است، پورت پویا آن را در دسترسناپذیر میکند مگر اینکه چیزی در جلو پورت را منتشر کند. همین یک پاسخ هر پروفایل کلاینت را از هر پروفایل سرور جدا میکند.
آیا مسیر بر اساس پورت مبدأ فیلتر میکند؟ قاعدهای سخت که برای یک پورت شناختهشده نوشته شده پورت محلی صریح را الزامی میکند، و پروفایل باید ثبت کند که کدام قاعده را برآورده میکند. بیشتر شبکهها فقط بر اساس مقصد فیلتر میکنند، پس این شرط از اولی نادرتر است. هر جا اعمال شود، ترجیح پورت پویا را نقض میکند.
آیا چند نمونه میزبان را شریک میشوند؟ یک پورت ثابت نمیتواند به دو نمونه از آنها خدمت کند، و نمونهای که دوباره راهاندازی شده ممکن است 1194 را هنوز در وضعیت بستن بیابد. پورتهای پویا آن تعارض را بدون تغییر چیز دیگری برمیدارند. اگر نمیتوانید با اطمینان به این پاسخ دهید، بله را فرض کنید و بگذارید هسته انتخاب کند.
جایی که پورت سنجاقشده پاسخ درست است
بعضی شبکهها هم بر اساس پورت مبدأ و هم بر اساس مقصد فیلتر میکنند، پس ممکن است گرداننده قاعدهای نوشته باشد که تنها ترافیک از یک پورت شناختهشده را عبور میدهد. سنجاق کردن پورت محلی آنگاه درست است، و پروفایل باید توضیحی داشته باشد که قاعده برآوردهشده را نام ببرد. سنجاق کردن برای تقارن با پورت سرور دلیل نیست، چون آن دو عدد هیچ ربطی به هم ندارند. اگر سنجاق فقط به این دلیل وجود دارد که قالبی آن را داشت، آن را حذف کنید.
در غیر این صورت پورت سنجاقشده دردسر میخرد: دو کلاینت روی یک دستگاه نمیتوانند هر دو 1194 را نگه دارند، و دومی با خطایی شکست میخورد که به پورت اشاره میکند نه به پروفایل. کانتینری که سریع دوباره راهاندازی میشود به همان دیوار میخورد. ترمیم همان دستوری است که پروفایلهای توزیعشده از پیش داشتند.
سرور و کلاینت متقارن نیستند
راهنمای OpenVPN 2.6 nobind را کنار lport قرار میدهد، که همان استدلال در یک خط است: یک گزینه میگوید هسته انتخاب میکند، دیگری میگوید شما انتخاب میکنید. پورت محلی پویا تنها برای همتایی کار میکند که تماس میگیرد، چون طرف پاسخدهنده نمیتواند پورت را از پیش بداند. به همین دلیل کپی کردن پروفایل کلاینت روی سرور شنوندهای میسازد که هیچکس به آن نمیرسد.
روی میزبانی با چند رابط شبکه، نشانی تصمیمی جدا از پورت است. مقید کردن یک نشانی محلی مشخص و مقید کردن یک پورت مشخص دو تنظیم متفاوتاند، و سروری با دو پیوند بالاسری معمولاً هر دو را سنجاق میکند. کلاینتی که هر دو را سنجاق میکند همان سختی را بدون هیچ سودی پذیرفته است.
خلاصه درباره نقشها است نه امنیت: هر که تماس میگیرد میتواند درباره مبدأ خود انعطاف داشته باشد، و هر که پاسخ میدهد نمیتواند. هیچیک از دو انتخاب تغییر نمیدهد که طرف دیگر درباره هویت شما چه میآموزد. به همین دلیل هم این دستور در نمونههای کلاینت پیدا میشود و تقریباً هرگز در نمونههای سرور.
پورتی را که هسته انتخاب کرده بررسی کنید
پس از اتصال، سوکت را بخوانید نه پیکربندی را، چون پیکربندی نیت را بیان میکند و سوکت آنچه رخ داده را. واقعیتهایی که ارزش ثبت دارند پورت محلی، نقطه پایانی دور و اینکه آیا هنوز چیزی گوش میدهد هستند. روی میزبان لینوکس هر سه یک فرمان فاصله دارند.
ss -unp | grep openvpn
ss -lunp | grep openvpn
sudo lsof -nP -i | grep openvpn
کلاینتی با nobind پورت محلی بالا و پورت دور پیکربندیشده را نشان میدهد، که همان شکل مورد انتظار است. سرور سوکتی شنونده روی پورت پیکربندیشدهاش نشان میدهد، و اگر آن سوکت نباشد پروفایل یا شنونده نیست یا در مقید کردن شکست خورده است. وقتی جریانی هست اما بستهای بازنمیگردد، پیش از ویرایش پروفایل پورت مبدأ انتخابشده را با هر فیلتر پورتی روی مسیر مقایسه کنید. یک چیز را تغییر دهید، دوباره وصل شوید و سوکت را دوباره بخوانید.