openvpn(8) System Manager's Manual openvpn(8)

openvpn - دیمن تونل امن IP و شبکه خصوصی مجازی (VPN)

openvpn [ options ... ]
openvpn  --help

برنامه OpenVPN یک دیمن VPN متن‌باز اثر James Yonan است. از آنجا که OpenVPN تلاش می‌کند یک ابزار فراگیر VPN با انعطاف‌پذیری بسیار بالا باشد، گزینه‌های فراوانی در این صفحه راهنما وجود دارد. اگر در استفاده از OpenVPN تازه‌کار هستید، شاید بهتر باشد مستقیماً به بخش مثال‌ها بروید تا نحوه ساخت VPNهای ساده در خط فرمان را بدون نیاز به فایل پیکربندی مشاهده کنید.

همچنین توجه داشته باشید که مستندات و مثال‌های بیشتری در وب‌سایت OpenVPN وجود دارد: https://openvpn.net

و اگر مایلید نسخه کوتاه‌تری از این راهنما را ببینید، پیام نحوه استفاده openvpn را بررسی کنید که با اجرای openvpn بدون هیچ پارامتری قابل مشاهده است.

برنامه OpenVPN یک دیمن VPN قدرتمند و بسیار منعطف است. OpenVPN از امنیت SSL/TLS، پل‌زدن اترنت (ethernet bridging)، انتقال تونل TCP یا UDP از طریق پروکسی‌ها یا NAT، پشتیبانی از آدرس‌های IP پویا و DHCP، مقیاس‌پذیری برای صدها یا هزاران کاربر، و سازگاری با اکثر پلتفرم‌های اصلی سیستم‌عامل پشتیبانی می‌کند.

برنامه OpenVPN وابستگی نزدیکی به کتابخانه OpenSSL دارد و بیشتر قابلیت‌های رمزنگاری خود را از آن می‌گیرد.

برنامه OpenVPN از رمزنگاری سنتی با استفاده از کلید مخفی از پیش به‌اشتراک‌گذاشته‌شده (حالت Static Key) یا امنیت کلید عمومی (حالت SSL/TLS) با استفاده از گواهی‌های کلاینت و سرور پشتیبانی می‌کند. OpenVPN همچنین از تونل‌های رمزنگاری‌نشده TCP/UDP پشتیبانی می‌کند.

برنامه OpenVPN برای کار با رابط شبکه مجازی TUN/TAP که روی بیشتر پلتفرم‌ها وجود دارد طراحی شده است.

در مجموع، OpenVPN قصد دارد بسیاری از ویژگی‌های کلیدی IPSec را همراه با ردپای نسبتاً سبکی ارائه دهد.

برنامه OpenVPN اجازه می‌دهد هر گزینه‌ای چه در خط فرمان و چه در یک فایل پیکربندی قرار گیرد. اگرچه تمام گزینه‌های خط فرمان با یک خط‌تیره دوگانه آغازین ("--") شروع می‌شوند، اما این پیشوند هنگام قرار گرفتن گزینه در فایل پیکربندی می‌تواند حذف شود.

این بخش گزینه‌های عمومی را پوشش می‌دهد که بدون در نظر گرفتن حالت پیکربندی OpenVPN در دسترس هستند.

نمایش گزینه‌ها.
--auth-nocache
نام‌های کاربری/گذرواژه‌های --askpass یا --auth-user-pass را در حافظه مجازی کش نکنید.

در صورت تعیین شدن، این دستورالعمل باعث می‌شود OpenVPN بلافاصله ورودی‌های نام‌کاربری/گذرواژه را پس از استفاده فراموش کند. در نتیجه، هر زمان که OpenVPN به نام‌کاربری/گذرواژه نیاز داشته باشد، ورودی را از stdin درخواست می‌کند که ممکن است چندین بار در طول مدت نشست OpenVPN اتفاق بیفتد.

هنگام استفاده از --auth-nocache در ترکیب با یک فایل کاربر/گذرواژه و --chroot یا --daemon، حتماً از یک مسیر مطلق استفاده کنید.

تغییر دایرکتوری به dir پیش از خواندن هرگونه فایل مانند فایل‌های پیکربندی، فایل‌های کلید، اسکریپت‌ها و غیره. dir باید یک مسیر مطلق همراه با "/" در ابتدا و بدون هرگونه ارجاع به دایرکتوری فعلی مانند . یا .. باشد.

این گزینه زمانی مفید است که OpenVPN را در حالت --daemon اجرا می‌کنید و می‌خواهید تمام فایل‌های کنترلی OpenVPN خود را در یک مکان تجمیع نمایید.

اجرای chroot به dir پس از مقداردهی اولیه. گزینه --chroot اساساً dir را به عنوان ریشه درخت دایرکتوری (/) بازتعریف می‌کند. بنابراین OpenVPN قادر نخواهد بود به هیچ فایلی خارج از این درخت دسترسی پیدا کند. این امر از دیدگاه امنیتی می‌تواند مطلوب باشد.

از آنجا که عملیات chroot تا پس از مقداردهی اولیه به تعویق می‌افتد، بیشتر گزینه‌های OpenVPN که به فایل‌ها ارجاع می‌دهند در بستر پیش از chroot عمل خواهند کرد.

در بسیاری از موارد، پارامتر dir می‌تواند به یک دایرکتوری خالی اشاره کند، با این حال ممکن است هنگام اجرای اسکریپت‌ها یا راه‌اندازی‌های مجدد پس از عملیات chroot پیچیدگی‌هایی ایجاد شود.

نکته: کتابخانه SSL احتمالاً نیاز دارد که /dev/urandom در داخل دایرکتوری chroot یعنی dir در دسترس باشد. این به این دلیل است که کتابخانه‌های SSL گاهی نیاز به جمع‌آوری تصادفی‌سازی تازه دارند. هسته‌های لینوکس جدیدتر و برخی از BSDها یک فراخوان سیستمی getrandom() یا getentropy() پیاده‌سازی کرده‌اند که نیاز به در دسترس بودن /dev/urandom را برطرف می‌سازد.

این گزینه روشی راحت برای تغییر مقادیر پیش‌فرض OpenVPN جهت سازگاری بیشتر با نسخه مشخص‌شده version فراهم می‌کند. تمام تغییراتی که این گزینه اعمال می‌کند را می‌توان با استفاده از گزینه‌های پیکربندی جداگانه نیز به دست آورد.

نسخه مشخص‌شده با این گزینه، نسخه همتای OpenVPN است که OpenVPN باید تلاش کند با آن سازگار باشد. به‌طور کلی OpenVPN باید بدون این گزینه با دو نسخه قبلی سازگار باشد. برای نمونه OpenVPN 2.6.0 باید بدون این گزینه با 2.5.x و 2.4.x سازگار باشد. با این حال، ممکن است موارد خاصی وجود داشته باشد که حتی در این حالت‌ها نیز به این گزینه نیاز داشته باشند.

نکته: استفاده از این گزینه، مقادیر پیش‌فرض را به مقادیری که دیگر توصیه نمی‌شوند بازمی‌گرداند و در صورت امکان باید از آن اجتناب شود.

جدول زیر جزئیات تغییرات پیش‌فرض‌ها را بر اساس نسخه مشخص‌شده نشان می‌دهد.

  • 2.5.x یا پایین‌تر: اگر هیچ گزینه فشرده‌سازی دیگری وجود نداشته باشد، --allow-compression asym به‌طور خودکار به پیکربندی اضافه می‌شود.
  • 2.4.x یا پایین‌تر: رمزنگار موجود در --cipher به --data-ciphers اضافه می‌شود.
  • 2.3.x یا پایین‌تر: --data-ciphers-fallback به‌طور خودکار با همان رمزنگار --cipher اضافه می‌شود.
  • 2.3.6 یا پایین‌تر: زمانی که --tls-version-min به‌طور صریح تنظیم نشده باشد، --tls-version-min 1.0 به پیکربندی اضافه می‌شود.

در صورت عدم نیاز، باید از این گزینه اجتناب شود. تنظیم این گزینه می‌تواند امنیت را کاهش دهد یا ویژگی‌هایی مانند data-channel offloading را غیرفعال کند.

بارگذاری گزینه‌های پیکربندی اضافی از file که در آن هر خط معادل یک گزینه خط فرمان است، اما -- ابتدایی حذف شده است.

اگر --config file تنها گزینه برای دستور openvpn باشد، می‌توان --config را حذف کرد و دستور را به صورت openvpn file اجرا کرد.

توجه داشته باشید که پرونده‌های پیکربندی می‌توانند تا عمق معقولی تو در تو باشند.

می‌توان از نویسه‌های نقل‌قول دوگانه یا تکی (""، '') برای در بر گرفتن پارامترهای تکی شامل فاصله‌های خالی استفاده کرد، و نویسه‌های "#" یا ";" در ستون اول می‌توانند برای نشان دادن توضیحات به کار روند.

توجه داشته باشید که OpenVPN 2.0 و بالاتر برای نویسه‌هایی که درون نقل‌قول تکی نیستند، گریز شل مبتنی بر بک‌اسلش را انجام می‌دهد، بنابراین نگاشت‌های زیر باید رعایت شوند:

\\       Maps to a single backslash character (\).
\"       Pass a literal doublequote character ("), don't
         interpret it as enclosing a parameter.
\[SPACE] Pass a literal space or tab character, don't
         interpret it as a parameter delimiter.

برای نمونه در Windows، از دو بک‌اسلش برای نمایش مسیرها استفاده کنید:

secret "c:\\OpenVPN\\secret.key"

برای نمونه‌های پرونده‌های پیکربندی، نگاه کنید به https://openvpn.net/community-resources/how-to

در اینجا یک پرونده پیکربندی نمونه آمده است:

#
# Sample OpenVPN configuration file for
# using a pre-shared static key.
#
# '#' or ';' may be used to delimit comments.
# Use a dynamic tun device.
dev tun
# Our remote peer
remote mypeer.mydomain
# 10.1.0.1 is our local VPN endpoint
# 10.1.0.2 is our remote VPN endpoint
ifconfig 10.1.0.1 10.1.0.2
# Our pre-shared static key
secret static.key
پس از تکمیل تمام توابع مقداردهی اولیه، به یک دیمن تبدیل شود.

نحو‌های معتبر:

daemon
daemon progname

این گزینه باعث می‌شود تمام پیام‌ها و خروجی‌های خطا به پرونده syslog (مانند /var/log/messages) ارسال شوند، به جز خروجی اسکریپت‌ها و دستورهای ifconfig، که مگر در صورت تغییر مسیر، به /dev/null خواهند رفت. تغییر مسیر syslog بلافاصله در نقطه‌ای که --daemon در خط فرمان تجزیه می‌شود رخ می‌دهد، هرچند نقطه تبدیل به دیمن شدن بعداً انجام می‌شود. اگر یکی از گزینه‌های --log وجود داشته باشد، جایگزین تغییر مسیر syslog خواهد شد.

پارامتر اختیاری progname باعث می‌شود OpenVPN نام برنامه خود را به صورت progname به ثبت‌کننده سیستم گزارش دهد. این امر می‌تواند در پیوند دادن پیام‌های OpenVPN در پرونده syslog با تونل‌های خاص مفید باشد. در صورت مشخص نشدن، progname به صورت پیش‌فرض برابر با openvpn است.

هنگامی که OpenVPN با گزینه --daemon اجرا می‌شود، تلاش می‌کند تبدیل به دیمن شدن را تا تکمیل اکثر توابع مقداردهی اولیه که قادر به ایجاد خطاهای مهلک هستند، به تاخیر بیندازد. این بدان معناست که اسکریپت‌های مقداردهی اولیه می‌توانند وضعیت بازگشتی دستور openvpn را برای یک نشانه نسبتاً قابل اعتماد از اینکه آیا دستور به درستی مقداردهی اولیه شده و وارد حلقه رخداد ارسال بسته شده است یا خیر، بررسی کنند.

در OpenVPN، اکثریت قریب به اتفاق خطاهایی که پس از مقداردهی اولیه رخ می‌دهند، غیرمهلک هستند.

نکته: به محض اینکه OpenVPN به دیمن تبدیل شد، دیگر نمی‌تواند نام کاربری، گذرواژه یا عبارت عبور کلید را درخواست کند. این امر پیامدهای خاصی دارد، از جمله اینکه استفاده از یک کلید خصوصی محافظت‌شده با گذرواژه با شکست مواجه خواهد شد، مگر اینکه از گزینه --askpass برای اعلام به OpenVPN جهت درخواست عبارت عبور استفاده شود.

علاوه بر این، استفاده از --daemon همراه با --auth-user-pass (وارد شده در کنسول) و --auth-nocache به محض انجام مذاکره مجدد کلید (و احراز هویت مجدد) با شکست مواجه خواهد شد.

--disable-occ
منسوخ‌شده غیرفعال‌سازی "بررسی سازگاری گزینه‌ها" (OCC) در پیکربندی‌هایی که از TLS استفاده نمی‌کنند.

در صورت شناسایی ناسازگاری گزینه‌ها بین همتاها، پیام هشداری ارسال نمی‌شود. یک مثال از ناسازگاری گزینه زمانی است که یک همتا از --dev tun و همتای دیگر از --dev tap استفاده کند.

استفاده از این گزینه توصیه نمی‌شود، اما به‌عنوان راه‌حلی موقت در شرایطی که نسخه جدید OpenVPN باید به یک نسخه قدیمی متصل شود فراهم شده است.

فعال‌سازی قابلیت موتور رمزنگاری سخت‌افزاری OpenSSL.

نحوهای معتبر:

engine
engine engine-name

اگر engine-name مشخص شده باشد، از یک موتور رمزنگاری خاص استفاده می‌شود. از گزینه مستقل --show-engines برای فهرست کردن موتورهای رمزنگاری پشتیبانی‌شده توسط OpenSSL استفاده کنید.

مشابه گزینه --user، این گزینه شناسه گروه (GID) فرایند OpenVPN را پس از راه‌اندازی اولیه به group تغییر می‌دهد.
نحو معتبر:
ignore-unknown-option opt1 opt2 opt3 ... optN

هنگامی که یکی از گزینه‌های opt1 ... optN در پرونده پیکربندی مشاهده شود، اگر این نسخه از OpenVPN از آن گزینه پشتیبانی نکند، پردازش پرونده پیکربندی شکست نمی‌خورد. برای پشتیبانی از تعداد بیشتری از گزینه‌ها جهت نادیده‌گرفتن، می‌توان چندین گزینه --ignore-unknown-option را مشخص کرد.

این گزینه باید با احتیاط استفاده شود، زیرا دلایل امنیتی موجهی وجود دارد که اگر OpenVPN مشکلی در پرونده پیکربندی تشخیص دهد متوقف شود. با این حال، دلایل موجهی نیز وجود دارد که ویژگی‌های نرم‌افزاری جدید هنگام مواجهه با نسخه‌های قدیمی‌تر به‌آرامی تنزل یابند.

گزینه --ignore-unknown-option از OpenVPN 2.3.3 به بعد در دسترس است.

تنظیم دستور جایگزین برای اجرا به جای دستور پیش‌فرض iproute2. ممکن است به‌منظور اجرای OpenVPN در یک محیط بدون دسترسی ممتاز استفاده شود.
ذخیره Exported Keying Material [RFC5705] با اندازه len بایت (باید بین ۱۶ و ۴۰۹۵ بایت باشد) با استفاده از label در محیط (exported_keying_material) جهت استفاده توسط افزونه‌ها در فراخوانی برگشتی OPENVPN_PLUGIN_TLS_FINAL.

نحو معتبر:

keying-material-exporter label len

توجه داشته باشید که labels برون‌ریزنده پتانسیل تداخل با برچسب‌های موجود PRF را دارند. به‌منظور جلوگیری از این مسئله، برچسب‌ها باید با EXPORTER آغاز شوند.

غیرفعال‌سازی صفحه‌بندی حافظه با فراخوانی تابع POSIX mlockall. مستلزم این است که OpenVPN در ابتدا با دسترسی root اجرا شود (اگرچه OpenVPN می‌تواند بعداً با استفاده از گزینه --user شناسه کاربری (UID) خود را کاهش دهد).

استفاده از این گزینه تضمین می‌کند که داده‌های کلید و داده‌های تونل به دلیل عملیات صفحه‌بندی حافظه مجازی که در اکثر سیستم‌های عامل مدرن رخ می‌دهد، هرگز بر روی دیسک نوشته نشوند. این گزینه تضمین می‌کند حتی اگر مهاجمی بتواند سیستم اجراکننده OpenVPN را هک کند، نتواند پرونده swap سیستم را برای بازیابی کلیدهای موقت (ephemeral) قبلی که برای بازه‌ای زمانی تحت کنترل گزینه‌های --reneg (به زیر مراجعه کنید) استفاده و سپس دور ریخته شده‌اند، پویش کند.

نقطه ضعف استفاده از --mlock این است که میزان حافظه فیزیکی موجود برای سایر برنامه‌ها را کاهش می‌دهد.

محدودیت میزان حافظه‌ای که می‌توان قفل کرد و نحوه اعمال این محدودیت به سیستم‌عامل وابسته است. در لینوکس محدودیت پیش‌فرضی که یک فرایند غیرممتاز می‌تواند قفل کند (RLIMIT_MEMLOCK) پایین است، و اگر دسترسی‌ها بعداً کاهش یابند، تخصیص‌های حافظه در آینده به‌احتمال بسیار زیاد با شکست مواجه خواهند شد. این محدودیت را می‌توان با استفاده از ulimit یا دستورات systemd بسته به نحوه راه‌اندازی OpenVPN افزایش داد.

اگر پلتفرم دارای فراخوانی سیستمی getrlimit(2) باشد، OpenVPN پیش از فراخوانی mlockall(2) میزان حافظه قابل قفل با mlock را بررسی می‌کند و اگر کمتر از ۱۰۰ مگابایت پیکربندی شده باشد، تلاش می‌کند محدودیت را به ۱۰۰ مگابایت افزایش دهد. مقدار ۱۰۰ مگابایت تا حدی دلخواه است - برای یک استقرار متوسط OpenVPN کافی است، اما اگر تعداد کلاینت‌های هم‌زمان بالا باشد، مصرف حافظه ممکن است فراتر از آن برود.

تغییر اولویت فرایند پس از راه‌اندازی اولیه (n بزرگ‌تر از 0 اولویت پایین‌تر و n کمتر از صفر اولویت بالاتر است).
بارگیری فهرست ارائه‌دهندگان (OpenSSL). این گزینه عمدتاً برای استفاده از یک ارائه‌دهنده خارجی جهت مدیریت کلید مانند tpm2-openssl یا برای بارگیری ارائه‌دهنده legacy با دستور زیر کاربرد دارد:
--providers legacy default

رفتار تغییر این گزینه در حین ارسال SIGHUP ممکن است مناسب نباشد. اگر نیاز به تغییر/افزودن/حذف این گزینه دارید، OpenVPN را به‌طور کامل بازراه‌اندازی کنید.

کنترل اینکه سیگنال‌های SIGUSR1 تولیدشده به صورت داخلی یا خارجی به SIGHUP (راه‌اندازی مجدد بدون حفظ وضعیت) یا SIGTERM (خروج) نگاشت مجدد شوند یا خیر.

signal می‌تواند روی SIGHUP یا SIGTERM تنظیم شود. به صورت پیش‌فرض، هیچ نگاشت مجددی رخ نمی‌دهد.

این دستورالعمل امکان کنترل در سطح خط‌مشی (policy) را بر استفادهٔ OpenVPN از برنامه‌ها و اسکریپت‌های خارجی فراهم می‌کند. مقادیر کمتر level محدودکننده‌تر و مقادیر بالاتر آزادتر هستند. تنظیمات برای level:
0
اکیداً بدون فراخوانی برنامه‌های خارجی.
1
(پیش‌فرض) تنها فراخوانی فایل‌های اجرایی توکار مانند ifconfig، ip، route، یا netsh.
2
اجازه فراخوانی فایل‌های اجرایی توکار و اسکریپت‌های تعریف‌شده توسط کاربر.
3
اجازه ارسال گذرواژه‌ها به اسکریپت‌ها از طریق متغیرهای محیطی (به طور بالقوه ناامن).

نسخه‌های OpenVPN قبل از v2.3 همچنین از یک پرچم method پشتیبانی می‌کردند که مشخص می‌کرد OpenVPN چگونه باید دستورات و اسکریپت‌های خارجی را فراخوانی کند. این می‌توانست execve یا system باشد. از نسخه OpenVPN 2.3 به بعد، این پرچم دیگر پذیرفته نمی‌شود.

برخی دستورالعمل‌ها مانند --up اجازه می‌دهند گزینه‌ها به اسکریپت خارجی ارسال شوند. در این موارد اطمینان حاصل کنید که نام اسکریپت حاوی هیچ فاصله‌ای (space) نباشد، در غیر این صورت تجزیه‌کنندهٔ پیکربندی دچار خطا خواهد شد چون نمی‌تواند تشخیص دهد نام اسکریپت در کجا پایان می‌یابد و گزینه‌های اسکریپت از کجا شروع می‌شوند.

در ویندوز هنگام اجرای پرونده‌های غیر اجرایی، داشتن مسیر کامل به مفسر اسکریپت یک الزام قطعی است. این مورد برای پرونده‌های اجرایی مانند فایلهای .exe، .com، .bat یا .cmd لازم نیست. به عنوان مثال، اگر یک اسکریپت Visual Basic دارید، باید از این نحو استفاده کنید:

--up 'C:\\Windows\\System32\\wscript.exe C:\\Program\ Files\\OpenVPN\\config\\my-up-script.vbs'

لطفاً به علامت‌های نقل‌قول تکی و اسکیپ کردن بک‌اسلش‌ها (\\) و نویسهٔ فاصله توجه داشته باشید.

اعمال context مربوط به SELinux پس از مقداردهی اولیه. این اساساً به لطف SELinux، امکان محدود کردن حقوق دسترسی OpenVPN تنها به عملیات I/O شبکه را فراهم می‌کند. این فراتر از --user و --chroot عمل می‌کند، چرا که آن دو با وجود اینکه ویژگی‌های امنیتی عالی هستند، متأسفانه در برابر ارتقای سطح دسترسی (privilege escalation) از طریق اکسپلویت یک فراخوانی سیستمیِ آسیب‌پذیر محافظت نمی‌کنند. البته می‌توانید هر سه را ترکیب کنید، اما توجه داشته باشید از آنجا که setcon نیاز به دسترسی به /proc دارد، باید آن را درون پوشه chroot فراهم کنید (مثلاً با mount --bind).

از آنجا که عملیات setcon تا پس از مقداردهی اولیه به تعویق می‌افتد، OpenVPN می‌تواند تنها به فراخوانی‌های سیستمی مربوط به شبکه محدود شود، در حالی که با اعمال context پیش از راه‌اندازی (مانند موردی که برای OpenVPN در SELinux Reference Policies ارائه شده است) مجبور خواهید بود مواردی را که فقط هنگام مقداردهی اولیه لازم هستند نیز مجاز کنید.

مانند chroot، اجرای اسکریپت‌ها یا راه‌اندازی‌های مجدد پس از عملیات setcon می‌تواند پیچیدگی‌هایی ایجاد کند، به همین دلیل باید استفاده از گزینه --persist-tun را جداً مد نظر قرار دهید.

نوشتن وضعیت عملیاتی در file هر n ثانیه یک‌بار. در صورت مشخص نشدن، n به صورت پیش‌فرض 60 است.

نحوهای معتبر:

status file
status file n

همچنین با ارسال سیگنال SIGUSR2 می‌توان وضعیت را در syslog نوشت.

با فعال بودن قابلیت چند-کاربری (multi-client) روی یک سرور، پرونده وضعیت شامل فهرستی از کلاینت‌ها و یک جدول مسیریابی است. در این حالت قالب خروجی را می‌توان با گزینه --status-version کنترل کرد.

برای کلاینت‌ها یا نمونه‌های در حال اجرا در حالت point-to-point، این پرونده شامل آمار ترافیک خواهد بود.

--status-version n
تنظیم شماره نسخه قالب پرونده وضعیت به n.

این گزینه تنها بر پرونده وضعیت در سرورهایی تأثیر می‌گذارد که قابلیت multi-client روی آن‌ها فعال است. مقادیر معتبر برای نسخه وضعیت:

1
قالب سنتی (پیش‌فرض). فهرست کلاینت شامل فیلدهای زیر است که با کاما از هم جدا شده‌اند: Common Name، Real Address، Bytes Received، Bytes Sent، Connected Since.
2
قالبی مطمئن‌تر برای پردازش خارجی. در مقایسه با نسخه 1، فهرست کلاینت شامل چند فیلد اضافی است: Virtual Address، Virtual IPv6 Address، Username، Client ID، Peer ID، Data Channel Cipher. نسخه‌های آینده ممکن است تعداد فیلدها را افزایش دهند.
3
همانند 2، اما فیلدها با تب (tab) جدا شده‌اند.
یک خودآزمایی (self-test) از گزینه‌های رمزنگاری OpenVPN با رمزگذاری و رمزگشایی بسته‌های آزمایشی با استفاده از گزینه‌های رمزنگاری کانال داده که در بالا مشخص شده‌اند، انجام می‌دهد. این گزینه برای کارکرد به یک همتا (peer) نیاز ندارد، بنابراین می‌تواند بدون --dev یا --remote مشخص شود.

کاربرد معمول --test-crypto چیزی شبیه به این خواهد بود:

openvpn --test-crypto

یا

openvpn --test-crypto --verb 9

این گزینه برای آزمایش OpenVPN پس از پورت شدن آن به یک بستر (پلتفرم) جدید، یا جداسازی مشکلات در کامپایلر، کتابخانه رمزنگاری OpenSSL یا کد رمزنگاری OpenVPN بسیار مفید است. از آنجا که این یک حالت خودآزمایی است، مشکلات رمزگذاری و احراز هویت را می‌توان مستقل از مسائل شبکه و تونل اشکال‌زدایی کرد.

نسخه‌های قدیمی‌تر OpenVPN از آرگومان --secret برای مشخص کردن یک کلید ایستا برای این آزمایش استفاده می‌کردند. نسخه‌های جدیدتر یک کلید تصادفی برای آزمایش تولید می‌کنند.

یک دایرکتوری dir را برای پرونده‌های موقت به جای مقدار پیش‌فرض TMPDIR (یا "/tmp" در صورت تنظیم نشدن) مشخص می‌کند. توجه داشته باشید که این مسیر باید پس از واگذاری دسترسی‌های ریشه (root privileges) توسط پردازش اصلی قابل نوشتن باشد.

این دایرکتوری برای ارتباط با اسکریپت‌ها و افزونه‌ها استفاده خواهد شد:

  • اسکریپت‌های --client-connect و قلاب افزونه OPENVPN_PLUGIN_CLIENT_CONNECT برای تولید پویای پیکربندی ویژه کلاینت client_connect_config_file و بازگرداندن موفقیت/شکست از طریق client_connect_deferred_file هنگام استفاده از روش اتصال کلاینت معوق (deferred)
  • قلاب‌های افزونه OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY که موفقیت/شکست را از طریق auth_control_file هنگام استفاده از روش احراز هویت معوق و احراز هویت در انتظار از طریق auth_pending_file بازمی‌گردانند.
مقاومت در برابر پیش‌بینی (prediction resistance) را در RNG مربوط به mbed TLS فعال می‌کند.

فعال‌سازی مقاومت در برابر پیش‌بینی باعث می‌شود RNG در هر فراخوانی برای داده تصادفی، مقداردهی اولیه مجدد (reseed) شود. مقداردهی مجدد مکرر می‌تواند استخر آنتروپی (entropy pool) هسته را به سرعت تخلیه کند.

اگر به این گزینه نیاز دارید، لطفاً اجرای دیمنی را در نظر بگیرید که به استخر هسته، آنتروپی اضافه می‌کند.

شناسه کاربری (User ID) پردازش OpenVPN را پس از مقداردهی اولیه به user تغییر داده و دسترسی‌ها را در طول پردازش کاهش می‌دهد. این گزینه برای محافظت از سیستم در حالتی که یک طرف متخاصم بتواند کنترل یک نشست OpenVPN را به دست آورد مفید است. اگرچه ویژگی‌های امنیتی OpenVPN این اتفاق را نامحتمل می‌سازد، اما به عنوان خط دفاعی دوم ارائه شده است.

با تنظیم user روی یک کاربر بدون دسترسی ویژه که به اجرای openvpn اختصاص داده شده است، میزان آسیبی که طرف متخاصم می‌تواند ایجاد کند محدود می‌شود. البته پس از سلب دسترسی‌ها، نمی‌توانید آن‌ها را به یک نشست OpenVPN بازگردانید. این بدان معناست که برای مثال، اگر می‌خواهید دیمن OpenVPN را با یک سیگنال SIGUSR1 بازنشانی کنید (برای نمونه در پاسخ به بازنشانی DHCP)، باید از یک یا چند گزینه از گزینه‌های --persist استفاده کنید تا اطمینان حاصل شود که OpenVPN برای راه‌اندازی مجدد نیازی به اجرای هیچ عملیات دارای دسترسی ویژه ندارد (مانند خواندن مجدد پرونده‌های کلید یا اجرای ifconfig روی دستگاه TUN).

نکته: نسخه‌های قبلی openvpn از nobody به عنوان نمونه کاربر بدون دسترسی ویژه استفاده می‌کردند. استفاده واقعی از این کاربر توصیه نمی‌شود زیرا معمولاً از قبل توسط سایر سرویس‌های سیستم استفاده می‌شود. همیشه یک کاربر اختصاصی برای openvpn ایجاد کنید.

شناسه پردازش اصلی (PID) مربوط به OpenVPN را در پرونده file می‌نویسد.

مقادیر parms را در خروجی لاگ پژواک (echo) می‌کند.

برای استفاده جهت ارسال پیام‌ها به یک برنامه کنترل‌کننده که خروجی لاگ OpenVPN را دریافت می‌کند طراحی شده است.

خطاها را به جای stdout به stderr ارسال می‌کند، مگر اینکه خروجی لاگ توسط یکی از گزینه‌های --log تغییر مسیر داده شده باشد.
پیام‌های گزارش را در پرونده file خروجی می‌دهد، از جمله خروجی به stdout/stderr که توسط اسکریپت‌های فراخوانی‌شده تولید می‌شود. اگر پرونده file از قبل وجود داشته باشد، محتوای آن پاک (truncate) می‌شود. این گزینه بلافاصله پس از تجزیه در خط فرمان اعمال می‌شود و در صورت تعیین --daemon، جایگزین خروجی syslog خواهد شد. این گزینه در تمام طول چرخه اجرای OpenVPN پایدار است و با SIGHUP، SIGUSR1 یا --ping-restart بازنشانی نخواهد شد.

توجه داشته باشید که در ویندوز، هنگامی که OpenVPN به عنوان یک سرویس راه‌اندازی می‌شود، ثبت گزارش به صورت پیش‌فرض و بدون نیاز به مشخص کردن این گزینه انجام می‌گیرد.

--log-append file
پیام‌های گزارش را به انتهای پرونده file اضافه می‌کند. اگر پرونده file وجود نداشته باشد، ایجاد خواهد شد. این گزینه دقیقاً مانند --log عمل می‌کند با این تفاوت که به جای بازنویسی و پاک کردن، به انتهای پرونده لاگ اضافه می‌کند.
همیشه برچسب‌های زمانی و پرچم‌های پیام را در پیام‌های لاگ بنویس، حتی زمانی که در حالت عادی پیشوند نمی‌خورند. به طور خاص، این مورد برای پیام‌های لاگ ارسال‌شده به stdout اعمال می‌شود.
ثبت حداکثر n پیام متوالی در همان دسته‌بندی. این گزینه برای محدود کردن لاگ‌های تکراری انواع پیام‌های مشابه مفید است.
--mute-replay-warnings
بی‌صدا کردن خروجی هشدارهای بازپخش (replay)، که یک هشدار نادرست رایج در شبکه‌های WiFi هستند. این گزینه امنیت کد حفاظت در برابر بازپخش را حفظ می‌کند بدون اینکه پرگویی‌های مربوط به هشدارهای بسته‌های تکراری را به همراه داشته باشد.
جلوگیری از نوشتن برچسب‌های زمانی در پیام‌های لاگ، حتی زمانی که در حالت عادی پیشوند می‌خورند. به طور خاص، این مورد برای پیام‌های لاگ ارسال‌شده به stdout اعمال می‌شود.
هدایت خروجی لاگ به لاگر سیستم (syslog)، اما بدون تبدیل شدن به دیمن. برای توضیح پارامتر progname به دستورالعمل --daemon در بالا مراجعه کنید.
تنظیم پرگویی (verbosity) خروجی روی n (پیش‌فرض 1). هر سطح تمام اطلاعات سطوح قبلی را نشان می‌دهد. سطح 3 در صورتی که یک خلاصه‌ی خوب از آنچه رخ می‌دهد بدون غرق شدن در خروجی می‌خواهید، پیشنهاد می‌شود.
0
بدون خروجی به جز خطاهای مهلک.
1 تا 4
محدوده استفاده عادی.
5
نویسه‌های R و W را برای هر خواندن و نوشتن بسته در کنسول خروجی می‌دهد، حروف بزرگ برای بسته‌های TCP/UDP و حروف کوچک برای بسته‌های TUN/TAP استفاده می‌شوند.
6 تا 11
محدوده اطلاعات اشکال‌زدایی (debug) (برای اطلاعات بیشتر در مورد سطوح اشکال‌زدایی، پرونده errlevel.h را در کد منبع ببینید).

گزینه‌های این بخش بر ویژگی‌های موجود در پروتکل ارتباطی (wire protocol) اوپن‌وی‌پی‌ان تأثیر می‌گذارند. بسیاری از این گزینه‌ها همچنین گزینه‌های رمزنگاری کانال داده را در پروتکل ارتباطی OpenVPN تعریف می‌کنند. این گزینه‌ها باید به شیوه‌ای سازگار بین هر دو سمت محلی و دوردست پیکربندی شوند.

همان‌طور که در گزینه --compress توضیح داده شده است، فشرده‌سازی یک گزینه بالقوه خطرناک است. این گزینه امکان کنترل رفتار OpenVPN را در هنگام استفاده و مجاز بودن فشرده‌سازی فراهم می‌کند.

آرگومان mode می‌تواند یکی از مقادیر زیر باشد:

برنامه OpenVPN فقط بسته‌های ورودی را از حالت فشرده خارج می‌کند اما بسته‌های خروجی را فشرده نمی‌کند. این همچنین امکان مهاجرت جهت غیرفعال‌سازی فشرده‌سازی را فراهم می‌کند، زمانی که تغییر هم‌زمان پیکربندی سرور و کلاینت برای حذف فشرده‌سازی گزینه‌ای امکان‌پذیر نیست.
برنامه OpenVPN هرگونه فشرده‌سازی را رد خواهد کرد. اگر بارگذاری کانال داده (data-channel offloading) فعال باشد، OpenVPN علاوه بر این فریم‌بندی فشرده‌سازی (stub) را نیز رد خواهد کرد.
منسوخ‌شده این گزینه یک نام مستعار برای asym است. پیش از این فشرده‌سازی را برای بسته‌های خروجی فعال می‌کرد، اما OpenVPN اکنون هرگز بسته‌ها را هنگام ارسال فشرده نمی‌کند.
احراز اصالت بسته‌های کانال داده و (در صورت فعال بودن) بسته‌های کانال کنترل tls-auth با HMAC با استفاده از الگوریتم خلاصه پیام alg. (پیش‌فرض SHA1 است). الگوریتم HMAC یک الگوریتم احراز اصالت پیام (MAC) رایج است که از یک رشته داده، یک الگوریتم هش امن و یک کلید برای تولید یک امضای دیجیتال استفاده می‌کند.

پروتکل کانال داده OpenVPN از روش encrypt-then-mac استفاده می‌کند (یعنی ابتدا یک بسته را رمزگذاری می‌کند سپس متن رمزشده حاصل را HMAC می‌کند)، که از حملات padding oracle جلوگیری می‌کند.

اگر یک حالت رمز AEAD (مانند GCM) انتخاب شود، الگوریتم --auth مشخص‌شده برای کانال داده نادیده گرفته می‌شود و روش احراز اصالت رمز AEAD به جای آن استفاده می‌شود. توجه داشته باشید که alg همچنان خلاصه استفاده‌شده برای tls-auth را تعیین می‌کند.

در حالت رمزنگاری کلید ایستا (static-key)، کلید HMAC در پرونده کلید تولید شده توسط --genkey گنجانده می‌شود. در حالت TLS، کلید HMAC به صورت پویا تولید شده و بین همتاها از طریق کانال کنترل TLS به اشتراک گذاشته می‌شود. اگر OpenVPN بسته‌ای با HMAC نامعتبر دریافت کند، آن بسته را دور می‌اندازد (drop). معمولاً HMAC مقدار ۱۶ یا ۲۰ بایت به هر بسته اضافه می‌کند. برای غیرفعال کردن احراز اصالت، alg=none را تنظیم کنید.

برای اطلاعات بیشتر درباره HMAC به https://tools.ietf.org/html/rfc2104 مراجعه کنید.

این گزینه دیگر نباید در حالت TLS استفاده شود و هنوز به دو دلیل وجود دارد:
  • سازگاری با پیکربندی‌های قدیمی که هنوز آن را به همراه دارند؛
  • اجازه دادن به کاربرانی که به همتاهای OpenVPN قدیمی‌تر از نسخه 2.6.0 متصل می‌شوند تا --cipher را به همان روش طرف مقابل پیکربندی کنند. این می‌تواند از هشدارهای اندازه MTU/فریم جلوگیری کند.

پیش از 2.4.0، این گزینه برای انتخاب رمزی که باید روی کانال داده پیکربندی شود استفاده می‌شد، با این حال، نسخه‌های بعدی معمولاً این دستورالعمل را به نفع یک رمز مذاکره‌شده نادیده می‌گرفتند. از نسخه 2.6.0 به بعد، این گزینه هنگام پیکربندی رمز در حالت TLS همیشه نادیده گرفته می‌شود.

اگر مایل به مشخص کردن رمز مورد استفاده در کانال داده هستید، لطفاً --data-ciphers (برای مذاکره عادی) و --data-ciphers-fallback (برای یک گزینه جایگزین زمانی که مذاکره نمی‌تواند انجام شود چون همتای دیگر قدیمی است یا مذاکره را غیرفعال کرده است) را ببینید.

برای مشاهده رمزهای موجود در OpenVPN، از گزینه --show-ciphers استفاده کنید.

برای غیرفعال کردن رمزنگاری، alg را روی none تنظیم کنید.

منسوخ‌شده فعال‌سازی یک الگوریتم فشرده‌سازی. فشرده‌سازی معمولاً توصیه نمی‌شود. تونل‌های VPN که از فشرده‌سازی استفاده می‌کنند در معرض بردار حمله VORACLE هستند. همچنین پارامتر migrate در زیر را ببینید.

پارامتر algorithm می‌تواند lzo، lz4، lz4-v2، stub، stub-v2، migrate یا خالی باشد. LZO و LZ4 الگوریتم‌های فشرده‌سازی متفاوتی هستند که LZ4 عموماً بهترین کارایی را با کمترین مصرف CPU ارائه می‌دهد.

گونه‌های lz4-v2 و stub-v2 چارچوب‌بندی بهتری را پیاده‌سازی می‌کنند که در صورت عدم امکان فشرده‌سازی بسته‌ها، سرباری اضافه نمی‌کند. تمام گونه‌های دیگر در مقایسه با نبود چارچوب‌بندی فشرده‌سازی، همیشه یک بایت اضافی برای چارچوب‌بندی می‌افزایند.

به‌ویژه stub-v2 اساساً با نبود فشرده‌سازی و نبود چارچوب‌بندی فشرده‌سازی یکسان است زیرا سرآیند آن نسخه ۵ IP را در پیکربندی tun مشخص می‌کند و می‌تواند برای غیرفعال‌سازی کامل فشرده‌سازی در کلاینت‌ها استفاده (یا سوءاستفاده) شود. (گزینه migrate در زیر را ببینید)

اگر پارامتر algorithm مقدار stub، stub-v2 یا خالی باشد، فشرده‌سازی خاموش خواهد شد، اما چارچوب‌بندی بسته برای فشرده‌سازی همچنان فعال می‌ماند و اجازه می‌دهد تنظیمات متفاوتی بعداً push شود. علاوه بر این، stub و stub-v2 اعلان پشتیبانی از فشرده‌سازی lzo و lz4 را از طریق متغیرهای IV_ به سرور غیرفعال می‌کنند.

نکته: گزینه stub (یا خالی) با گزینه قدیمی‌تر --comp-lzo no سازگار نیست.

استفاده از migrate به عنوان الگوریتم فشرده‌سازی، حالت مهاجرت ویژه‌ای را فعال می‌کند. این قابلیت امکان گذار از گزینه‌های --compress/--comp-lzo به نبود فشرده‌سازی را فراهم می‌سازد. این گزینه سرور را روی حالت بدون فشرده‌سازی تنظیم می‌کند و سرور برای تمام کلاینت‌هایی که فشرده‌سازی در پیکربندی آن‌ها وجود ندارد، رفتاری یکسان با سروری بدون گزینه فشرده‌سازی خواهد داشت. با این حال، اگر کلاینتی شناسایی شود که نشان‌دهنده استفاده از فشرده‌سازی باشد (از طریق OCC)، سرور در صورت پشتیبانی کلاینت به‌طور خودکار --push compress stub-v2 را به پیکربندی ویژه کلاینت اضافه می‌کند و در غیر این صورت به comp-lzo no تغییر وضعیت داده و --push comp-lzo را به پیکربندی ویژه کلاینت اضافه می‌کند.

*ملاحظات امنیتی*

فشرده‌سازی و رمزنگاری ترکیبی حساس است. اگر یک مهاجم بتواند (بخش‌هایی از) متن آشکار بسته‌های حاوی اطلاعات محرمانه را بداند یا کنترل کند، در صورت فعال بودن فشرده‌سازی ممکن است بتواند اطلاعات محرمانه را استخراج کند. برای مثال حملات CRIME و BREACH روی TLS و VORACLE روی VPNها را ببینید که از این روش برای شکستن رمزنگاری سوءاستفاده می‌کنند. اگر کاملاً مطمئن نیستید که موارد بالا در مورد ترافیک شما صدق نمی‌کند، توصیه می‌شود فشرده‌سازی را فعال نکنید.

به همین دلیل پشتیبانی از فشرده‌سازی از نسخه‌های کنونی OpenVPN حذف شده است. این برنامه همچنان بسته‌های فشرده‌شده دریافتی از طریق اتصال VPN را از حالت فشرده خارج می‌کند اما هرگز هیچ بسته خروجی را فشرده نخواهد کرد.

منسوخ‌شده فعال‌سازی الگوریتم فشرده‌سازی LZO. فشرده‌سازی معمولاً توصیه نمی‌شود. تونل‌های VPN که از فشرده‌سازی استفاده می‌کنند در معرض بردار حمله VORACLE هستند.

به طرف دیگر اتصال اجازه می‌دهد از فشرده‌سازی LZO استفاده کند. به دلیل تفاوت در قالب بسته، این ممکن است ۱ بایت اضافی به ازای هر بسته اضافه کند. در نسخه‌های کنونی OpenVPN هیچ فشرده‌سازی واقعی رخ نخواهد داد.

مقدار mode می‌تواند yes، no یا adaptive باشد اما دیگر هیچ تغییر رفتاری واقعی نخواهد داشت.

منسوخ‌شده این گزینه دیگر هیچ تأثیری ندارد زیرا نسخه‌های کنونی OpenVPN هرگز بسته‌های خروجی را فشرده نمی‌کنند.
روشی جایگزین برای تعیین پارامتر اختیاری direction برای گزینه --tls-auth. هنگام استفاده از پرونده‌های درون‌خطی مفید است (بخش پرونده‌های درون‌خطی را ببینید).
محدود کردن رمزهای مجاز برای مذاکره به رمزهای موجود در cipher-list. پارامتر cipher-list فهرستی از رمزهای جداشده با دونقطه (:) است و در صورت در دسترس بودن Chacha20-Poly1305 به صورت پیش‌فرض AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305 و در غیر این صورت AES-256-GCM:AES-128-GCM است.

برای سرورها، نخستین رمز از cipher-list که توسط کلاینت نیز پشتیبانی شود، به کلاینت‌هایی که از مذاکره رمز پشتیبانی می‌کنند push خواهد شد.

برای جزئیات بیشتر بخش مربوط به Data channel cipher negotiation را ببینید. به‌ویژه اگر نیاز به پشتیبانی از کلاینت‌های با نسخه‌های قدیمی‌تر از OpenVPN 2.4 دارید!

از OpenVPN 2.6 به بعد، یک رمز می‌تواند با پیشوند ? مشخص شود تا به عنوان اختیاری علامت‌گذاری گردد. این امکان را فراهم می‌کند تا رمزهایی در فهرست قرار گیرند که ممکن است در همه پلتفرم‌ها موجود نباشند. برای نمونه AES-256-GCM:AES-128-GCM:?CHACHA20-POLY1305 تنها در صورتی Chacha20-Poly1305 را فعال می‌کند که کتابخانه SSL زیربنایی (و پیکربندی آن) از آن پشتیبانی کند.

از OpenVPN 2.7 به بعد کلیدواژه ویژه DEFAULT می‌تواند در رشته استفاده شود و با رمزهای پیش‌فرض جایگزین گردد. این می‌تواند برای افزودن یک رمز مجاز دیگر به فهرست رمزهای مجاز استفاده شود، مانند DEFAULT:AES-192-CBC برای استفاده از رمزهای پیش‌فرض و همچنین مجاز شمردن AES-192-CBC.

مذاکره رمز فقط در حالت کلاینت-سرور فعال است. یعنی اگر --mode روی server تنظیم شده باشد (سمت سرور، با تعیین --server اعمال می‌شود)، یا اگر --pull مشخص شده باشد (سمت کلاینت، با تعیین --client اعمال می‌شود).

اگر در طول مذاکره رمز، هیچ رمز مشترکی یافت نشود، اتصال قطع می‌شود. برای پشتیبانی از کلاینت‌های قدیمی/سرورهای قدیمی که از مذاکره رمز پشتیبانی نمی‌کنند، --data-ciphers-fallback را ببینید.

اگر --compat-mode روی نسخه‌ای قدیمی‌تر از 2.5.0 تنظیم شده باشد، رمز مشخص‌شده توسط --cipher در صورت عدم وجود، به --data-ciphers الحاق خواهد شد.

طول این فهرست پس از تبدیل به رمزهای OpenVPN به ۱۲۷ نویسه محدود شده است.

این گزینه در OpenVPN 2.4 به نام --ncp-ciphers شناخته می‌شد اما برای انعکاس دقیق‌تر معنای آن، در OpenVPN 2.5 به --data-ciphers تغییر نام یافت.

پیکربندی رمزنگاری (cipher) مورد استفاده به عنوان پشتیبان، در صورتی که نتوانیم تعیین کنیم همتا (peer) مایل به استفاده از کدام رمزنگاری است.

این گزینه فقط باید برای اتصال به همتاهایی لازم باشد که نسخه OpenVPN 2.3 یا نسخه‌های قدیمی‌تر را اجرا می‌کنند و با --enable-small پیکربندی شده‌اند (معمولاً در مسیریاب‌ها یا سایر دستگاه‌های تعبیه‌شده استفاده می‌شود).

منسوخ شده این گزینه اجازه استفاده از OpenVPN بدون TLS را می‌دهد. این گزینه منسوخ شده است و در OpenVPN 2.8 حذف خواهد شد.
پنجره گذار -- کلید قدیمی ما می‌تواند به مدت این تعداد ثانیه پس از شروع مذاکره مجدد کلید جدید فعال بماند (پیش‌فرض 3600 ثانیه). این ویژگی امکان گذار روان از کلید قدیمی به جدید را فراهم می‌کند و توالی مذاکره مجدد کلید را از مسیر حیاتی ارسال داده‌های تونل حذف می‌کند.
این گزینه فقط در --mode server در دسترس است و استفاده از Keying Material Exporters (RFC 5705) را برای کلاینت‌ها اجباری می‌کند. این می‌تواند برای شبیه‌سازی محیطی استفاده شود که در آن کتابخانه رمزنگاری دیگر از روش قدیمی‌تر برای تولید کلیدهای کانال داده پشتیبانی نمی‌کند. این گزینه به عنوان یک گزینه آزمایشی در نظر گرفته شده است و ممکن است در نسخه‌های آینده OpenVPN بدون اطلاع قبلی حذف شود.

گزینه‌های کلاینت هنگام اتصال به یک سرور OpenVPN استفاده می‌شوند که در پیکربندی آن از --server، --server-bridge یا --mode server استفاده شده است.

به کلاینت اجازه می‌دهد نام‌های DNS را (به‌جای محدود بودن به آدرس‌های IP) برای --ifconfig، --route و --route-gateway از سرور دریافت کند.
هنگامی که این گزینه تنظیم شده باشد، OpenVPN بسته‌های ورودی tun را که مقصدی یکسان با میزبان دارند دور نمی‌اندازد (drop نمی‌کند).
--auth-token token
این گزینه‌ای نیست که مستقیماً در هیچ فایل پیکربندی استفاده شود، بلکه این گزینه از طریق یک اسکریپت --client-connect یا یک --plugin که به فراخوانی‌های OPENVPN_PLUGIN_CLIENT_CONNECT یا OPENVPN_PLUGIN_CLIENT_CONNECT_V2 متصل است ارسال (push) می‌شود. این گزینه امکان جایگزینی گذرواژه کلاینت با یک توکن احراز هویت را در طول چرخه حیات کلاینت OpenVPN فراهم می‌کند.

هر زمان که اتصال مجدداً مذاکره شود و اسکریپت --auth-user-pass-verify یا --plugin با استفاده از قلاب OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY فعال گردد، این توکن را به‌جای گذرواژه ارائه‌شده توسط کاربر منتقل می‌کند. توکن احراز هویت تنها با یک اتصال مجدد کامل قابل بازنشانی است که در آن سرور بتواند گزینه‌های جدید را به کلاینت ارسال کند. پس از تنظیم توکن احراز هویت، گذرواژه واردشده توسط کاربر هرگز حفظ نمی‌شود. اگر سمت سرور OpenVPN توکن احراز هویت را رد کند، کلاینت یک AUTH_FAILED دریافت کرده و ارتباط قطع می‌شود.

هدف از این کار، فعال‌سازی روش‌های احراز هویت دو مرحله‌ای مانند HOTP یا TOTP است تا بدون نیاز به دریافت کد OTP جدید در هر بار مذاکره مجدد اتصال استفاده شوند. کاربرد دیگر، ذخیره موقت داده‌های احراز هویت در سمت کلاینت بدون نیاز به ذخیره گذرواژه کاربر در حافظه در طول مدت نشست است.

برای استفاده از این ویژگی، اسکریپت --client-connect یا --plugin باید عبارت

push "auth-token UNIQUE_TOKEN_VALUE"

را در فایل/بافر داده‌های پیکربندی پویا قرار دهد. این کار باعث می‌شود سرور OpenVPN این مقدار را به کلاینت ارسال کند، که گذرواژه محلی را با UNIQUE_TOKEN_VALUE جایگزین می‌کند.

کلاینت‌های جدیدتر (+2.4.7) پس از یک احراز هویت ناموفق به روش گذرواژه اصلی بازمی‌گردند. کلاینت‌های قدیمی‌تر به استفاده از مقدار توکن ادامه داده و بر اساس --auth-retry عمل می‌کنند.

--auth-token-user base64username
گزینه همراه برای --auth-token. این گزینه امکان بازنویسی نام کاربری مورد استفاده کلاینت هنگام احراز هویت مجدد با auth-token را فراهم می‌کند. همچنین امکان استفاده از --auth-token را در ساختارهایی که معمولاً از نام کاربری و گذرواژه استفاده نمی‌کنند فراهم می‌سازد.

نام کاربری باید به صورت base64 کدگذاری شده باشد.

--auth-user-pass
احراز هویت با سرور با استفاده از نام کاربری/گذرواژه.

نحوهای معتبر:

auth-user-pass
auth-user-pass up

اگر up مشخص شده باشد، باید فایلی حاوی نام کاربری/گذرواژه در ۲ خط باشد یا پرچمی به نام username-only تا نشان دهد نباید گذرواژه‌ای درخواست شود. در حالت اول، اگر خط گذرواژه در فایل موجود نباشد، OpenVPN آن را درخواست خواهد کرد.

اگر up حذف شود، نام کاربری/گذرواژه از طریق کنسول درخواست خواهد شد.

این گزینه همچنین می‌تواند به صورت درون‌خطی قرار گیرد

<auth-user-pass>
username
[password]
</auth-user-pass>

که در آن گذرواژه اختیاری است، و در صورت عدم وجود، از طریق کنسول درخواست می‌شود.

پرچم username-only برای استفاده با احراز هویت SSO در نظر گرفته شده است. در این حالت از کاربر نام کاربری خواسته می‌شود ولی گذرواژه خیر. به‌جای آن، یک گذرواژه ساختگی [[BLANK]] به صورت داخلی تولید شده و به سرور ارسال می‌شود. برای چگونگی تأثیر این گزینه بر اعلان نام کاربری/گذرواژه از طریق واسط مدیریتی، به management-notes.txt مراجعه کنید. برای کنسول، این گزینه صرفاً اعلان درخواست گذرواژه را حذف می‌کند.

پرچم username-only نمی‌تواند همراه با تعبیه نام کاربری و/یا گذرواژه در فایل پیکربندی، یا هنگام خواندن آن‌ها از یک فایل خارجی استفاده شود. در چنین مواردی، اگر فقط نام کاربری مد نظر است و درخواستی برای گذرواژه لازم نیست، یک گذرواژه ساختگی مانند 'no_passsword' نیز باید تعبیه شود. این پرچم همچنین با گزینه --static-challenge و پروتکل قدیمی dynamic challenge ناسازگار است.

پیکربندی سرور باید یک اسکریپت --auth-user-pass-verify را برای اعتبارسنجی نام کاربری/گذرواژه ارائه‌شده توسط کلاینت تعیین کند.

--auth-retry type
نحوه پاسخ‌دهی OpenVPN به خطاهای اعتبارسنجی نام کاربری/گذرواژه را کنترل می‌کند، مانند پاسخ سمت کلاینت به پیام AUTH_FAILED از سوی سرور یا شکست در اعتبارسنجی گذرواژه کلید خصوصی.

معمولاً برای جلوگیری از مهلک (fatal) بودن خطاهای احراز هویت در سمت کلاینت و اجازه درخواست مجدد نام کاربری/گذرواژه در صورت بروز خطا استفاده می‌شود.

پیام AUTH_FAILED زمانی توسط سرور ایجاد می‌شود که کلاینت در احراز هویت --auth-user-pass شکست بخورد، یا زمانی که اسکریپت سمت سرور --client-connect هنگام تلاش کلاینت برای اتصال، وضعیت خطا برگرداند.

type می‌تواند یکی از موارد زیر باشد:

کلاینت با یک خطای مهلک خارج می‌شود (این حالت پیش‌فرض است).
کلاینت بدون درخواست مجدد برای نام کاربری/گذرواژه --auth-user-pass اتصال را دوباره امتحان می‌کند. از این گزینه برای کلاینت‌های بدون ناظر (unattended) استفاده کنید.
کلاینت قبل از تلاش مجدد برای برقراری اتصال، نام کاربری/گذرواژه --auth-user-pass و/یا گذرواژه کلید خصوصی را دوباره درخواست می‌کند.

توجه داشته باشید که با وجود اینکه این گزینه را نمی‌توان push کرد، می‌توان آن را از طریق رابط مدیریتی کنترل کرد.

یک دستورالعمل کمکی برای ساده‌سازی پیکربندی حالت کلاینت در OpenVPN. این دستورالعمل معادل موارد زیر است:
pull
tls-client
--client-nat args
این گزینه کلاینتِ قابل push، یک قانون NAT یک‌به‌یک و بدون وضعیت (stateless) روی آدرس‌های بسته‌ها (نه درگاه‌ها) تنظیم می‌کند و در مواردی مفید است که مسیرها یا تنظیمات ifconfig ارسال‌شده (pushed) به کلاینت باعث تداخل در آدرس‌دهی IP شوند.

نحو معتبر:

client-nat snat|dnat network netmask alias

نمونه‌ها:

client-nat snat 192.168.0.0 255.255.0.0 10.64.0.0
client-nat dnat 10.64.0.0 255.255.0.0 192.168.0.0

آرگومان‌های network و netmask (برای مثال 192.168.0.0 255.255.0.0) دید محلی منبع را از دیدگاه کلاینت تعریف می‌کنند، در حالی که alias (برای مثال 10.64.0.0) دید دوردست را از دیدگاه سرور با استفاده از همان netmask مشخص می‌کند.

برای منابع متعلق به کلاینت از snat (یا NAT مبدأ) و برای منابع دوردست از dnat (یا NAT مقصد) استفاده کنید.

برای دریافت اطلاعات اشکال‌زدایی که تبدیل آدرس‌های مبدأ/مقصد در بسته‌ها را نشان می‌دهد، مقدار --verb 6 را تنظیم کنید.

به مدت n ثانیه بین تلاش‌های اتصال صبر می‌کند (پیش‌فرض 1). تلاش‌های مکرر اتصال مجدد پس از ۵ بار تلاش برای هر remote، با دو برابر کردن زمان انتظار پس از هر تلاش ناموفق کُندتر می‌شوند.

نحوهای معتبر:

connect retry n
connect retry n max

اگر آرگومان اختیاری max مشخص شود، حداکثر زمان انتظار بر حسب ثانیه به آن مقدار محدود می‌شود (پیش‌فرض 300).

n تعداد دفعاتی را مشخص می‌کند که هر مدخل --remote یا <connection> امتحان می‌شود. تعیین n به صورت 1 هر مدخل را دقیقاً یک بار امتحان می‌کند. اتصال موفق این شمارنده را بازنشانی می‌کند (پیش‌فرض unlimited).
به --server-poll-timeout مراجعه کنید.
پیکربندی DNS کلاینت برای استفاده با اتصال.

نحوهای معتبر:

dns search-domains domain [domain ...]
dns server n address addr[:port] [addr[:port] ...]
dns server n resolve-domains domain [domain ...]
dns server n dnssec yes|optional|no
dns server n transport DoH|DoT|plain
dns server n sni server-name

دستورالعمل --dns search-domains یک یا چند نام دامنه را دریافت می‌کند تا به عنوان پسوندهای دامنه DNS اضافه شوند. اگر این گزینه چندین بار در یک پیکربندی تکرار شود، دامنه‌ها ضمیمه می‌شوند؛ بنابراین مثلاً نام‌های دامنه ارسال‌شده توسط سرور موارد تعریف‌شده محلی را اصلاح و تکمیل می‌کنند.

دستورالعمل --dns server برای پیکربندی سرور DNS به شماره n استفاده می‌شود. شناسه سرور n باید مقداری بین -128 و 127 باشد. برای گزینه‌های DNS server ارسال‌شده (pushed)، این مقدار باید بین 0 و 127 باشد. شناسه سرور برای گروه‌بندی گزینه‌ها و همچنین مرتب‌سازی فهرست سرورهای DNS پیکربندی‌شده استفاده می‌شود؛ شماره‌های کمتر در ابتدا قرار می‌گیرند. سرورهای DNS ارسال‌شده به کلاینت، سرورهای DNS پیکربندی‌شده قبلی با همان شناسه را جایگزین می‌کنند. تنها گروه گزینه‌های مربوط به کمترین شناسه سرور اعمال می‌شود.

گزینه address آدرس(های) IPv4 و/یا IPv6 سرور DNS را پیکربندی می‌کند. حداکثر هشت آدرس برای هر سرور DNS قابل تعیین است. به صورت اختیاری می‌توان یک درگاه را پس از علامت دونقطه اضافه کرد. در صورت افزودن درگاه، آدرس‌های IPv6 باید داخل قلاب (براکت) قرار گیرند.

گزینه resolve-domains یک یا چند دامنه DNS را برای تعریف یک پیکربندی split-dns یا dns-routing می‌گیرد که در آن فقط دامنه‌های مشخص‌شده توسط سرور تحلیل (resolve) می‌شوند. سیستم‌هایی که از پیکربندی دقیق و جزئی دامنه‌های DNS پشتیبانی نمی‌کنند، این تنظیم را نادیده خواهند گرفت.

گزینه dnssec برای پیکربندی اعتبارسنجی رکوردهای DNSSEC استفاده می‌شود. در حالی که عملکرد دقیق ممکن است برای تحلیل‌کننده‌ها (resolvers) در سیستم‌های مختلف متفاوت باشد، مقدار yes احتمالاً اعتبارسنجی را اجباری می‌کند، no آن را غیرفعال می‌سازد، و optional از آن به صورت فرصت‌طلبانه استفاده می‌کند.

گزینه transport قابلیت DNS-over-HTTPS (DoH) یا DNS-over-TLS (DoT) را برای یک سرور DNS فعال می‌کند. گزینه sni می‌تواند همراه با آن‌ها برای مشخص کردن server-name جهت TLS server name indication به کار رود.

هر سرور باید حداقل یک آدرس پیکربندی‌شده داشته باشد تا پیکربندی معتبر باشد. تمام گزینه‌های دیگر را می‌توان نادیده گرفت و حذف کرد.

توجه داشته باشید که ممکن است همه گزینه‌ها روی تمام پلتفرم‌ها پشتیبانی نشوند. به محض پیاده‌سازی پشتیبانی برای سیستم‌های مختلف، اطلاعات مربوط به نحوه برخورد با گزینه‌های پشتیبانی‌نشده به اینجا اضافه خواهد شد.

گزینه --dns در نهایت دستورالعمل --dhcp-option را منسوخ خواهد کرد. تا آن زمان، پیکربندی را در مکان‌هایی که --dhcp-option قرار می‌دهد جایگزین می‌کند، به طوری که --dns بر --dhcp-option اولویت خواهد داشت. بنابراین، امروزه می‌توان از --dns برای مهاجرت از --dhcp-option استفاده کرد.

فقط ویندوز:

1.
اگر tap-windows6 در حال استفاده باشد، سرورهای DNS به طور پیش‌فرض توسط DHCP تنظیم می‌شوند. در این حالت فقط --dns search-domains و --dns server n address .. با کمترین مقدار n تفسیر می‌شوند. همه گزینه‌های دیگر --dns نادیده گرفته می‌شوند. استفاده از درایور dco روش توصیه‌شده برای بهره‌مندی از این ویژگی‌های جدید است.
2.
اگر --dns server n resolve-domains در حال استفاده باشد، آدرس‌های سرور DNS متناظر با n تنها در صورتی روی رابط تنظیم می‌شوند که search-domains نیز مشخص شده باشد. در غیر این صورت این آدرس‌های DNS فقط برای قواعد NRPT جهت split-DNS استفاده می‌شوند.
در حالت کلاینت UDP یا حالت نقطه-به-نقطه (point-to-point)، اگر تونل مجدداً راه‌اندازی شود یا فرآیند OpenVPN خارج شود، اعلان خروج را به سرور/همتا ارسال می‌کند. در حالت کلاینت، هنگام خروج/راه‌اندازی مجدد، این گزینه به سرور اطلاع می‌دهد تا به جای انتظار برای اتمام مهلت زمانی (timeout)، فوراً شیء نمونه کلاینت خود را ببندد.

اگر هر دو سرور و کلاینت از ارسال این پیام از طریق کانال کنترل پشتیبانی کنند، پیام به عنوان یک پیام کانال کنترل ارسال می‌شود. در غیر این صورت پیام به عنوان پیام کانال داده ارسال خواهد شد، که توسط همتاهای دارای تخلیه بار سخت‌افزاری (offloaded) کانال داده نادیده گرفته می‌شود.

پارامتر n (در صورت عدم وجود، پیش‌فرض 1) حداکثر تعداد تلاش‌های کلاینت برای ارسال مجدد پیام اعلان خروج در حالت کانال داده را کنترل می‌کند.

در حالت سرور UDP، دستور کانال کنترل RESTART را به کلاینت‌های متصل ارسال می‌کند. پارامتر n (در صورت عدم وجود، پیش‌فرض 1) رفتار کلاینت را کنترل می‌کند. با n = 1 کلاینت تلاش می‌کند مجدداً به همان سرور متصل شود، با n = 2 کلاینت به سرور بعدی می‌رود.

برنامه OpenVPN هیچ اعلان خروجی ارسال نخواهد کرد مگر اینکه این گزینه فعال باشد.

باعث می‌شود OpenVPN پس از n ثانیه عدم فعالیت روی دستگاه TUN/TAP خارج شود. طول مدت عدم فعالیت از زمان آخرین بسته ورودی یا خروجی تونل محاسبه می‌شود. مقدار پیش‌فرض 0 ثانیه است که این ویژگی را غیرفعال می‌کند.

نحو‌های معتبر:

inactive n
inactive n bytes

اگر پارامتر اختیاری bytes مشخص شود، در صورتی که در مدت n ثانیه کمتر از bytes ترافیک مجموع ورودی/خروجی روی دستگاه tun/tap تولید شود، خارج می‌شود.

در هر صورت، بسته‌های پینگ داخلی OpenVPN (که فقط پیام‌های keepalive هستند) و بسته‌های کنترل TLS به عنوان "فعالیت" در نظر گرفته نمی‌شوند و به عنوان ترافیک نیز شمارش نمی‌شوند، زیرا به صورت داخلی توسط OpenVPN استفاده شده و نشان‌دهنده فعالیت واقعی کاربر نیستند.

نکته: در FreeBSD همراه با DCO، به دلیل محدودیت‌های پلتفرم، پاراگراف قبلی صادق نیست. در آن حالت، سربار کپسوله‌سازی و بسته‌های keepalive شمارش می‌شوند؛ بنابراین استفاده از این ویژگی به مقدار bytes به اندازه کافی بزرگ نیاز دارد تا این مقادیر اضافی را به حساب آورد.

--proto-force p
هنگام پیمایش در نمایه‌های اتصال (connection profiles)، فقط نمایه‌هایی را در نظر می‌گیرد که از پروتکل p (tcp | udp) استفاده می‌کنند.

توجه داشته باشید که این گزینه مشخصاً فقط بر اساس پروتکل لایه انتقال، یعنی UDP یا TCP فیلتر می‌کند. این موضوع بر اینکه IPv4 یا IPv6 به عنوان پروتکل IP استفاده شود تاثیری ندارد.

به دلایل پیاده‌سازی، این گزینه پسوندهای 4 و 6 را هنگام تعیین پروتکل می‌پذیرد (یعنی udp4 / udp6 / tcp4 / tcp6). با این حال، رفتار این‌ها همانند حالت بدون پسوند است و باید برای جلوگیری از سردرگمی از آن‌ها اجتناب شود.

این گزینه باید روی کلاینتی استفاده شود که به یک سرور چندکلاینتی متصل می‌شود. این گزینه به OpenVPN مشخص می‌کند که باید گزینه‌های ارائه‌شده (push شده) از سمت سرور را بپذیرد، به شرطی که بخشی از مجموعه مجاز گزینه‌های قابل ارائه باشند (توجه داشته باشید که گزینه --pull توسط --client به طور ضمنی فعال می‌شود).

به طور خاص، --pull به سرور اجازه می‌دهد تا مسیرها (routes) را به کلاینت بفرستد، بنابراین در شرایطی که به سرور برای داشتن کنترل بر جدول مسیریابی کلاینت اعتماد ندارید، نباید از --pull یا --client استفاده کنید.

--pull-filter args
فیلتر کردن گزینه‌های ارسال شده از سرور به کلاینت، در سمت کلاینت.

نحو‌های معتبر:

pull-filter accept text
pull-filter ignore text
pull-filter reject text

گزینه‌های دریافتی از سرور را در صورتی که گزینه با text شروع شود فیلتر می‌کند. پرچم عملیاتی accept به گزینه اجازه می‌دهد، ignore آن را حذف می‌کند و reject یک خطا مشخص کرده و راه‌اندازی مجدد با سیگنال SIGUSR1 را فعال می‌کند. فیلترها می‌توانند چندین بار مشخص شوند و هر فیلتر به ترتیبی که تعریف شده اعمال می‌شود. فیلتر کردن هر گزینه به محض یافتن تطابق متوقف خواهد شد. گزینه‌های تطبیق‌نیافته به طور پیش‌فرض پذیرفته می‌شوند.

مقایسه پیشوند برای تطبیق text با گزینه دریافتی استفاده می‌شود، به طوری که

pull-filter ignore "route"

تمام گزینه‌های ارسال‌شده را که با route شروع می‌شوند حذف می‌کند، که برای مثال شامل route-gateway نیز خواهد بود. برای گنجاندن فاصله‌ها، text را داخل گیومه قرار دهید.

pull-filter accept "route 192.168.1."
pull-filter ignore "route "

تمام مسیرهایی را که با 192.168.1 شروع نمی‌شوند حذف می‌کند.

توجه داشته باشید که reject ممکن است باعث یک چرخه مکرر از شکست و تلاش مجدد برای اتصال شود، مگر اینکه چندین ریموت مشخص شده باشد و اتصال به ریموت بعدی با موفقیت انجام شود. برای نادیده گرفتن بی‌سر و صدای یک گزینه ارسال‌شده از سرور، از ignore استفاده کنید.

هشدار: نمی‌توان به pull-filter به عنوان یک اقدام امنیتی جهت محافظت در برابر گزینه‌های مخرب یا نامناسب ارائه‌شده توسط سرور اتکا کرد. به عنوان مثال، فیلتر می‌تواند با ارسال گزینه‌هایی با فاصله‌های اضافی بین کلمات یا سایر تغییرات در قالب‌بندی دور زده شود.

--push-peer-info
ارسال اطلاعات اضافی درباره کارخواه به سرور. داده‌های زیر همیشه به سرور ارسال می‌شوند:
نگارش OpenVPN کارخواه
سکوی سیستم‌عامل کارخواه
جزئیات افزونه‌های پروتکل که همتا پشتیبانی می‌کند. این متغیر یک میدان بیتی است و بیت‌های آن به شرح زیر تعریف می‌شوند:
  • بیت ۰: رزرو شده، همیشه باید صفر باشد
  • بیت ۱: همتا از سازوکار شناور peer-id پشتیبانی می‌کند
  • بیت ۲: کارخواه انتظار یک push-reply دارد و سرور می‌تواند بدون منتظر ماندن برای دریافت push-request، این پاسخ را ارسال کند.
  • بیت ۳: کارخواه قادر به اشتقاق کلید با استفاده از صادرکننده محتوای کلید بر اساس RFC5705 است.
  • بیت ۴: کارخواه قادر به پذیرش آرگومان‌های اضافی برای پیام AUTH_PENDING است.
  • بیت ۵: کارخواه از انجام مذاکره قابلیت‌ها در حالت P2P پشتیبانی می‌کند
  • بیت ۶: کارخواه قادر به تجزیه و دریافت گزینه ارسال‌شده --dns است
  • بیت ۷: کارخواه قادر به ارسال اعلان خروج از طریق کانال کنترلی با استفاده از پیام EXIT است. همچنین، کارخواه گزینه ارسال‌شده protocol-flags را برای قابلیت EKM می‌پذیرد
  • بیت ۸: کارخواه قادر به پذیرش پیام‌های AUTH_FAILED,TEMP است
  • بیت ۹: کارخواه قادر به پشتیبانی از tls-crypt پویا است
  • بیت ۱۰: کارخواه قادر به پشتیبانی از کلیدهای data epoch است
رمزهای قابل مذاکره، کارخواه از --cipher ارسال‌شده توسط سرور پشتیبانی می‌کند؛ مقدار ۲ یا بیشتر نشان می‌دهد که کارخواه از AES-GCM-128 و AES-GCM-256 پشتیبانی می‌کند. متغیر IV_NCP به نفع IV_CIPHERS منسوخ شده است.
کارخواه فهرست رمزهای پشتیبانی‌شده را که با گزینه --data-ciphers پیکربندی شده‌اند به سرور اعلام می‌کند.
کارخواه پشتیبانی از MTU قابل‌ارسال و بیشینه MTU قابل‌پذیرش را اعلام می‌کند.
نگارش رابط کاربری در صورت در حال اجرا بودن، به عنوان مثال de.blinkt.openvpn 0.5.47 برای برنامه اندروید. این مقدار می‌تواند توسط رابط کاربری/گرافیکی کارخواه با استفاده از --setenv تنظیم شود.
روش‌های احراز هویت اضافی پشتیبانی‌شده توسط کارخواه. این مقدار می‌تواند توسط رابط کاربری/گرافیکی کارخواه با استفاده از --setenv تنظیم شود.

پرچم‌های زیر به این بستگی دارند که کدام قالب‌های فشرده‌سازی کامپایل شده‌اند و آیا فشرده‌سازی توسط گزینه‌ها مجاز است یا خیر. برای جزئیات بیشتر به بخش گزینه‌های پروتکل مراجعه کنید.

در صورتی که کارخواه از فشرده‌سازی LZO پشتیبانی کند.
در صورتی که کارخواه با قابلیت LZO stub ساخته شده باشد. این مورد تنها زمانی ارسال می‌شود که IV_LZO=1 ارسال نشده باشد. این بدان معناست که کارخواه می‌تواند با سروری که با --comp-lzo no پیکربندی شده ارتباط برقرار کند.
در صورتی که کارخواه از فشرده‌سازی LZ4 پشتیبانی کند.
در صورتی که کارخواه از فشرده‌سازی stub پشتیبانی کند. این بدان معناست که کارخواه می‌تواند با سروری که با --compress پیکربندی شده ارتباط برقرار کند.

هنگامی که --push-peer-info فعال باشد، اطلاعات تکمیلی شامل داده‌های زیر خواهد بود:

این مورد به عنوان یک شناسه یکتا و پایدار برای کارخواه در نظر گرفته شده است. مقدار رشته می‌تواند هر رشته اسکی (ASCII) خوانا تا ۶۴ بایت باشد. OpenVPN 2.x و برخی پیاده‌سازی‌های دیگر از نشانی MAC واسط کارخواه که برای دسترسی به دروازه پیش‌فرض استفاده می‌شود، استفاده می‌کنند. اگر این رشته توسط کارخواه تولید شود، باید در نشست‌های مستقل و ترجیحاً در نصب‌های مجدد و ارتقاها سازگار و حفظ شود.
نگارش کتابخانه SSL مورد استفاده کارخواه، برای مثال OpenSSL 1.0.2f 28 Jan 2016.
نگارش سیستم‌عامل، برای مثال 6.1 برای Windows 7. این مقدار می‌تواند توسط رابط کاربری/گرافیکی کارخواه با استفاده از --setenv تنظیم شود. در سیستم‌های Windows این مورد به صورت خودکار توسط خود openvpn تعیین می‌شود. در سایر سکوها، OpenVPN به طور پیش‌فرض اطلاعات بازگردانده شده توسط فراخوان سیستمی uname() در فیلد release را ارسال می‌کند که معمولاً نگارش هسته در حال اجرا است. با این حال، این مورد به شدت به سیستم وابسته است.
متغیرهای محیطی کارخواه که نام آن‌ها با UV_ آغاز می‌شود.
نام میزبان دوردست یا نشانی IP، درگاه و پروتکل.

نحوهای معتبر:

remote host
remote host port
remote host port proto

آرگومان‌های port و proto اختیاری هستند. کلاینت OpenVPN تلاش خواهد کرد تا به یک سرور در host:port متصل شود. آرگومان proto پروتکل مورد استفاده در هنگام اتصال به میزبان دوردست را مشخص می‌کند و می‌تواند tcp یا udp باشد. برای اجبار اتصالات IPv4 یا IPv6، یک پسوند 4 یا 6 اضافه کنید؛ مانند udp4 / udp6 / tcp4 / tcp6.

در سمت کلاینت، می‌توان چندین گزینهٔ --remote را برای افزونگی مشخص کرد که هر یک به یک سرور مجزای OpenVPN، به ترتیبی که در فهرست گزینه‌های --remote آمده است، اشاره دارند. مشخص کردن چندین گزینهٔ --remote برای این منظور، حالت خاصی از ویژگی عمومی‌تر نمایهٔ اتصال (connection-profile) است. مستندات <connection> را در زیر ببینید.

در صورت شکست اتصال، کلاینت به سراغ میزبان بعدی در فهرست می‌رود. توجه داشته باشید که در هر زمان معین، کلاینت OpenVPN حداکثر به یک سرور متصل خواهد بود.

مثال‌ها:

remote server1.example.net
remote server1.example.net 1194
remote server2.example.net 1194 tcp
نکته:
از آنجا که UDP اتصال‌ناپذیر است، شکست اتصال توسط گزینه‌های --ping و --ping-restart تعریف می‌شود.

همچنین، اگر از چندین گزینهٔ --remote استفاده می‌کنید، و دسترسی‌های root را در کلاینت با --user و/یا --group کاهش می‌دهید، و کلاینت روی سیستم‌عاملی غیر از ویندوز اجرا می‌شود، در صورتی که کلاینت نیاز به تغییر سرور داشته باشد و آن سرور تنظیمات متفاوتی برای TUN/TAP یا مسیر (route) ارسال کند، ممکن است کلاینت دسترسی‌های لازم برای بستن و بازگشایی مجدد رابط TUN/TAP را نداشته باشد. این امر می‌تواند باعث خروج کلاینت با یک خطای مهلک شود.

اگر --remote مشخص نشده باشد، OpenVPN به بسته‌های رسیده از هر نشانی IP گوش می‌دهد، اما تا زمانی که تمام آزمون‌های احراز هویت را نگذرانند روی آن‌ها عملیاتی انجام نمی‌دهد. این الزام احراز هویت برای تمام همتایان بالقوه برقرار است، حتی آن‌هایی که از نشانی‌های IP شناخته‌شده و به‌ظاهر معتمد ارسال می‌شوند (جعل نشانی IP مبدأ در بسته‌های UDP بسیار آسان است).

هنگامی که در حالت TCP استفاده شود، --remote به عنوان یک فیلتر عمل کرده و اتصال از هر میزبانی را که با host مطابقت نداشته باشد، رد می‌کند.

اگر host یک نام DNS باشد که به چندین نشانی IP ترجمه می‌شود، OpenVPN آن‌ها را به ترتیبی که getaddrinfo() سیستم ارائه می‌دهد امتحان خواهد کرد؛ بنابراین اولویت‌بندی و تصادفی‌سازی DNS توسط کتابخانهٔ سیستم انجام می‌شود. مگر اینکه نسخهٔ IP با مشخصهٔ پروتکل (پسوند 4/6) اجبار شده باشد، OpenVPN هر دو نشانی IPv4 و IPv6 را به ترتیبی که getaddrinfo() بازمی‌گرداند، امتحان خواهد کرد.

--remote-random
هنگامی که چندین نشانی/درگاه --remote مشخص شده باشد، یا اگر از نمایه‌های اتصال استفاده می‌شود، در ابتدا ترتیب فهرست را به عنوان نوعی راهکار پایه برای توازن بار، تصادفی می‌کند.
--remote-random-hostname
یک رشتهٔ تصادفی (۶ بایت، ۱۲ نویسهٔ شانزده‌شانزدهی/hex) به نام میزبان اضافه می‌کند تا از کش شدن DNS جلوگیری شود. برای مثال، "foo.bar.gov" به "<random-chars>.foo.bar.gov" تغییر خواهد یافت.
در صورت ناموفق بودن ترجمهٔ نام میزبان برای --remote، قبل از اعلام شکست به مدت n ثانیه ترجمه را مجدداً تلاش می‌کند.

برای تلاش نامحدود، مقدار n را روی infinite تنظیم کنید.

به طور پیش‌فرض، --resolv-retry infinite فعال است. می‌توانید با تنظیم n=0 آن را غیرفعال کنید.

ترجمهٔ نام‌های میزبان پیکربندی‌شده در --remote، --local، --http-proxy و --socks-proxy در زمان راه‌اندازی و قبل از برقراری اتصال.

نشانی‌های ترجمه‌شده کش شده و برای اتصالات مجدد دوباره استفاده می‌شوند، بنابراین OpenVPN پس از تلاش اولیه برای اتصال، این نام‌های میزبان را مجدداً ترجمه نخواهد کرد. این ویژگی می‌تواند به پیکربندی‌هایی که در آن‌ها هنگام غیرفعال بودن VPN، سرویس DNS در دسترس نیست کمک کند، اما ممکن است برای نام‌های پویای DNS یا در زمان رومینگ بین شبکه‌هایی که در دسترس بودن خانوادهٔ آدرس تغییر می‌کند (مانند DNS64/NAT64)، نتیجهٔ معکوس داشته باشد.

پس از اتصال اولیه به یک همتای دوردست، هرگونه اتصال جدید را ممنوع می‌کند. استفاده از این گزینه به این معنی است که یک همتای دوردست نمی‌تواند وصل شود، قطع شود و سپس دوباره متصل گردد.

اگر دیمن با یک سیگنال یا --ping-restart بازنشانی شود، اجازهٔ یک اتصال جدید را خواهد داد.

می‌توان از --single-session به همراه --ping-exit یا --inactive برای ایجاد یک نشست پویای یکتا که پس از اتمام خارج می‌شود، استفاده کرد.

--server-poll-timeout n
هنگام اتصال به سرور دوردست، قبل از امتحان کردن سرور بعدی، بیش از n ثانیه برای دریافت پاسخ منتظر نمی‌ماند. مقدار پیش‌فرض 120 است. این مهلت زمانی شامل زمان انتظار پروکسی و اتصال TCP نیز می‌شود.
فعال‌سازی پروتکل چالش/پاسخ ایستا

نحو معتبر:

static-challenge text echo [format]

متن چالش text به کاربر نمایش داده می‌شود که توضیح می‌دهد چه اطلاعاتی درخواست شده است. پرچم echo مشخص می‌کند که آیا ورودی کاربر باید روی صفحه نمایش داده شود یا خیر. مقادیر معتبر echo برابر با 0 یا 1 هستند. گزینه اختیاری format مشخص می‌کند که آیا گذرواژه و پاسخ باید با استفاده از پروتکل SCRV1 ترکیب شوند (format = scrv1) یا فقط الحاق گردند (format = concat). پیش‌فرض scrv1 است.

برای توضیحات درباره پروتکل چالش/پاسخ OpenVPN، پرونده management-notes.txt را در توزیع OpenVPN ببینید.

اتصال به میزبان دوردست از طریق یک پراکسی HTTP. این گزینه حداقل به یک آرگومان نشانی server و port نیاز دارد. در صورت نیاز به Proxy-Authenticate مربوط به HTTP، می‌توان نام یک پرونده authfile حاوی نام‌کاربری و گذرواژه در ۲ خط را مشخص کرد، یا از stdin برای دریافت از کنسول استفاده نمود. همچنین محتوای آن می‌تواند با گزینه --http-proxy-user-pass در پرونده پیکربندی مشخص شود (بخش INLINE FILE SUPPORT را ببینید).

آخرین آرگومان اختیاری auth-method است که باید یکی از none، basic یا ntlm2 باشد.

احراز هویت HTTP Digest نیز پشتیبانی می‌شود، اما فقط از طریق پرچم‌های auto یا auto-nct (در زیر). این باید جایگزین آرگومان authfile شود.

پرچم auto باعث می‌شود OpenVPN به صورت خودکار auth-method را تشخیص دهد و در صورت نیاز، اعتبار نام‌کاربری/گذرواژه را از stdin یا رابط مدیریتی درخواست کند. این پرچم در OpenVPN نسخه ۲.۱ یا بالاتر وجود دارد.

پرچم auto-nct (بدون احراز هویت متنی آشکار) به OpenVPN دستور می‌دهد که روش احراز هویت را به طور خودکار تعیین کند، اما پروتکل‌های احراز هویت ضعیف مانند HTTP Basic Authentication را رد کند.

نمونه‌ها:

# no authentication
http-proxy proxy.example.net 3128
# basic authentication, load credentials from file
http-proxy proxy.example.net 3128 authfile.txt
# basic authentication, ask user for credentials
http-proxy proxy.example.net 3128 stdin
# NTLM authentication, load credentials from file
http-proxy proxy.example.net 3128 authfile.txt ntlm2
# determine which authentication is required, ask user for credentials
http-proxy proxy.example.net 3128 auto
# determine which authentication is required, but reject basic
http-proxy proxy.example.net 3128 auto-nct
# determine which authentication is required, but set credentials
http-proxy proxy.example.net 3128 auto
http-proxy-user-pass authfile.txt
# basic authentication, specify credentials inline
http-proxy proxy.example.net 3128 "" basic
<http-proxy-user-pass>
username
password
</http-proxy-user-pass>

توجه داشته باشید که پشتیبانی از پراکسی‌های NTLMv1 در OpenVPN 2.7 حذف شد. اکنون ntlm یک نام مستعار برای ntlm2 است؛ یعنی OpenVPN همیشه تلاش خواهد کرد از احراز هویت NTLMv2 استفاده کند.

بازنویسی اطلاعات نام‌کاربری/گذرواژه برای --http-proxy. اگر به صورت یک گزینه درون‌خطی مشخص شود (بخش INLINE FILE SUPPORT را ببینید)، به عنوان نام‌کاربری/گذرواژه جدا شده با خط جدید تفسیر می‌شود. هنگامی که در خط فرمان مشخص شود مشابه آرگومان سوم --http-proxy به عنوان یک نام پرونده تفسیر می‌گردد.

نمونه:

<http-proxy-user-pass>
username
password
</http-proxy-user-pass>
تنظیم گزینه‌های گسترش‌یافته پراکسی HTTP. به یک گزینه type به عنوان آرگومان و یک parameter اختیاری برای نوع نیاز دارد. برای تنظیم چندین گزینه تکرار شود.
تنظیم شماره نسخه HTTP روی version (پیش‌فرض 1.0).
تنظیم رشته "User-Agent" برای HTTP روی user-agent.
سرآیند سفارشی را با نام name و محتوای content به عنوان محتوای سرآیند سفارشی HTTP اضافه می‌کند.

نمونه‌ها:

http-proxy-option VERSION 1.1
http-proxy-option AGENT OpenVPN/2.4
http-proxy-option X-Proxy-Flag some-flags
اتصال به میزبان دوردست از طریق یک پروکسی Socks5. یک آرگومان ضروری server مورد نیاز است. به‌صورت اختیاری یک port (پیش‌فرض 1080) و authfile می‌توانند داده شوند. پرونده authfile فایلی حاوی نام‌کاربری و گذرواژه در ۲ خط است، یا stdin می‌تواند برای درخواست ورودی از کنسول استفاده شود.

از نسخه OpenVPN 2.0 به بعد، حالت سرور TCP/UDP چندکلاینتی (multi-client) پشتیبانی می‌شود و می‌تواند با گزینه --mode server فعال گردد. در حالت سرور، OpenVPN روی یک درگاه (port) واحد برای اتصالات ورودی کلاینت گوش فرا می‌دهد. تمامی اتصالات کلاینت از طریق یک رابط tun یا tap واحد مسیریابی خواهند شد. این حالت برای مقیاس‌پذیری طراحی شده است و باید بتواند صدها یا حتی هزاران کلاینت را روی سخت‌افزار به‌اندازه کافی سریع پشتیبانی کند. احراز هویت SSL/TLS باید در این حالت استفاده شود.

--auth-gen-token args
یک توکن احراز هویت به کلاینت‌هایی که با موفقیت احراز هویت شده‌اند بازمی‌گرداند.

نحو معتبر:

auth-gen-token [lifetime] [renewal-time] [external-auth]

پس از احراز هویت موفقیت‌آمیز نام‌کاربری/گذرواژه، سرور OpenVPN با این گزینه یک توکن احراز هویت موقت ایجاد کرده و آن را به کلاینت ارسال می‌کند (push). در مذاکرات مجدد (renegotiation) بعدی، کلاینت OpenVPN این توکن را به‌جای گذرواژه کاربر ارسال خواهد کرد. در سمت سرور، سرور احراز هویت توکن را به‌صورت داخلی انجام می‌دهد و هیچ احراز هویت اضافه‌ای را در برابر سازوکارهای احراز هویت خارجی نام‌کاربری/گذرواژه پیکربندی‌شده انجام نخواهد داد.

توکن‌های پیاده‌سازی‌شده با این سازوکار شامل یک برچسب زمانی اولیه و یک برچسب زمانی تمدید هستند و توسط HMAC ایمن‌سازی شده‌اند.

آرگومان lifetime مشخص می‌کند توکن تولیدشده برای چه مدت معتبر است. طول عمر بر حسب ثانیه تعریف می‌شود. اگر طول عمر تنظیم نشود یا روی 0 تنظیم گردد، توکن هرگز منقضی نخواهد شد.

اگر renewal-time تنظیم نشود، مقدار پیش‌فرض آن reneg-sec خواهد بود.

توکن یا پس از رسیدن به lifetime پیکربندی‌شده توکن، یا پس از تمدید نشدن به مدت بیش از ۲ * renewal-time ثانیه منقضی خواهد شد. به کلاینت‌ها در هر مذاکره مجدد TLS توکن‌های تمدیدشده ارسال می‌شود. اگر renewal-time کمتر از reneg-sec باشد، سرور در هر reneweal-time ثانیه یک توکن احراز هویت موقت به‌روزرسانی‌شده ارسال خواهد کرد. این کار برای بی‌اعتبار کردن توکن در صورتی که کلاینت برای مدت‌زمان طولانی قطع شده باشد انجام می‌شود، در حالی که هم‌زمان طول عمر بسیار طولانی‌تری را برای توکن کلاینت‌های فعال فراهم می‌کند.

این ویژگی برای محیط‌هایی مفید است که برای استفاده از گذرواژه‌های یک‌بارمصرف (OTP) به‌عنوان بخشی از احراز هویت نام‌کاربری/گذرواژه پیکربندی شده‌اند و آن سازوکار احراز هویت از auth-token پشتیبانی نمی‌کند.

هنگامی که کلیدواژه external-auth وجود داشته باشد، روش احراز هویت عادی همیشه فراخوانی خواهد شد، حتی اگر auth-token موفقیت‌آمیز باشد. به‌طور معمول در صورت موفقیت یا شکست اعتبارسنجی auth-token، سایر روش‌های احراز هویت نادیده گرفته می‌شوند.

این گزینه این تصمیم را به روش‌های احراز هویت خارجی واگذار کرده و اعتبار حساب را بررسی کرده و سایر بررسی‌ها را انجام می‌دهد.

در این حالت، محیط دارای متغیر session_id خواهد بود که شناسه نشست حاصل از auth-gen-token را در خود نگه می‌دارد. همچنین یک متغیر محیطی session_state موجود است. این متغیر نشان می‌دهد که آیا auth-token موفقیت‌آمیز بوده است یا خیر. این متغیر می‌تواند مقادیر زیر را داشته باشد:

هیچ توکنی از کلاینت دریافت نشده است.
توکن معتبر است و منقضی نشده است.
توکن معتبر است اما منقضی شده است.
توکن نامعتبر است (شکست در HMAC یا طول نادرست).
توکن با نام‌کاربری ارسال‌شده از سوی کلاینت معتبر نیست، اما اگر فرض کنیم که به‌جای آن یک نام‌کاربری خالی استفاده شده بود، معتبر (یا منقضی) می‌بود. این دو مورد یک راهکار موقت برای رفتار OpenVPN 3 هستند. اگر این راهکار موقت مورد نیاز نباشد، این دو مورد باید همانند Invalid مدیریت شوند.

هشدار: از این ویژگی تنها در صورتی استفاده کنید که می‌خواهید روش احراز هویت شما در هر اعتبارسنجی فراخوانی شود. از آنجا که احراز هویت خارجی فراخوانی می‌شود، لازم است موفقیت یا شکست احراز هویت را نیز اعلام کند. اکیداً توصیه می‌شود در صورت auth-token نامعتبر/منقضی‌شده (Invalid/Expired) با گزینه external-auth، شکست احراز هویت بازگردانده شود مگر اینکه کلاینت بتواند به روش قابل‌قبول دیگری (مانند گواهی کلاینت) احراز هویت کند، در غیر این صورت بازگرداندن موفقیت منجر به دور زدن احراز هویت خواهد شد (مشابه بازگرداندن موفقیت برای گذرواژه نادرست از یک اسکریپت). در صورتی که توکن منقضی‌شده (Expired) پذیرفته شود، توکن شناسه نشست و زمان شروع توکن اصلی (منقضی‌شده) را حفظ خواهد کرد.

نکته: نام‌کاربری برای --auth-gen-token می‌تواند توسط --override-username بازنویسی شود. در این حالت گزینه --auth-token-user و یک توکن احراز هویت معتبر برای آن نام‌کاربری به‌جای نام‌کاربری اصلی که کلاینت با آن احراز هویت کرده بود نیز به کلاینت ارسال خواهد شد.

--auth-gen-token-secret file
پرونده‌ای را مشخص می‌کند که کلید مخفی مربوط به HMAC مورد استفاده در --auth-gen-token را نگه می‌دارد. اگر file وجود نداشته باشد، OpenVPN در هنگام راه‌اندازی یک کلید مخفی تصادفی تولید خواهد کرد. اگر auth-token باید پس از راه‌اندازی مجدد سرور معتبر بماند، یا اگر کلاینت باید بتواند با auth-token خود بین چندین سرور OpenVPN جابه‌جا شود، این پرونده باید استفاده شود.
--auth-user-pass-optional
اجازه برقراری اتصال به کلاینت‌هایی که نام‌کاربری/گذرواژه تعیین نمی‌کنند. به طور معمول، هنگامی که --auth-user-pass-verify یا --management-client-auth مشخص شده باشند (یا یک ماژول پلاگین احراز هویت)، دیمن سرور OpenVPN از کلاینت‌های در حال اتصال می‌خواهد که نام‌کاربری و گذرواژه را مشخص کنند. این گزینه ارسال نام‌کاربری/گذرواژه توسط کلاینت‌ها را اختیاری می‌کند و مسئولیت پذیرش یا رد کلاینت بر اساس عوامل دیگر (مانند تنظیم فیلدهای گواهی X509) را به ماژول/اسکریپت احراز هویت تعریف‌شده توسط کاربر واگذار می‌نماید. هنگامی که از این گزینه استفاده شود و کلاینت متصل‌شونده نام‌کاربری/گذرواژه‌ای ارسال نکند، ماژول/اسکریپت احراز هویت تعریف‌شده توسط کاربر، نام‌کاربری و گذرواژه را به صورت رشته‌های خالی ("") خواهد دید. ماژول/اسکریپت احراز هویت باید دارای منطقی برای تشخیص این وضعیت و پاسخ‌دهی مناسب باشد.
الزام داشتن یک فایل --client-config-dir برای کلاینت متصل‌شونده به عنوان شرط احراز هویت.
--client-config-dir dir
تعیین دایرکتوری dir برای فایل‌های پیکربندی سفارشی کلاینت. پس از آنکه یک کلاینت متصل‌شونده احراز هویت شد، OpenVPN در این دایرکتوری به دنبال فایلی با همان نام common name گواهی X509 کلاینت می‌گردد. اگر فایل منطبقی وجود داشته باشد، برای گزینه‌های پیکربندی مخصوص کلاینت باز و تجزیه می‌شود. اگر فایل منطبقی پیدا نشود، OpenVPN در عوض تلاش می‌کند فایل پیش‌فرضی به نام "DEFAULT" را باز و تجزیه کند، که ممکن است ارائه شده باشد اما الزامی نیست. توجه داشته باشید که فایل‌های پیکربندی باید پس از رها کردن امتیازات root توسط فرایند OpenVPN قابل خواندن باشند.

این فایل می‌تواند یک آدرس IP ثابت را برای کلاینت مربوطه با استفاده از --ifconfig-push و همچنین زیرشبکه‌های ثابتی که متعلق به کلاینت هستند را با استفاده از --iroute مشخص کند.

یکی از ویژگی‌های مفید این گزینه این است که اجازه می‌دهد فایل‌های پیکربندی کلاینت هنگام فعال بودن سرور، بدون نیاز به راه‌اندازی مجدد سرور، به راحتی ایجاد، ویرایش یا حذف شوند.

گزینه‌های زیر در زمینه مختص کلاینت مجاز هستند: --push، --push-reset، --push-remove، --iroute، --ifconfig-push، --vlan-pvid و --config.

نکته: برنامه OpenVPN از CN دقیقاً همان‌طور که در گواهی نوشته شده استفاده می‌کند. اما از آنجا که این یک دسترسی به فایل است، سیستم‌فایل ممکن است تداخل ایجاد کند. نکته مهم این است که OpenVPN دو CN را که تنها در بزرگی و کوچکی حروف با هم تفاوت دارند به عنوان نام‌های متفاوت در نظر می‌گیرد، اما یک سیستم‌فایل حساس نبودن به حروف بزرگ و کوچک (مانند آنچه ممکن است در Windows یا macOS مشاهده کنید) با آن‌ها یکسان رفتار می‌کند. هنگامی که گواهی‌های خود را ایجاد می‌کنید مطمئن شوید که CNها به اندازه کافی متفاوت هستند تا مشکلی ایجاد نشود. هنگام اعتماد به یک CA خارجی، توجه داشته باشید که این یک بردار حمله بالقوه از طریق گواهی‌های مخرب ایجاد شده است که از این مسئله سوءاستفاده می‌کنند.

--client-to-client
از آنجا که حالت سرور OpenVPN چندین کلاینت را از طریق یک رابط tun یا tap تکی مدیریت می‌کند، عملاً یک مسیریاب است. پرچم --client-to-client به OpenVPN می‌گوید ترافیک کلاینت-به-کلاینت را به صورت داخلی مسیریابی کند، به جای اینکه تمام ترافیک مبدأ کلاینت را به رابط TUN/TAP ارسال نماید.

هنگامی که این گزینه استفاده می‌شود، هر کلاینت سایر کلاینت‌هایی را که در حال حاضر متصل هستند "خواهد دید". در غیر این صورت، هر کلاینت فقط سرور را خواهد دید. اگر می‌خواهید ترافیک تونل را با استفاده از قوانین سفارشی و به ازای هر کلاینت فایروال‌بندی کنید، از این گزینه استفاده نکنید.

لطفاً توجه داشته باشید که هنگام استفاده از data channel offload این گزینه هیچ اثری ندارد. بسته‌ها همیشه به رابط تونل ارسال شده و سپس بر اساس جدول مسیریابی سیستم مسیریابی می‌شوند.

غیرفعال کردن اتصال یک کلاینت خاص (بر اساس common name). از این گزینه برای غیرفعال کردن کلاینت به دلیل به خطر افتادن کلید یا گذرواژه استفاده نکنید. در عوض از یک CRL (فهرست ابطال گواهی) استفاده کنید (گزینه --crl-verify را ببینید).

این گزینه باید با یک نمونه کلاینت خاص مرتبط باشد، به این معنی که یا باید در یک فایل پیکربندی نمونه کلاینت با استفاده از --client-config-dir مشخص شود یا به صورت پویا با استفاده از یک اسکریپت --client-connect تولید گردد.

اجازه به حداکثر n اتصال جدید در هر sec ثانیه از طرف کلاینت‌ها.

نحو معتبر:

connect-freq n sec

این گزینه برای مهار حملات DoS طراحی شده است که با استفاده از گواهی‌هایی که در نهایت احراز هویت آن‌ها با شکست مواجه می‌شود، سرور را با درخواست‌های اتصال غرق می‌کنند.

این محدودیت پس از --connect-freq-initial اعمال می‌شود و فقط برای کلاینت‌هایی اعمال می‌گردد که مصافحه سه‌طرفه را کامل کرده‌اند یا کلاینت‌هایی که از --tls-crypt-v2 بدون پشتیبانی از کوکی (آرگومان allow-noncookie برای --tls-crypt-v2) استفاده می‌کنند.

با این حال، این یک راهکار ناقص است، زیرا در یک سناریوی واقعی DoS، ممکن است اتصالات مشروع نیز رد شوند.

برای بهترین محافظت در برابر حملات DoS در حالت سرور، از --proto udp و --tls-auth یا --tls-crypt استفاده کنید.

(فقط UDP) اجازه به حداکثر n پاسخ بسته اتصال اولیه در هر sec ثانیه از سرور OpenVPN به کلاینت‌ها.

نحو معتبر:

connect-freq-initial n sec

برنامه OpenVPN از نسخه 2.6 به بعد در پاسخ‌دهی به بسته‌های اتصال اولیه بسیار کارآمد عمل می‌کند. در صورت محدود نکردن پاسخ‌های اولیه، دیمن OpenVPN می‌تواند در حملات بازتابی مورد سوءاستفاده قرار گیرد. این گزینه برای محدود کردن نرخ پاسخ‌دهی OpenVPN به حملات اولیه طراحی شده است.

تلاش‌های اتصالی که مصافحه سه‌طرفه اولیه را تکمیل کنند، جزو این محدودیت محاسبه نخواهند شد. پیش‌فرض، اجازه به ۱۰۰ اتصال اولیه در هر ۱۰ ثانیه است.

به چندین کلاینت با نام مشترک (common name) یکسان اجازه اتصال هم‌زمان می‌دهد. در صورت نبود این گزینه، OpenVPN با اتصال یک کلاینت جدید با همان نام مشترک، ارتباط کلاینت پیشین را قطع خواهد کرد.
--ifconfig-pool args
استخری از زیرشبکه‌ها را برای تخصیص پویا به کلاینت‌های متصل‌شونده، مشابه با یک کارگزار DHCP کنار می‌گذارد.

نحو معتبر:

ifconfig-pool start-IP end-IP [netmask]

برای تونل‌های نوع tun، به هر کلاینت یک زیرشبکه /30 اختصاص داده می‌شود (جهت سازگاری با کلاینت‌های ویندوز). برای تونل‌های نوع tap، نشانی‌های منفرد تخصیص می‌یابند، و پارامتر اختیاری netmask نیز به کلاینت‌ها تحویل (push) داده می‌شود.

--ifconfig-ipv6-pool args
یک استخر نشانی IPv6 را برای تخصیص پویا به کلاینت‌ها مشخص می‌کند.

آرگومان‌های معتبر:

ifconfig-ipv6-pool ipv6addr/bits

استخر از ipv6addr شروع می‌شود و با آفست تعیین‌شده از ابتدای استخر IPv4 مطابقت دارد. اگر بخش میزبان نشانی IPv6 داده‌شده 0 باشد، استخر از ipv6addr +1 شروع می‌شود.

--ifconfig-pool-persist args
داده‌های ifconfig-pool را در فواصل زمانی seconds (پیش‌فرض 600)، و همچنین هنگام شروع و خاتمه برنامه، در file ذخیره/بازیابی می‌کند.

نحو معتبر:

ifconfig-pool-persist file [seconds]

هدف این گزینه، برقراری یک ارتباط بلندمدت بین کلاینت‌ها (مشخص‌شده با نام مشترک آن‌ها) و نشانی IP مجازی اختصاص‌یافته به آن‌ها از ifconfig-pool است. حفظ یک ارتباط بلندمدت برای کلاینت‌ها مناسب است زیرا به آن‌ها امکان می‌دهد تا به‌طور مؤثر از گزینه --persist-tun استفاده کنند.

پارامتر file یک پرونده متنی ASCII جداشده با کاما است، در قالب <Common-Name>,<IP-address>.

اگر seconds = 0 باشد، با file به‌صورت فقط‌خواندنی رفتار می‌شود. این حالت زمانی کاربرد دارد که بخواهید از file به‌عنوان یک پرونده پیکربندی استفاده کنید.

توجه داشته باشید که ورودی‌های این پرونده توسط OpenVPN صرفاً بر اساس ارتباطات پیشین بین یک نام مشترک و نشانی IP، به‌صورت پیشنهادی در نظر گرفته می‌شوند. آن‌ها تضمین نمی‌کنند که نام مشترک داده‌شده همیشه همان نشانی IP مشخص‌شده را دریافت کند. در صورت نیاز به تخصیص تضمین‌شده، از --ifconfig-push استفاده کنید.

--ifconfig-push args
نقاط پایانی IP مجازی را برای تونل کلاینت ارسال (push) می‌کند، که تخصیص پویای --ifconfig-pool را لغو می‌نماید.

نحو معتبر:

ifconfig-push local remote-netmask [alias]

پارامترهای local و remote-netmask مطابق با دستورالعمل --ifconfig تنظیم می‌شوند که می‌خواهید روی دستگاه کلاینت جهت پیکربندی انتهای دورست تونل اجرا شود. توجه داشته باشید که پارامترهای local و remote-netmask از دیدگاه کلاینت هستند، نه سرور. آن‌ها می‌توانند به‌جای نشانی IP، نام‌های DNS باشند که در این صورت هنگام اتصال کلاینت، روی سرور برطرف (resolve) می‌شوند.

پارامتر اختیاری alias ممکن است در مواردی استفاده شود که NAT باعث ایجاد تفاوت بین دید کلاینت از نقطه پایانی محلی خود با دید سرور شود. در این حالت local/remote-netmask به دید سرور اشاره دارد در حالی که alias/remote-netmask به دید کلاینت اشاره خواهد کرد.

این گزینه باید با یک نمونه کلاینت مشخص مرتبط باشد، به این معنی که باید یا در یک پرونده پیکربندی نمونه کلاینت با استفاده از --client-config-dir تعیین شود یا به‌طور پویا با استفاده از یک اسکریپت --client-connect تولید گردد.

همچنین به یاد داشته باشید که یک دستورالعمل --route حاوی local را در پرونده پیکربندی اصلی OpenVPN بگنجانید، تا هسته بداند مسیر آن را به سمت رابط TUN/TAP سرور هدایت کند.

الگوریتم داخلی انتخاب نشانی IP کلاینت در OpenVPN به‌صورت زیر عمل می‌کند:

1.
استفاده از پرونده تولیدشده با اسکریپت --client-connect برای IP ایستا (انتخاب نخست).
2.
استفاده از پرونده --client-config-dir برای IP ایستا (انتخاب بعدی).
3.
استفاده از تخصیص --ifconfig-pool برای IP پویا (انتخاب پایانی).

هنگامی که DCO فعال باشد و IP در شبکه مشخص‌شده توسط --ifconfig قرار نداشته باشد، OpenVPN یک مسیر میزبان /32 برای نشانی IP مربوط به local نصب خواهد کرد.

--ifconfig-ipv6-push args
برای پیکربندی ایستای رابط IPv6 به ازای هر کلاینت در --client-config-dir، جهت اطلاعات بیشتر به --client-config-dir و --ifconfig-push مراجعه کنید.

نحو معتبر:

ifconfig-ipv6-push ipv6addr/bits ipv6remote

هنگامی که DCO فعال است و نشانی IP در شبکه مشخص‌شده توسط --ifconfig-ipv6 قرار ندارد، OpenVPN یک مسیر میزبان /128 برای نشانی IP ipv6addr نصب خواهد کرد.

یک کارساز UDP چندمقصدی (multi-homed) را پیکربندی می‌کند. این گزینه زمانی نیاز است که یک کارساز بیش از یک نشانی IP دارد (مانند چند رابط یا نشانی‌های IP ثانویه)، و از --local برای اجبار اتصال تنها به یک نشانی خاص استفاده نمی‌کند. این گزینه چند جست‌وجوی اضافی به مسیر بسته اضافه می‌کند تا اطمینان حاصل شود بسته‌های پاسخ UDP همیشه از نشانی‌ای ارسال می‌شوند که کلاینت با آن گفتگو می‌کند. این ویژگی در تمام پلتفرم‌ها پشتیبانی نمی‌شود و پردازش بیشتری می‌افزاید، بنابراین به‌طور پیش‌فرض فعال نیست.
نکات:
  • این گزینه تنها برای کارسازهای UDP مرتبط است.
  • از نسخه 2.7.0 به بعد، OpenVPN رابط ورودی بسته را نادیده گرفته و انتخاب رابط خروجی را به سازوکارهای عادی مسیریابی/سیاست سیستم‌عامل واگذار می‌کند ("set ipi_ifindex=0").
  • اگر پرچم same-interface اضافه شود، OpenVPN شناسه (index) رابط ورودی را در شناسه رابط خروجی کپی کرده و تلاش می‌کند بسته را از همان رابطی که وارد شده به بیرون بفرستد (= بازگرداندن رفتار پیشین OpenVPN). اگر هیچ مسیر قابل استفاده‌ای در آن رابط وجود نداشته باشد، این کار ممکن است کار نکند.
  • سیستم‌های BSD* برای IPv4 از یک API متفاوت استفاده می‌کنند که در هر صورت شناسه رابط را ارائه نمی‌دهد (IP_RECVDSTADDR)، بنابراین تفاوت در آنجا تنها برای IPv6 اعمال می‌شود.
یک مسیر داخلی به یک کلاینت خاص ایجاد می‌کند. پارامتر netmask، در صورت حذف شدن، به صورت پیش‌فرض 255.255.255.255 خواهد بود.

نحو معتبر:

iroute network [netmask]

این دستورالعمل می‌تواند برای مسیریابی یک زیرشبکه ثابت از کارساز به یک کلاینت خاص، فارغ از اینکه کلاینت از کجا متصل می‌شود، استفاده شود. به یاد داشته باشید که باید مسیر را به جدول مسیریابی سیستم نیز اضافه کنید (مانند استفاده از دستورالعمل --route). دلیل نیاز به دو مسیر این است که دستورالعمل --route بسته را از هسته به OpenVPN هدایت می‌کند. پس از ورود به OpenVPN، دستورالعمل --iroute آن را به کلاینت خاص هدایت می‌نماید.

با این حال، هنگام استفاده از DCO، دستورالعمل --iroute معمولاً برای DCO جهت پیکربندی کامل جدول مسیریابی کافی است. دستورالعمل اضافی --route تنها زمانی لازم است که رفتار مورد انتظار، مسیریابی ترافیک یک شبکه خاص به رابط VPN باشد حتی زمانی که کلاینت مربوطه متصل نیست (سپس ترافیک دور ریخته خواهد شد).

این گزینه باید یا در یک پرونده پیکربندی نمونه کلاینت با استفاده از --client-config-dir مشخص شود، یا به صورت پویا با استفاده از یک اسکریپت --client-connect تولید گردد.

دستورالعمل --iroute همچنین تعامل مهمی با --push "route ..." دارد. --iroute اساساً زیرشبکه‌ای را تعریف می‌کند که متعلق به یک کلاینت خاص است (ما این کلاینت را A می‌نامیم). اگر می‌خواهید کلاینت‌های دیگر بتوانند به زیرشبکه A دسترسی پیدا کنند، می‌توانید از --push "route ..." همراه با --client-to-client برای اعمال این کار استفاده کنید. برای اینکه تمام کلاینت‌ها زیرشبکه A را ببینند، OpenVPN باید این مسیر را به تمام کلاینت‌ها به جز A ارسال (push) کند، زیرا زیرشبکه از قبل متعلق به A است. OpenVPN این کار را با ارسال نکردن مسیر به کلاینتی که با یکی از irouteهای آن کلاینت مطابقت دارد انجام می‌دهد.

--iroute-ipv6 args
برای پیکربندی مسیر ایستای IPv6 به ازای هر کلاینت در --client-config-dir، جهت جزئیات بیشتر درباره نحوه راه‌اندازی و استفاده از آن و چگونگی تعامل --iroute و --route، به --iroute مراجعه کنید.

نحو معتبر:

iroute-ipv6 ipv6addr/bits
کارساز را به حداکثر n کلاینت هم‌زمان محدود می‌کند. پیش‌فرض 1024 است.
حداکثر n مسیر داخلی را به ازای هر کلاینت مجاز می‌داند (پیش‌فرض 256). این مورد برای کمک به مهار حملات DoS طراحی شده است که در آن یک کلاینت احراز هویت شده کارساز را با بسته‌هایی که به نظر می‌رسد از چندین نشانی MAC منحصر‌به‌فرد می‌آیند غرق (flood) می‌کند و کارساز را مجبور می‌سازد تا با گسترش جدول مسیریابی داخلی خود، حافظه مجازی را به اتمام برساند. این دستورالعمل می‌تواند در یک پرونده --client-config-dir استفاده شود یا توسط یک اسکریپت --client-connect به‌طور خودکار تولید شود تا مقدار سراسری را برای یک کلاینت خاص بازنویسی کند.

توجه داشته باشید که این دستورالعمل بر جدول مسیریابی داخلی OpenVPN تأثیر می‌گذارد، نه جدول مسیریابی هسته.

نام کاربری یک اتصال را به نام کاربری مشخص‌شده تغییر می‌دهد. این نام کاربری توسط --auth-gen-token نیز استفاده خواهد شد. با این حال، نام کاربری جایگزین‌شده تنها پس از خوانده شدن --client-config-dir و اجرای اسکریپت‌های --auth-user-pass-verify و --client-connect اعمال می‌شود.

همچنین --username-as-common-name از نام کاربری ارائه‌شده توسط کلاینت به عنوان common-name استفاده خواهد کرد. توصیه می‌شود در صورت استفاده از گزینهٔ --username-as-common-name از به‌کارگیری گزینهٔ --override-username خودداری کنید.

نام کاربری تغییریافته در خروجی وضعیت و همچنین توسط گزینهٔ --auth-gen-token دریافت خواهد شد. همچنین در صورت فعال بودن --auth-gen-token، با استفاده از --auth-token-user به کلاینت ارسال (push) می‌شود.

به صورت داخلی در تمام مذاکرات مجدد بعدی، نام کاربری ارائه‌شده توسط کلاینت با نام کاربری ارائه‌شده توسط --override-username جایگزین خواهد شد. اگر کلاینت به نام کاربری دیگری تغییر یابد که هم با نام کاربری اولیه و هم با نام کاربری جایگزین‌شده متفاوت باشد، کلاینت رد خواهد شد.

هنگام استفاده از --override-username و گزینه‌های مرتبط، باید دقت ویژه‌ای به خرج داد تا هر دو نام کاربری اولیهٔ کلاینت و نام کاربری جایگزین‌شده به درستی مدیریت شوند تا از دور زدن احراز هویت/مجوزدهی جلوگیری شود.

این گزینه عمدتاً برای مواردی در نظر گرفته شده است که از گواهی‌ها و احراز هویت چندعاملی استفاده می‌کنند و بنابراین نام کاربری‌ای که بتوان برای --auth-gen-token استفاده کرد ارائه نمی‌دهند، تا امکان تعیین نام کاربری در این سناریوها فراهم شود.

اگر دستورالعمل --auth-token توسط اسکریپت/پلاگین دیگری یا رابط مدیریتی ارسال می‌شود، تولید و ارسال --auth-token-user را نیز مد نظر قرار دهید.

--port-share args
اشتراک‌گذاری پورت TCP برنامهٔ OpenVPN با سرویسی دیگر

نحو معتبر:

port-share host port [dir]

هنگام اجرا در حالت کارساز TCP، پورت OpenVPN را با برنامهٔ دیگری مانند یک کارساز HTTPS به اشتراک می‌گذارد. اگر OpenVPN اتصالی به پورت خود را تشخیص دهد که از پروتکلی غیر از پروتکل OpenVPN استفاده می‌کند، اتصال را به کارساز در host:port پروکسی می‌کند. در حال حاضر فقط برای کار با HTTP/HTTPS طراحی شده است، هرچند از نظر تئوری گسترش آن به پروتکل‌های دیگر مانند ssh امکان‌پذیر است.

آرگومان dir یک دایرکتوری اختیاری را مشخص می‌کند که در آن برای هر اتصال پروکسی، یک پروندهٔ موقت با نام N شامل محتوای C به صورت پویا ایجاد می‌شود؛ که در آن C مقدار IP:port مبدأ اتصال کلاینت و N مقدار IP:port مبدأ اتصال به دریافت‌کنندهٔ پروکسی است. این دایرکتوری می‌تواند توسط دریافت‌کنندهٔ پروکسی به عنوان یک واژه‌نامه برای تشخیص مبدأ اتصال استفاده شود. هر پروندهٔ ایجادشده پس از قطع اتصال پروکسی‌شده، به طور خودکار حذف خواهد شد.

در Windows پیاده‌سازی نشده است.

ارسال یک گزینه از پروندهٔ پیکربندی به کلاینت جهت اجرای از راه دور. توجه داشته باشید که option باید داخل گیومه دوتایی ("") قرار گیرد. کلاینت باید در پروندهٔ پیکربندی خود --pull را مشخص کند. مجموعه گزینه‌هایی که می‌توان ارسال کرد هم از نظر امکان‌پذیری و هم از نظر امنیتی محدود است. برخی گزینه‌ها مانند مواردی که اسکریپت اجرا می‌کنند ممنوع هستند، زیرا عملاً به یک کارساز نفوذ‌یافته اجازه می‌دهند کد دلخواه را روی کلاینت اجرا کند. گزینه‌های دیگر مانند پارامترهای TLS یا MTU قابل ارسال نیستند، زیرا کلاینت باید پیش از برقراری اتصال با کارساز از آن‌ها مطلع باشد.

این فهرستی جزئی از گزینه‌هایی است که در حال حاضر قابل ارسال هستند: --route، --route-gateway، --route-delay، --redirect-gateway، --ip-win32، --dhcp-option، --dns، --inactive، --ping، --ping-exit، --ping-restart، --setenv، --auth-token، --persist-tun، --echo، --comp-lzo، --socket-flags، --sndbuf، --rcvbuf، --session-timeout

نکته: استفاده از --push نیازمند اجرای OpenVPN در حالت --mode server (یا استفاده از یکی از دستورالعمل‌های کمکی --server یا --server-bridge) است.

--push-remove opt
حذف انتخابی تمام گزینه‌های --push منطبق با "opt" از فهرست گزینه‌های یک کلاینت. مقدار opt به عنوان یک زیررشته با کل رشتهٔ گزینهٔ ارسالی به کلاینت تطبیق داده می‌شود؛ بنابراین --push-remove route تمام دستورات --push route ... و --push route-ipv6 ... را حذف خواهد کرد، در حالی که --push-remove "route-ipv6 2001:" تنها مسیرهای IPv6 مربوط به شبکه‌های 2001:... را حذف می‌کند.

گزینهٔ --push-remove تنها می‌تواند در بافت مخصوص کلاینت، مانند یک پرونده در --client-config-dir، یا اسکریپت یا پلاگین --client-connect استفاده شود - مشابه --push-reset، اما انتخابی‌تر.

نکته: برای تغییر یک گزینه، می‌توان از --push-remove برای حذف مقدار قبلی استفاده کرد و سپس گزینهٔ --push جدیدی با مقدار تازه افزود.

نکته ۲: به دلیل جزئیات پیاده‌سازی، 'ifconfig' و 'ifconfig-ipv6' تنها با تطابق دقیق روی نام گزینه قابل حذف هستند (push-remove ifconfig)؛ هیچ تطابق زیررشته‌ای و هیچ تطابقی بر اساس آرگومان آدرس IPv4/IPv6 امکان‌پذیر نیست.

--push-reset
عدم به ارث بردن فهرست push سراسری برای یک نمونه کلاینت خاص. این گزینه را در یک بافت مخصوص کلاینت، مانند یک پروندهٔ پیکربندی --client-config-dir مشخص کنید. این گزینه، گزینه‌های --push را در سطح پروندهٔ پیکربندی سراسری نادیده می‌گیرد.

نکته: گزینهٔ --push-reset بسیار فراگیر است: تقریباً تمام گزینه‌ها را از فهرست گزینه‌های ارسالی حذف می‌کند. در بسیاری از موارد، برخی از این گزینه‌ها باید بعداً دوباره پیکربندی شوند - به ویژه، --topology subnet و --route-gateway از دست خواهند رفت و این امر در بسیاری از موارد پیکربندی کلاینت را مختل می‌کند. بنابراین، برای اکثر اهداف، --push-remove برای حذف انتخابی گزینه‌های push برای کلاینت‌های مجزا مناسب‌تر است.

یک دستورالعمل کمکی طراحی‌شده برای ساده‌سازی پیکربندی حالت سرور OpenVPN. این دستورالعمل یک سرور OpenVPN را راه‌اندازی می‌کند که نشانی‌ها را از شبکه/ماسک‌شبکه داده‌شده به کلاینت‌ها اختصاص می‌دهد. خود سرور نشانی .1 شبکه داده‌شده را برای استفاده به‌عنون نقطه پایانی سمت سرور رابط محلی TUN/TAP برمی‌دارد. اگر پرچم اختیاری nopool داده شود، هیچ استخر نشانی IP پویایی برای کلاینت‌های VPN آماده نخواهد شد.

نحو معتبر:

server network netmask [nopool]

برای نمونه، --server 10.8.0.0 255.255.255.0 به صورت زیر بسط می‌یابد:

mode server
tls-server
push "topology [topology]"
if dev tun AND (topology == net30 OR topology == p2p):
  ifconfig 10.8.0.1 10.8.0.2
  if !nopool:
    ifconfig-pool 10.8.0.4 10.8.0.251
  route 10.8.0.0 255.255.255.0
  if client-to-client:
    push "route 10.8.0.0 255.255.255.0"
  else if topology == net30:
    push "route 10.8.0.1"
if dev tap OR (dev tun AND topology == subnet):
  ifconfig 10.8.0.1 255.255.255.0
  if !nopool:
    ifconfig-pool 10.8.0.2 10.8.0.253 255.255.255.0
  push "route-gateway 10.8.0.1"
  if route-gateway unset:
    route-gateway 10.8.0.2

در صورتی که از پل‌زدن اترنت استفاده می‌کنید، از --server استفاده نکنید. به جای آن از --server-bridge استفاده کنید.

--server-bridge args
یک دستورالعمل کمکی مشابه --server که برای ساده‌سازی پیکربندی حالت سرور OpenVPN در پیکربندی‌های پل‌زدن اترنت طراحی شده است.

نحوهای معتبر:

server-bridge gateway netmask pool-start-IP pool-end-IP
server-bridge [nogw]

اگر --server-bridge بدون هیچ پارامتری استفاده شود، حالت پراکسی DHCP را فعال می‌کند که در آن کلاینت‌های OpenVPN متصل‌شونده یک نشانی IP برای آداپتور TAP خود از سرور DHCP فعال در LAN سمت سرور OpenVPN دریافت می‌کنند. توجه داشته باشید که تنها کلاینت‌هایی که از اتصال یک کلاینت DHCP به آداپتور TAP پشتیبانی می‌کنند (مانند Windows) می‌توانند این حالت را پشتیبانی کنند. پرچم اختیاری nogw (پیشرفته) مشخص می‌کند که اطلاعات دروازه نباید به کلاینت ارسال شود.

برای پیکربندی پل‌زدن اترنت، ابتدا باید از قابلیت پل‌زدن سیستم‌عامل خود برای پل‌زدن رابط TAP با رابط کارت شبکه اترنت استفاده کنید. برای نمونه، در لینوکس این کار با ابزار brctl انجام می‌شود، و در Windows XP در Network Connections Panel با انتخاب آداپتورهای اترنت و TAP و کلیک راست روی "Bridge Connections" انجام می‌گیرد.

سپس باید به‌صورت دستی IP/netmask را روی رابط پل تنظیم کنید. پارامترهای gateway و netmask در --server-bridge را می‌توان روی IP/netmask رابط پل، یا IP/netmask دروازه/مسیریاب پیش‌فرض در زیرشبکه پل‌شده تنظیم کرد.

در نهایت، یک محدوده IP را در زیرشبکه پل‌شده، که با pool-start-IP و pool-end-IP مشخص می‌شود، برای OpenVPN کنار بگذارید تا به کلاینت‌های متصل‌شونده اختصاص دهد.

برای نمونه، server-bridge 10.8.0.4 255.255.255.0 10.8.0.128 10.8.0.254 به صورت زیر بسط می‌یابد:

mode server
tls-server
ifconfig-pool 10.8.0.128 10.8.0.254 255.255.255.0
push "route-gateway 10.8.0.4"

در نمونه‌ای دیگر، --server-bridge (بدون پارامتر) به صورت زیر بسط می‌یابد:

mode server
tls-server
push "route-gateway dhcp"

یا --server-bridge nogw به صورت زیر بسط می‌یابد:

mode server
tls-server
--server-ipv6 args
تابع راحتی برای فعال‌سازی هم‌زمان تعدادی از گزینه‌های مربوط به IPv6، از جمله --ifconfig-ipv6، --ifconfig-ipv6-pool و --push tun-ipv6.

نحو معتبر:

server-ipv6 ipv6addr/bits

ارسال دستورالعمل --tun-ipv6 برای کلاینت‌های قدیمی‌تری انجام می‌شود که در پیکربندی خود به یک --tun-ipv6 صریح نیاز دارند.

حذف مسیرهایی که برای n ثانیه فعالیتی نداشته‌اند (یعنی زمان فرسودگی). این بررسی هر t ثانیه (یعنی بازه زمانی بررسی) اجرا می‌شود.

نحو معتبر:

stale-routes-check n [t]

اگر t مشخص نشده باشد، مقدار پیش‌فرض آن n خواهد بود.

تنها مسیرهایی که به‌صورت پویا یاد گرفته شده‌اند مشمول این بررسی هستند. مسیرهای اضافه‌شده از طریق پیکربندی، مانند مدخل‌های --iroute و آدرس ifconfig ارسال‌شده به کلاینت، هرگز توسط آن حذف نمی‌شوند؛ آنها تنها هنگامی که اتصال کلاینت قطع شود حذف می‌گردند.

این گزینه به کوچک نگه‌داشتن جدول مسیریابی پویا کمک می‌کند. همچنین --max-routes-per-client را ببینید.

استفاده از نام کاربری احراز هویت‌شده به‌جای common-name برگرفته از گواهی کلاینت به‌عنوان common-name. نیاز دارد که شکلی از اعتبارسنجی --auth-user-pass فعال باشد. از آنجا که جایگزینی پس از اعتبارسنجی --auth-user-pass رخ می‌دهد، اسکریپت یا پلاگین اعتبارسنجی همچنان common-name را از گواهی دریافت خواهد کرد.

متغیر محیطی common_name که به اسکریپت‌ها و پلاگین‌های فراخوانی‌شده پس از احراز هویت (مانند اسکریپت client-connect) ارسال می‌شود و نام پرونده‌های پردازش‌شده در دایرکتوری client-config با نام کاربری مطابقت خواهند داشت.

مشخص می‌کند که آیا کلاینت ملزم به ارائه یک گواهی معتبر است یا خیر.

گزینه‌های ممکن برای mode عبارتند از:

گواهی کلاینت الزامی نیست. کلاینت تنها باید با استفاده از نام کاربری/گذرواژه احراز هویت شود. توجه داشته باشید که استفاده از این دستورالعمل امنیت کمتری نسبت به الزام گواهی برای تمام کلاینت‌ها دارد.

اگر از این دستورالعمل استفاده کنید، تمام مسئولیت احراز هویت بر عهده اسکریپت --auth-user-pass-verify شما خواهد بود، بنابراین در نظر داشته باشید که اشکالات موجود در اسکریپت شما می‌تواند امنیت VPN شما را به خطر بیندازد.

گزینه --verify-client-cert none از نظر عملکردی معادل --client-cert-not-required است.

کلاینت ممکن است یک گواهی ارائه دهد اما ملزم به انجام این کار نیست. هنگام استفاده از این دستورالعمل، باید از یک اسکریپت --auth-user-pass-verify نیز استفاده کنید تا مطمئن شوید که کلاینت‌ها با استفاده از یک گواهی، یک نام کاربری و گذرواژه، یا احتمالاً هر دو احراز هویت می‌شوند.

مجدداً، تمام مسئولیت احراز هویت بر عهده اسکریپت --auth-user-pass-verify شما خواهد بود، بنابراین به خاطر داشته باشید که اشکالات موجود در اسکریپت شما می‌تواند به طور بالقوه امنیت VPN شما را به خطر بیندازد.

این گزینه پیش‌فرض است. کلاینت ملزم به ارائه یک گواهی است، در غیر این صورت دسترسی به VPN رد می‌شود.

اگر از این دستورالعمل استفاده نکنید (یا از --verify-client-cert require استفاده کنید) اما یک اسکریپت --auth-user-pass-verify نیز مشخص نمایید، آنگاه OpenVPN احراز هویت دوگانه انجام خواهد داد. برای اینکه کلاینت احراز هویت شده و در VPN پذیرفته شود، باید هم اعتبارسنجی گواهی کلاینت و هم اسکریپت --auth-user-pass-verify موفقیت‌آمیز باشند.

گزینه فقط مخصوص سرور. نمونه سرور OpenVPN را به یک سوئیچ تبدیل می‌کند که بر اساس IEEE 802.1Q از برچسب‌گذاری VLAN پشتیبانی می‌کند.

دستگاه TAP سرور و هر یک از کلاینت‌های متصل به عنوان یک درگاه سوئیچ در نظر گرفته می‌شوند. تمام درگاه‌های کلاینت در حالت بدون برچسب (untagged) هستند و دستگاه TAP سرور بسته به تنظیم --vlan-accept، دارای برچسب VLAN، بدون برچسب یا پذیرنده هر دو است.

فریم‌های اترنت همراه با تگ پیشوند 802.1Q به اصطلاح "tagged" نامیده می‌شوند. اگر فیلد شناسه VLAN (یا VID) در چنین تگی غیر صفر باشد، فریم "VLAN-tagged" نامیده می‌شود. اگر VID صفر باشد، اما فیلد Priority Control Point (یا PCP) غیر صفر باشد، فریم "prio-tagged" نامیده می‌شود. اگر هیچ تگ 802.1Q وجود نداشته باشد، فریم "untagged" است.

با استفاده از گزینه --vlan-pvid v به ازای هر کلاینت (گزینه --client-config-dir را ببینید)، هر درگاه می‌تواند به یک VID مشخص مرتبط شود. بسته‌ها تنها می‌توانند بین درگاه‌هایی که VID یکسانی دارند بازفرستاده شوند. بنابراین، کلاینت‌های دارای VIDهای متفاوت کاملاً از یکدیگر جدا هستند، حتی اگر --client-to-client فعال باشد.

فیلتر کردن بسته‌ها درون سرور OpenVPN انجام می‌شود. کلاینت‌ها نباید هیچ‌گونه پیکربندی برچسب‌گذاری VLAN اعمال کرده باشند.

گزینه --vlan-tagging به‌طور پیش‌فرض غیرفعال است. هنگامی که غیرفعال باشد، OpenVPN هر فریم اترنتی را می‌پذیرد و هیچ پردازش خاصی برای بسته‌های دارای برچسب VLAN انجام نمی‌دهد.

این گزینه تنها در حالت --dev tap mode قابل فعال‌سازی است.

سیاست برچسب‌گذاری VLAN را برای دستگاه TAP سرور پیکربندی می‌کند.

نحو معتبر:

vlan-accept  all|tagged|untagged

حالت‌های زیر در دسترس هستند:

تنها فریم‌های دارای برچسب VLAN را می‌پذیرد. تنها بسته‌های دارای برچسب VLAN پذیرفته می‌شوند، در حالی که بسته‌های بدون برچسب یا دارای برچسب اولویت هنگام ورود به دستگاه TAP سرور دور انداخته می‌شوند.
تنها فریم‌های بدون برچسب و دارای برچسب اولویت را می‌پذیرد. بسته‌های دارای برچسب VLAN پذیرفته نمی‌شوند، در حالی که بسته‌های بدون برچسب یا دارای برچسب اولویت که وارد دستگاه TAP سرور می‌شوند، با مقدار پیکربندی‌شده برای تنظیم سراسری --vlan-pvid برچسب‌گذاری می‌شوند.
همه فریم‌ها را می‌پذیرد. همه بسته‌ها پذیرفته شده و سپس به ترتیب مانند حالت‌های untagged یا tagged با آن‌ها رفتار می‌شود.
برخی سازندگان از درگاه‌های سوییچ فعال در حالت tagged با عنوان "trunk ports" و درگاه‌های سوییچ فعال در حالت untagged با عنوان "access ports" یاد می‌کنند.

بسته‌های هدایت‌شده از کلاینت‌ها به سرور، با PVID کلاینت مبدا دارای برچسب VLAN می‌شوند، مگر اینکه VID با مقدار سراسری --vlan-pvid مطابقت داشته باشد که در این صورت برچسب حذف می‌شود.

اگر هیچ PVID مقداری برای یک کلاینت خاص پیکربندی نشده باشد (نگاه کنید به --vlan-pvid)، بسته‌ها به‌طور پیش‌فرض با ۱ برچسب‌گذاری می‌شوند.

مشخص می‌کند یک "port" با کدام شناسه VLAN مرتبط است. تنها زمانی معتبر است که --vlan-tagging مشخص شده باشد.

در زمینه کلاینت، این تنظیم مشخص می‌کند کلاینت با کدام شناسه VLAN مرتبط است. در زمینه سراسری، شناسه VLAN دستگاه TAP سرور تنظیم می‌شود. مورد دوم تنها برای حالت‌های --vlan-accept untagged و --vlan-accept all معنا دارد.

مقادیر معتبر برای v از 1 تا 4094 است. مقدار سراسری به‌طور پیش‌فرض 1 است. اگر هیچ --vlan-pvid در زمینه کلاینت مشخص نشده باشد، مقدار سراسری به ارث برده می‌شود.

در برخی پیاده‌سازی‌های سوییچ، از PVID با عنوان "Native VLAN" نیز یاد می‌شود.

(مستقل) نمایش تمام الگوریتم‌های رمز برای استفاده با گزینه --cipher.
(مستقل) نمایش تمام الگوریتم‌های خلاصه پیام برای استفاده با گزینه --auth.
(مستقل) نمایش تمام رمزهای TLS پشتیبانی‌شده توسط کتابخانه رمزنگاری. OpenVPN از TLS برای امن‌سازی کانال کنترل استفاده می‌کند، که از طریق آن کلیدهای استفاده‌شده برای محافظت از ترافیک واقعی VPN تبادل می‌شوند. رمزهای TLS از بالاترین اولویت (امن‌ترین) به پایین‌ترین مرتب خواهند شد.

توجه داشته باشید که کارکرد واقعی یک مجموعه رمز در این فهرست به پیکربندی خاص هر دو طرف بستگی دارد (مثلاً هر دو طرف باید از رمز پشتیبانی کنند، و در صورت استفاده از گواهی RSA یک مجموعه رمز ECDSA کار نخواهد کرد، و غیره).

(مستقل) نمایش موتورهای شتاب‌دهنده رمزنگاری سخت‌افزاری فعلی که توسط کتابخانه OpenSSL پشتیبانی می‌شوند.
(مستقل) نمایش تمام منحنی‌ها/گروه‌های بیضوی موجود برای استفاده با گزینه‌های --ecdh-curve و tls-groups.

(مستقل) تولید یک کلید برای استفاده از نوع keytype. اگر keyfile مشخص نشود یا خالی رها شود، کلید در stdout چاپ می‌شود. برای انواع مختلف keytype بخش‌های زیر را ببینید.

نحو معتبر:

--genkey keytype keyfile

آرگومان‌های معتبر keytype عبارتند از:

secret کلیدهای سکرت مشترک استاندارد OpenVPN

tls-crypt نام مستعار برای secret

tls-auth نام مستعار برای secret

auth-token کلید مورد استفاده برای --auth-gen-token-key

tls-crypt-v2-server کلید سرور TLS Crypt v2

tls-crypt-v2-client کلید کلاینت TLS Crypt v2

نمونه‌ها:

$ openvpn --genkey secret shared.key
$ openvpn --genkey tls-crypt shared.key
$ openvpn --genkey tls-auth shared.key
$ openvpn --genkey tls-crypt-v2-server v2crypt-server.key
$ openvpn --tls-crypt-v2 v2crypt-server.key --genkey tls-crypt-v2-client v2crypt-client-1.key
•
تولید Shared Secret Keys تولید یک سکرت مشترک، برای استفاده با گزینه‌های --tls-auth یا --tls-crypt.

نحو:

$ openvpn --genkey tls-crypt|tls-auth keyfile

کلید در keyfile ذخیره می‌شود. هر دو حالت (tls-crypt و tls-auth) یک نوع کلید تولید می‌کنند. این نام‌های مستعار برای راحتی اضافه شده‌اند.

این پرونده باید از طریق یک کانال امن از پیش موجود مانند scp(1) با طرف مقابل به اشتراک گذاشته شود.

•
تولید TLS Crypt v2 Server key یک کلید --tls-crypt-v2 را برای استفاده توسط سرور OpenVPN تولید می‌کند. کلید در keyfile ذخیره می‌شود.

نحو:

--genkey tls-crypt-v2-server keyfile
•
تولید TLS Crypt v2 Client key یک کلید --tls-crypt-v2 برای استفاده توسط کلاینت‌های OpenVPN تولید می‌کند. کلید در keyfile ذخیره می‌شود.

نحو

--genkey tls-crypt-v2-client keyfile [metadata]

در صورت ارائه، metadata مشخص‌شده را در کلید کلاینت بسته‌بندی‌شده قرار می‌دهد. این متادیتا باید در قالب کدگذاری‌شده با base64 ارائه شود. متادیتا باید حداکثر ۷۳۳ بایت باشد (۹۸۰ نویسه در base64، البته توجه داشته باشید که ۹۸۰ نویسه base64 می‌تواند بیش از ۷۳۳ بایت را کدگذاری کند).

اگر متادیتایی ارائه نشود، OpenVPN از یک برچسب زمانی یونیکس ۶۴ بیتی به نمایندگی از زمان فعلی در UTC، کدگذاری‌شده به ترتیب شبکه، به‌عنوان متادیتا برای کلید تولیدشده استفاده خواهد کرد.

یک کلید کلاینت tls-crypt-v2 با استفاده از یک کلید سرور بسته‌بندی می‌شود. بنابراین برای تولید کلید کلاینت، کاربر باید کلید سرور را با استفاده از گزینه --tls-crypt-v2 ارائه دهد.

سرورها می‌توانند از --tls-crypt-v2-verify برای مشخص کردن یک دستور اعتبارسنجی متادیتا استفاده کنند.

•
تولید Authentication Token key یک سکرت جدید تولید می‌کند که می‌تواند با --auth-gen-token-secret استفاده شود.

نحو:

--genkey auth-token [keyfile]
نکته:
این پرونده باید برای سرور محرمانه باقی بماند، زیرا هر کسی که به این پرونده دسترسی داشته باشد می‌تواند توکن‌های احراز هویتی تولید کند که سرور OpenVPN آن‌ها را معتبر خواهد شناخت.

هنگام اجرای OpenVPN در حالت کلاینت/سرور، کانال داده از یک کلید رمزنگاری زودگذر جداگانه استفاده می‌کند که در فواصل زمانی منظم تعویض می‌شود.

مذاکره مجدد کلید کانال داده پس از ارسال یا دریافت n بایت (به‌طور پیش‌فرض با یک استثنا غیرفعال است، به زیر نگاه کنید). OpenVPN اجازه می‌دهد طول عمر یک کلید بر حسب تعداد بایت‌های رمزگذاری/رمزگشایی‌شده، تعداد بسته‌ها یا تعداد ثانیه‌ها مشخص شود. در صورت برآورده شدن هر یک از این سه معیار توسط هر یک از طرفین ارتباط، مذاکره مجدد کلید اجباری خواهد شد.

در صورت استفاده از سایفرهایی با اندازه بلوک رمز کمتر از ۱۲۸ بیت، --reneg-bytes به‌طور پیش‌فرض روی 64MB تنظیم می‌شود، مگر اینکه صریحاً با تعیین مقدار 0 غیرفعال شود؛ اما این کار به‌شدت نهی می‌شود زیرا برای ایجاد محافظت در برابر بردار حمله SWEET32 طراحی شده است. برای اطلاعات بیشتر گزینه --cipher را ببینید.

هنگامی که تخلیه بار کانال داده (DCO) فعال باشد، این گزینه نادیده گرفته می‌شود. DCO از آستانه‌های مذاکره مجدد قابل‌پیکربندی پشتیبانی نمی‌کند؛ سازوکارهای خودکار مذاکره مجدد کلید برای سایفرهای امروزی کافی هستند.

مذاکره مجدد کلید کانال داده پس از ارسال و دریافت n بسته (به‌طور پیش‌فرض غیرفعال است).

هنگامی که تخلیه بار کانال داده (DCO) فعال باشد، این گزینه نادیده گرفته می‌شود. DCO از آستانه‌های مذاکره مجدد قابل‌پیکربندی پشتیبانی نمی‌کند؛ سازوکارهای خودکار مذاکره مجدد کلید برای سایفرهای امروزی کافی هستند.

مذاکره مجدد کلید کانال داده حداکثر پس از max ثانیه (پیش‌فرض 3600) و حداقل min ثانیه (پیش‌فرض ۹۰٪ از max برای سرورها، و برابر با max برای کلاینت‌ها).
reneg-sec max [min]

مقدار مؤثر استفاده‌شده برای --reneg-sec برای هر نشست به‌صورت شبه‌تصادفی یکنواخت بین min و max انتخاب می‌شود.

با مقدار پیش‌فرض 3600، این امر منجر به یک مقدار مؤثر در هر نشست در محدوده 3240 .. 3600 ثانیه برای سرورها، یا دقیقاً ۳۶۰۰ ثانیه برای کلاینت‌ها می‌شود.

هنگام استفاده از احراز هویت دومرحله‌ای، توجه داشته باشید که این مقدار پیش‌فرض ممکن است باعث شود کاربر نهایی مجبور شود هر ساعت یک بار مجدداً احراز هویت کند.

همچنین به یاد داشته باشید که این گزینه می‌تواند در هر دو سمت کلاینت و سرور استفاده شود، و هر سمتی که از مقدار کمتری استفاده کند، آغازگر مذاکره مجدد خواهد بود. یک اشتباه رایج این است که --reneg-sec در یک سمت روی مقدار بالاتری تنظیم شود در حالی که سمت دیگر اتصال همچنان از مقدار پیش‌فرض 3600 ثانیه استفاده می‌کند، به این معنی که مذاکره مجدد همچنان هر 3600 ثانیه یک بار رخ خواهد داد. راه‌حل این است که --reneg-sec را در هر دو سمت کلاینت و سرور افزایش دهید، یا آن را در یک سمت اتصال روی 0 تنظیم کنید (جهت غیرفعال‌سازی)، و در سمت دیگر روی مقدار دلخواه خود بگذارید.

حالت TLS قدرتمندترین حالت رمزنگاری OpenVPN از نظر امنیت و انعطاف‌پذیری است. حالت TLS با ایجاد کانال‌های کنترل و داده که روی یک درگاه تکین TCP/UDP تسهیم (multiplex) شده‌اند، عمل می‌کند. OpenVPN یک نشست TLS را روی کانال کنترل آغاز می‌کند و از آن برای تبادل کلیدهای سایفر و HMAC جهت محافظت از کانال داده بهره می‌برد. حالت TLS از یک لایه قابلیت اطمینان قدرتمند روی اتصال UDP برای تمامی ارتباطات کانال کنترل استفاده می‌کند، در حالی که کانال داده که داده‌های رمزگذاری‌شده تونل از آن عبور می‌کنند، بدون هیچ واسطه‌ای هدایت می‌شود. نتیجه دستیابی به بهترین مزایای هر دو حالت است: یک کانال داده سریع که روی UDP فقط با سربار توابع رمزگذاری، رمزگشایی و HMAC ارسال می‌شود، و یک کانال کنترل که تمامی قابلیت‌های امنیتی TLS، شامل احراز هویت مبتنی بر گواهی و رازداری مستقیم دیفی-هلمن (Diffie Hellman forward secrecy) را فراهم می‌کند.

برای استفاده از حالت TLS، هر همتایی (peer) که OpenVPN را اجرا می‌کند باید جفت گواهی/کلید محلی خود (--cert و --key) را داشته باشد که توسط گواهی ریشه مشخص‌شده در --ca امضا شده است.

هنگامی که دو همتای OpenVPN به یکدیگر متصل می‌شوند، هر یک گواهی محلی خود را به دیگری ارائه می‌دهد. سپس هر همتا بررسی می‌کند که همتای مقابل گواهی‌ای ارائه داده باشد که توسط گواهی ریشه اصلی مشخص‌شده در --ca امضا شده باشد.

اگر این بررسی در هر دو همتا موفقیت‌آمیز باشد، مذاکره TLS با موفقیت انجام می‌شود، هر دو همتای OpenVPN کلیدهای نشست موقت را تبادل خواهند کرد و انتقال داده در تونل آغاز می‌شود.

پروژه OpenVPN مجموعه‌ای از اسکریپت‌ها را برای مدیریت گواهی‌ها و کلیدهای RSA ارائه می‌دهد: https://github.com/OpenVPN/easy-rsa

دریافت گذرواژه گواهی از کنسول یا file قبل از تبدیل شدن به دیمن.

نحوهای معتبر:

askpass
askpass file

برای کاربرانی که دغدغه‌های امنیتی شدیدی دارند، این امکان وجود دارد که با یک گذرواژه از کلید خصوصی محافظت شود. البته این بدان معناست که با هر بار راه‌اندازی دیمن OpenVPN باید برای وارد کردن گذرواژه حضور داشته باشید. گزینه --askpass به شما اجازه می‌دهد OpenVPN را از خط فرمان اجرا کنید. این گزینه قبل از دیمن شدن، گذرواژه را از شما می‌پرسد. برای محافظت از یک کلید خصوصی با گذرواژه، هنگام استفاده از ابزار خط فرمان openssl برای مدیریت گواهی‌ها و کلیدهای خصوصی باید گزینه -nodes را حذف کنید.

اگر file مشخص شده باشد، گذرواژه از سطر اول file خوانده می‌شود. به یاد داشته باشید که ذخیره گذرواژه در یک پرونده، تا حدی امنیت مضاعف ارائه‌شده توسط استفاده از کلید رمزگذاری‌شده را بی‌اثر می‌کند.

پرونده مرجع صدور گواهی (CA) در قالب pem.، که با نام گواهی root (ریشه) نیز شناخته می‌شود. این پرونده می‌تواند شامل چندین گواهی با قالب pem. باشد که به هم متصل شده‌اند. می‌توانید با استفاده از دستوری مانند زیر، گواهی مرجع صدور گواهی و کلید خصوصی خود را بسازید:
openssl req -nodes -new -x509 -keyout ca.key -out ca.crt

سپس پرونده openssl.cnf خود را ویرایش کرده و متغیر certificate را طوری تغییر دهید که به گواهی ریشه جدید شما یعنی ca.crt اشاره کند.

تنها به منظور آزمایش، توزیع OpenVPN شامل یک گواهی CA نمونه (ca.crt) است. البته هرگز نباید از گواهی‌ها و کلیدهای آزمایشی توزیع‌شده با OpenVPN در یک محیط عملیاتی استفاده کنید، زیرا به دلیل توزیع عمومی همراه با OpenVPN، کاملاً ناامن هستند.

دایرکتوری حاوی گواهی‌های معتبر (CAها و CRLها). در mbed TLS در دسترس نیست.

انتظار می‌رود CAهای موجود در دایرکتوری capath با الگوی <hash>.<n> نام‌گذاری شوند. انتظار می‌رود CRLها با الگوی <hash>.r<n> نام‌گذاری شوند. برای اطلاعات بیشتر، گزینه‌ی -CApath از دستور openssl verify و گزینه‌ی -hash از دستورهای openssl x509، openssl crl و X509_LOOKUP_hash_dir()(3) را ببینید.

مشابه گزینه‌ی --crl-verify، استفاده از CRLها اجباری نیست - در صورت عدم وجود CRL مربوطه، OpenVPN یک هشدار معمول در لاگ‌ها ثبت می‌کند، اما اجازه برقراری اتصال داده خواهد شد.

گواهی امضاشده‌ی همتای محلی در قالب pem. یا به صورت یک URI -- باید توسط مرجع صدور گواهی که گواهی آن در --ca file در پیکربندی همتا قرار دارد، امضا شده باشد. URI تنها زمانی پشتیبانی می‌شود که برنامه با OpenSSL 3.0 یا بالاتر ساخته شده و ارائه‌دهندگان (providers) مورد نیاز بارگذاری شده باشند. انواع URIهای پشتیبانی‌شده و نحو (syntax) آن‌ها به ارائه‌دهنده‌ها بستگی دارد. OpenSSL پشتیبانی داخلی از URI به شکل "<file:/absolute/path>" دارد که در این حالت پیشوند طرح "file:" اختیاری است و هر قالب پرونده‌ای که توسط OpenSSL شناخته شود (مانند PEM، PKCS12) پشتیبانی می‌شود. پروتکل PKCS#11 URI (RFC 7512) توسط pkcs11-provider پشتیبانی می‌شود.

هر همتا در یک اتصال OpenVPN که در حالت TLS اجرا می‌شود باید پرونده گواهی و پرونده کلید خصوصی مخصوص به خود را داشته باشد. علاوه بر این، هر گواهی باید توسط کلید مرجع صدور گواهی که کلید عمومی آن در پرونده مرجع صدور گواهی --ca قرار دارد امضا شده باشد. شما می‌توانید به راحتی مرجع صدور گواهی خود را ایجاد کنید (به بالا مراجعه کنید) یا برای استفاده از یک سرویس تجاری مانند thawte.com هزینه بپردازید (که در این صورت به تأمین مالی دومین گردشگر فضایی جهان کمک خواهید کرد :). برای ایجاد یک گواهی، می‌توانید از دستوری مانند زیر استفاده کنید:

openssl req -nodes -new -keyout mycert.key -out mycert.csr

اگر کلید خصوصی مرجع صدور گواهی شما روی دستگاه دیگری قرار دارد، درخواست امضای گواهی (mycert.csr) را به آن دستگاه منتقل کنید (این کار می‌تواند از طریق کانالی ناامن مانند ایمیل انجام شود). اکنون گواهی را با دستوری مانند زیر امضا کنید:

openssl ca -out mycert.crt -in mycert.csr

اکنون گواهی (mycert.crt) را به همتایی که ابتدا پرونده csr. را ایجاد کرده بود برگردانید (این کار می‌تواند روی یک بستر عمومی انجام شود). توجه داشته باشید که دستور openssl ca مکان کلید مرجع صدور گواهی را از پرونده پیکربندی خود مانند /usr/share/ssl/openssl.cnf می‌خواند -- همچنین توجه داشته باشید که برای عملکردهای مرجع صدور گواهی، باید پرونده‌های index.txt (می‌تواند خالی باشد) و serial (مقداردهی اولیه به 01) را آماده کنید.

بررسی گواهی همتا در برابر فهرست ابطال گواهی (CRL).

نحو معتبر:

crl-verify file/directory flag

مثال‌ها:

crl-verify crl-file.pem
crl-verify /etc/openvpn/crls dir

یک CRL (فهرست ابطال گواهی) زمانی استفاده می‌شود که یک کلید مشخص لو رفته یا به خطر افتاده باشد اما کلیت PKI هنوز سالم و دست‌نخورده باشد.

فرض کنید یک ساختار PKI شامل یک CA، گواهی ریشه و تعدادی گواهی کلاینت دارید. فرض کنید یک لپ‌تاپ حاوی کلید و گواهی کلاینت به سرقت رفته است. با افزودن گواهی سرقت‌شده به پرونده CRL، می‌توانید هر اتصالی که تلاش می‌کند از آن استفاده کند را رد کنید، در حالی که یکپارچگی کلی PKI حفظ می‌شود.

تنها زمانی که بازسازی کل ساختار PKI از ابتدا ضروری خواهد بود، زمانی است که کلید گواهی ریشه خود به خطر افتاده باشد.

این گزینه اجباری نیست - اگر CRL مربوطه وجود نداشته باشد، OpenVPN هشداری را در لاگ‌ها ثبت می‌کند - برای مثال:

VERIFY WARNING: depth=0, unable to get certificate CRL

اما اتصال مجاز خواهد بود. اگر پرچم اختیاری dir مشخص شده باشد، حالت متفاوتی فعال می‌شود که در آن crl-verify به دایرکتوری اشاره می‌کند که شامل پرونده‌هایی با نام شماره سریال‌های باطل‌شده است (پرونده‌ها می‌توانند خالی باشند، محتوای آن‌ها هرگز خوانده نمی‌شود). اگر کلاینتی درخواست اتصال دهد و شماره سریال گواهی آن کلاینت (رشته ده‌دهی) نام پرونده‌ای در آن دایرکتوری باشد، رد خواهد شد.

از آن‌جا که پرونده (یا دایرکتوری) crl با هر بار اتصال یک همتا خوانده می‌شود، اگر در حال کاهش دسترسی‌های root با استفاده از --user هستید، مطمئن شوید که این کاربر دسترسی‌های کافی برای خواندن پرونده را دارد.
پرونده حاوی پارامترهای میدان متناهی Diffie Hellman در قالب .pem (فقط توسط --tls-server استفاده می‌شود).

مقدار file را روی none قرار دهید تا تبادل کلید میدان متناهی Diffie Hellman غیرفعال شود (و در عوض تنها از ECDH یا الگوریتم‌های توافق کلید ترکیبی جدیدتر مانند X25519MLKEM768 استفاده گردد). توجه داشته باشید که این کار مستلزم آن است که همتایان از یک کتابخانه SSL که از مجموعه‌های رمزنگاری TLS مبتنی بر ECDH پشتیبانی می‌کند (مانند OpenSSL 1.0.1+ یا mbed TLS 2.0+) استفاده کنند. از نگارش 2.7.0 به بعد، این کار معادل عدم تعیین --dh است.

پارامترهای Diffie Hellman را می‌توان با استفاده از openssl dhparam -out dh2048.pem 2048 تولید کرد، اما توصیه می‌شود از none استفاده کنید زیرا میدان متناهی Diffie Hellman با انواع مدرن‌تر مانند ECDH جایگزین شده است.

پارامترهای Diffie Hellman را می‌توان عمومی در نظر گرفت.

منحنی مورد استفاده برای منحنی بیضوی Diffie Hellman را مشخص کنید. منحنی‌های موجود را می‌توان با --show-curves فهرست کرد. منحنی مشخص‌شده فقط برای رمزهای TLS از نوع ECDH استفاده خواهد شد.

این گزینه در ساخت‌های mbed TLS نرم‌افزار OpenVPN پشتیبانی نمی‌شود.

یک file حاوی یک یا چند گواهی PEM (پیوسته به یکدیگر) مشخص کنید که زنجیره گواهی محلی را کامل می‌کند.

این گزینه برای مراجع صدور گواهی (CA) "تفکیک‌شده" مفید است؛ جایی که CA برای گواهی‌های سرور با CA برای گواهی‌های کلاینت متفاوت است. قرار دادن گواهی‌ها در این پرونده به آن‌ها اجازه می‌دهد تا برای تکمیل زنجیره گواهی محلی استفاده شوند بدون اینکه برای اعتبارسنجی گواهی ارائه‌شده توسط همتا به آن‌ها اعتماد شود؛ برخلاف حالتی که گواهی‌ها در پرونده ca قرار می‌گیرند.

پنجره دست‌تکانی (Handshake Window) -- تبادل کلید مبتنی بر TLS باید ظرف n ثانیه پس از آغاز دست‌تکانی توسط هر یک از همتایان نهایی شود (پیش‌فرض 60 ثانیه). در صورت شکست دست‌تکانی، تلاش می‌شود تا اتصال با همتا بازنشانی شده و دوباره تلاش شود. حتی در صورت شکست دست‌تکانی، کلید در حال انقضا تا سقف --tran-window ثانیه برای حفظ پیوستگی انتقال داده‌های تونل استفاده خواهد شد.

پارامتر --hand-window همچنین مدت زمانی را کنترل می‌کند که کلاینت OpenVPN درخواست pull را تا زمان اتمام مهلت تکرار می‌کند.

کلید خصوصی همتای محلی در قالب .pem یا یک URI. از کلید خصوصی تولیدشده هنگام ایجاد گواهی همتای خود استفاده کنید (به --cert file در بالا مراجعه کنید). URI فقط زمانی پشتیبانی می‌شود که با OpenSSL 3.0 یا جدیدتر ساخته شده باشد و ارائه‌دهندگان (providers) مورد نیاز بارگذاری شده باشند. (برای جزئیات بیشتر به --cert مراجعه کنید).
منسوخ شده باید از گزینه --remote-cert-tls در عوض استفاده شود. این گزینه همچنان در دسترس است زیرا نمی‌توان آن را بی‌صدا نادیده گرفت و نیازمند به‌روزرسانی گواهی‌ها و پیکربندی‌ها در هر دو سمت اتصال است. با این حال نباید برای کلاینت‌ها یا سرورهای جدید استفاده شود. این گزینه به فیلد گواهی منسوخ‌شده nsCertType وابسته است.

بسته به کتابخانه TLS مورد استفاده ممکن است کار نکند.

در انتشار‌های آینده حذف خواهد شد.

یک پرونده PKCS #12 حاوی کلید خصوصی محلی، گواهی محلی و گواهی ریشه CA را مشخص کنید. این گزینه می‌تواند به‌جای --ca، --cert و --key استفاده شود. در mbed TLS در دسترس نیست.
--remote-cert-eku oid
مستلزم این است که گواهی همتا با یک extended key usage (کاربرد کلید گسترش‌یافته) صریح امضا شده باشد.

این یک گزینه امنیتی مفید برای کلاینت‌ها است تا اطمینان حاصل شود میزبانی که به آن متصل می‌شوند یک سرور تعیین‌شده است.

کاربرد کلید گسترش‌یافته باید به صورت oid notation یا OpenSSL symbolic representation کدگذاری شود.

--remote-cert-ku key-usage
مستلزم این است که گواهی همتا با یک key-usage (کاربرد کلید) صریح امضا شده باشد.

در صورت وجود در گواهی، مقدار keyUsage توسط کتابخانه TLS در طول دست‌تکانی TLS اعتبارسنجی می‌شود. مشخص کردن این گزینه بدون آرگومان، مستلزم وجود داشتن این افزونه است (تا کتابخانه TLS آن را اعتبارسنجی کند).

اگر key-usage فهرستی از بیت‌های کاربرد باشد، فیلد keyUsage باید حداقل بیت‌هایی مشابه بیت‌های تنظیم‌شده در یکی از مقادیر ارائه‌شده در فهرست key-usage را داشته باشد.

مقادیر key-usage در فهرست باید به صورت هگزادسیمال کدگذاری شوند، به عنوان مثال:

remote-cert-ku a0
--remote-cert-tls type
مستلزم این است که گواهی همتا با یک key usage و extended key usage صریح بر اساس قواعد TLS در RFC3280 امضا شده باشد.

ساختارهای نحوی معتبر:

remote-cert-tls server
remote-cert-tls client

این یک گزینه امنیتی مفید برای کلاینت‌ها است تا اطمینان حاصل شود میزبانی که به آن متصل می‌شوند یک سرور تعیین‌شده است. یا برعکس؛ برای اینکه یک سرور تأیید کند که فقط میزبان‌های دارای گواهی کلاینت می‌توانند متصل شوند.

گزینه --remote-cert-tls client معادل است با:

remote-cert-ku
remote-cert-eku "TLS Web Client Authentication"

گزینه --remote-cert-tls server معادل است با:

remote-cert-ku
remote-cert-eku "TLS Web Server Authentication"

این یک اقدام احتیاطی امنیتی مهم برای محافظت در برابر حمله مرد میانی (man-in-the-middle) است که در آن یک کلاینت مجاز با جعل هویت سرور تلاش می‌کند به کلاینت دیگری متصل شود. این حمله به‌راحتی با واداشتن کلاینت‌ها به تأیید اعتبار گواهی سرور با استفاده از هر یک از گزینه‌های --remote-cert-tls، --verify-x509-name، --peer-fingerprint یا --tls-verify قابل پیشگیری است.

افزودن یک لایه اضافی از احراز هویت HMAC بر روی کانال کنترلی TLS جهت کاهش حملات DoS و حملات علیه پشته TLS.

نحوهای معتبر:

tls-auth file
tls-auth file 0
tls-auth file 1

به طور خلاصه، --tls-auth نوعی "دیوار آتش HMAC" را روی درگاه TCP/UDP برنامه OpenVPN فعال می‌کند، جایی که بسته‌های کانال کنترلی TLS با امضای HMAC نادرست می‌توانند بلافاصله و بدون پاسخ دور انداخته شوند.

file (الزامی) پرونده‌ای با قالب کلید ایستا OpenVPN است که می‌تواند توسط --genkey ایجاد شود.

نسخه‌های قدیمی‌تر (تا OpenVPN 2.3) از یک پرونده عبارت عبور با قالب آزاد پشتیبانی می‌کردند. این ویژگی دیگر در نسخه‌های جدیدتر (v2.4+) پشتیبانی نمی‌شود.

پارامتر اختیاری direction استفاده از ۲ کلید مجزا (HMAC-send، HMAC-receive) را فعال می‌کند، به طوری که هر جهت جریان داده یک کلید HMAC متفاوت داشته باشد. این امر ویژگی‌های امنیتی مطلوبی از جمله از بین بردن انواع خاصی از حملات DoS و حملات تکرار پیام (replay) را به همراه دارد.

هنگامی که پارامتر direction حذف شود، همان کلید به صورت دوطرفه استفاده می‌شود.

پارامتر direction باید همیشه در دو طرف اتصال مکمل یکدیگر باشد، یعنی یک طرف باید از 0 و طرف دیگر از 1 استفاده کند، یا هر دو طرف آن را کاملاً نادیده بگیرند.

پارامتر direction نیازمند این است که file حاوی یک کلید ۲۰۴۸ بیتی باشد. در حالی که نسخه‌های قبل از ۱.۵ برنامه OpenVPN پرونده‌های کلید ۱۰۲۴ بیتی تولید می‌کنند، هر نسخه‌ای از OpenVPN که از پارامتر direction پشتیبانی می‌کند، از تولید پرونده کلید ۲۰۴۸ بیتی با استفاده از گزینه --genkey نیز پشتیبانی خواهد کرد.

استفاده از --tls-auth زمانی توصیه می‌شود که OpenVPN را در حالتی اجرا می‌کنید که در حال گوش دادن به بسته‌ها از هر آدرس IP است، مانند زمانی که --remote مشخص نشده باشد یا --remote همراه با --float مشخص شده باشد.

منطق این ویژگی به شرح زیر است. TLS قبل از اینکه بتواند یک همتا را احراز هویت کند، به یک تبادل چند بسته‌ای نیاز دارد. در طول این زمان پیش از احراز هویت، OpenVPN منابعی (حافظه و CPU) را به این همتای احتمالی اختصاص می‌دهد. این همتای احتمالی همچنین بخش‌های زیادی از OpenVPN و کتابخانه OpenSSL را در معرض بسته‌هایی که ارسال می‌کند قرار می‌دهد. امروزه اکثر حملات شبکه‌ای موفق به دنبال سوءاستفاده از اشکالات برنامه‌ها (مانند حملات سرریز بافر) یا وادار کردن برنامه به مصرف آن‌چنان منابعی هستند که غیرقابل استفاده شود. مسلماً اولین خط دفاعی همیشه تولید کد تمیز و به خوبی ارزیابی‌شده است. OpenVPN با اولویت اصلی جلوگیری از حملات سرریز بافر نوشته شده است. اما همان‌طور که تاریخ نشان داده است، بسیاری از پرکاربردترین برنامه‌های کاربردی شبکه، گهگاه مغلوب حملات سرریز بافر شده‌اند.

بنابراین به عنوان خط دوم دفاعی، OpenVPN این لایه ویژه از احراز هویت را بر روی کانال کنترلی TLS ارائه می‌دهد تا هر بسته در کانال کنترلی با یک امضای HMAC و یک شناسه یکتا برای محافظت در برابر تکرار (replay) احراز هویت شود. این امضا همچنین به محافظت در برابر حملات DoS (محروم‌سازی از سرویس) کمک می‌کند. یک قاعده سرانگشتی مهم در کاهش آسیب‌پذیری در برابر حملات DoS، به حداقل رساندن مقدار منابعی است که یک کلاینت بالقوه، اما هنوز احراز هویت‌نشده، می‌تواند مصرف کند.

--tls-auth این کار را با امضای هر بسته کانال کنترلی TLS با امضای HMAC انجام می‌دهد، از جمله بسته‌هایی که قبل از اینکه سطح TLS فرصت احراز هویت همتا را پیدا کند ارسال می‌شوند. نتیجه این است که بسته‌های بدون امضای صحیح می‌توانند بلافاصله پس از دریافت دور انداخته شوند، قبل از اینکه فرصتی برای مصرف منابع اضافی سیستم، مانند شروع یک مصافحه (handshake) TLS داشته باشند. --tls-auth را می‌توان با افزودن گزینه --replay-persist تقویت کرد که وضعیت حفاظت از تکرار OpenVPN را در یک پرونده نگه می‌دارد تا در طول راه‌اندازی‌های مجدد از دست نرود.

باید تاکید شود که این ویژگی اختیاری است و پرونده کلید استفاده شده با --tls-auth چیزی بیش از قدرت شروع یک مصافحه TLS به همتا نمی‌دهد. این ویژگی برای رمزگذاری یا احراز هویت هیچ‌یک از داده‌های تونل استفاده نمی‌شود.

اگر می‌خواهید از پرونده کلید نه تنها برای احراز هویت، بلکه برای رمزگذاری کانال کنترلی TLS نیز استفاده کنید، به جای آن از --tls-crypt استفاده نمایید.

فهرستی از گروه‌ها/منحنی‌های مجاز به ترتیب اولویت.

تنظیم منحنی‌ها/گروه‌های بیضوی مجاز برای نشست TLS. این گروه‌ها مجاز به استفاده در امضاها و تبادل کلید هستند.

در حال حاضر mbedTLS به طور پیش‌فرض اجازه استفاده از تمام منحنی‌های شناخته شده را می‌دهد.

کتابخانه OpenSSL 1.1+ این فهرست را به طور پیش‌فرض به موارد زیر محدود می‌کند:

"X25519:secp256r1:X448:secp521r1:secp384r1".

اگر از گواهی‌هایی استفاده می‌کنید که از منحنی‌های غیراستاندارد استفاده می‌کنند، ممکن است لازم باشد آن‌ها را در اینجا اضافه کنید. اگر منحنی ecdh را با استفاده از --ecdh-curve اجبار نکنید، گروه‌های مربوط به ecdh نیز از این فهرست انتخاب خواهند شد.

برنامه OpenVPN نام منحنی secp256r1 را به prime256v1 نگاشت می‌کند تا امکان تعیین گزینه یکسان tls-groups برای mbedTLS و OpenSSL فراهم شود.

هشدار: این گزینه نه تنها گواهی‌های منحنی بیضوی بلکه تبادل کلید در TLS 1.3 را نیز تحت تاثیر قرار می‌دهد و استفاده نادرست از این گزینه باعث غیرفعال شدن TLS 1.3 خواهد شد.

تنظیم الگوریتم‌های رمزنگاری مجاز برای گواهی‌ها با توجه به profile.

پروفایل‌های زیر پشتیبانی می‌شوند:

برای mbed TLS یکسان با legacy
الگوریتم SHA1 و جدیدتر، RSA با ۲۰۴۸ بیت به بالا، هر منحنی بیضوی.
الگوریتم SHA2 و جدیدتر، RSA با ۲۰۴۸ بیت به بالا، هر منحنی بیضوی.
الگوریتم SHA256/SHA384، الگوریتم ECDSA با P-256 یا P-384.

این گزینه تنها برای ساخت‌های mbed TLS به طور کامل پشتیبانی می‌شود. ساخت‌های OpenSSL از تقریب زیر استفاده می‌کنند:

مقدار "security level 0" را تنظیم می‌کند
مقدار "security level 1" را تنظیم می‌کند
مقدار "security level 2" را تنظیم می‌کند
مقدار "security level 3" و --tls-cipher "SUITEB128" را تنظیم می‌کند.

برنامه OpenVPN در آینده به 'preferred' به عنوان پیش‌فرض مهاجرت خواهد کرد. لطفاً اطمینان حاصل کنید که کلیدهای شما از قبل با آن مطابقت دارند.

هشدار: --tls-cipher، --tls-ciphersuites و tls-groups
این گزینه‌ها ویژگی‌های پیشرفته‌ای هستند که - در صورت استفاده صحیح - می‌توانند امنیت اتصال VPN شما را بهبود بخشند. اما همچنین بسیار ساده است که ناخواسته با آن‌ها به پای خود شلیک کنید یا صرفاً اتصال خود را قطع نمایید. با احتیاط استفاده کنید!
یک فهرست l از رمزهای مجاز TLS که با دونقطه (":") جدا شده‌اند.

از این تنظیم می‌توان برای اطمینان از استفاده (یا عدم استفاده) از مجموعه‌های رمزنگاری خاص برای اتصال TLS استفاده کرد. OpenVPN از TLS برای ایمن‌سازی کانال کنترل استفاده می‌کند؛ کانالی که کلیدهای محافظت از ترافیک واقعی VPN از طریق آن مبادله می‌شوند.

فهرست ارائه‌شده از رمزها (پس از تبدیل نام احتمالی توسط OpenSSL/IANA) صرفاً به کتابخانه رمزنگاری ارسال می‌شود. لطفاً برای جزئیات نحوه تفسیر فهرست رمزها به مستندات OpenSSL یا mbed TLS مراجعه کنید.

برای OpenSSL، گزینه --tls-cipher برای TLS 1.2 و پایین‌تر استفاده می‌شود.

برای مشاهده فهرست رمزهای TLS پشتیبانی‌شده توسط کتابخانه رمزنگاری خود، از --show-tls استفاده کنید.

مقدار پیش‌فرض برای --tls-cipher، استفاده از فهرست رمزهای پیش‌فرض mbed TLS در زمان استفاده از mbed TLS یا DEFAULT:!EXP:!LOW:!MEDIUM:!kDH:!kECDH:!DSS:!PSK:!SRP:!kRSA هنگام استفاده از OpenSSL است.

مشابه --tls-cipher اما برای TLS 1.3 و بالاتر. mbed TLS هنوز از TLS 1.3 پشتیبانی نمی‌کند و تنها تنظیم --tls-cipher استفاده می‌شود.

پیش‌فرض برای --tls-ciphersuites، استفاده از پیش‌فرض کتابخانه رمزنگاری است.

فعال‌سازی TLS و بر عهده گرفتن نقش کلاینت در طول مصافحه (handshake) TLS.
رمزنگاری و احراز اصالت تمام بسته‌های کانال کنترل با کلید موجود در keyfile. (برای پیش‌زمینه بیشتر به --tls-auth مراجعه کنید.)

رمزنگاری (و احراز اصالت) بسته‌های کانال کنترل:

  • حریم خصوصی بیشتری را با پنهان کردن گواهی استفاده‌شده برای اتصال TLS فراهم می‌کند،
  • شناسایی ترافیک OpenVPN را سخت‌تر می‌سازد،
  • امنیت پسا-کوانتومی "مقدماتی" در برابر مهاجمانی که هرگز کلید پیش‌اشتراکی را نخواهند فهمید (فاقد پنهان‌داری پیشرو)، ارائه می‌دهد.

برخلاف --tls-auth، گزینه --tls-crypt کاربر را ملزم نمی‌کند که --key-direction را تنظیم کند.

ملاحظات امنیتی

تمام همتایان از کلید گروهی پیش‌اشتراکی --tls-crypt یکسانی برای احراز اصالت و رمزنگاری پیام‌های کانال کنترل استفاده می‌کنند. برای اطمینان از اینکه تداخل IV همچنان بعید باقی بماند، این کلید نباید برای رمزنگاری بیش از 2^48 پیام کانال کنترل کلاینت‌به‌سرور یا 2^48 سرور‌به‌کلاینت استفاده شود. یک مذاکره اولیه معمول حدود ۱۰ بسته در هر جهت است. با فرض اینکه هر دو مذاکره اولیه و مذاکرات مجدد (برای محافظه‌کاری) حداکثر 2^16 (65536) بسته باشند و (مذاکرات) مجدد در هر دقیقه برای هر کاربر (۲۴/۷) رخ دهد، این امر طول عمر کلید tls-crypt را به ۸۱۷۱ سال تقسیم بر تعداد کاربران محدود می‌کند. بنابراین یک پیکربندی با ۱۰۰۰ کاربر باید کلید را حداقل هر هشت سال یک‌بار بازچرخانی کند. (و یک راه‌اندازی با ۸۰۰۰ کاربر، هر سال.)

اگر تداخل IV رخ دهد، می‌تواند منجر به تنزل امنیت --tls-crypt به همان سطح امنیت استفاده از --tls-auth شود. بدین معنا که کانال کنترل همچنان از محافظت اضافی در برابر حملات فعال مرد میانی و حملات DoS بهره می‌برد، اما ممکن است دیگر حریم خصوصی اضافی و امنیت پسا-کوانتومی فراتر از آنچه خود TLS ارائه می‌دهد را فراهم نکند.

برای پیکربندی‌های بزرگ یا راه‌اندازی‌هایی که در آن کلاینت‌ها مورد اعتماد نیستند، استفاده از --tls-crypt-v2 را مد نظر قرار دهید. آن گزینه از کلیدهای یکتا به ازای هر کلاینت استفاده می‌کند و بدین ترتیب بازه را به 'بازچرخانی کلید کلاینت حداقل یک‌بار در هر ۸۰۰۰ سال' بهبود می‌بخشد.

نحو معتبر:
tls-crypt-v2 keyfile
tls-crypt-v2 keyfile force-cookie
tls-crypt-v2 keyfile allow-noncookie

استفاده از کلیدهای tls-crypt اختصاصی کلاینت.

برای کلاینت‌ها، keyfile یک کلید tls-crypt اختصاصی کلاینت است. چنین کلیدی را می‌توان با استفاده از گزینه --genkey tls-crypt-v2-client ایجاد کرد.

برای سرورها، keyfile جهت بازگشایی (unwrap) کلیدهای اختصاصی کلاینت ارائه‌شده توسط کلاینت در طول برقراری اتصال استفاده می‌شود. این کلید باید همان کلیدی باشد که برای تولید کلید اختصاصی کلاینت استفاده شده است (به --genkey tls-crypt-v2-client مراجعه کنید).

روی سرورها، این گزینه می‌تواند همراه با گزینه --tls-auth یا --tls-crypt استفاده شود. در آن حالت، سرور استفاده کلاینت از کلیدهای اختصاصی کلاینت را تشخیص داده و به‌طور خودکار حالت مناسب را انتخاب می‌کند.

پارامتر اختیاری force-cookie تنها به کلاینت‌های tls-crypt-v2 که از مصافحه سه‌مرحله‌ای بی‌وضعیت (stateless) مبتنی بر کوکی پشتیبانی می‌کنند اجازه فعالیت می‌دهد؛ این امر مانع از حملات بازپخش (replay attacks) و تخلیه وضعیت (state exhaustion) در سمت سرور می‌شود (OpenVPN 2.6 و بالاتر). گزینه allow-noncookie صریحاً به کلاینت‌های قدیمی‌تر tls-crypt-v2 اجازه اتصال می‌دهد. مقدار پیش‌فرض (در حال حاضر) allow-noncookie است.

اجرای دستور cmd برای اعتبارسنجی فراداده کلید tls-crypt-v2 اختصاصی کلاینت در حال اتصال. این به مدیران سرور اجازه می‌دهد تا پیش از قرار دادن پشته TLS (شامل پشته‌های ذاتا خطرناک X.509 و ASN.1) در معرض کلاینت متصل‌شونده، اتصال کلاینت را رد کنند.

‏OpenVPN متغیرهای محیطی زیر را به دستور ارسال می‌کند (و تنها همین متغیرها؛ متغیرهای محیطی معمول موجود برای سایر اسکریپت‌ها در دسترس نیستند):

  • مقدار script_type روی tls-crypt-v2-verify تنظیم شده است.
  • مقدار metadata_type در صورتی که فراداده توسط کاربر ارائه شده باشد روی 0، و اگر یک برچسب زمانی ۶۴ بیتی یونیکس نشان‌دهنده زمان ساخت کلید باشد روی 1 تنظیم شده است.
  • مقدار metadata_file شامل نام پرونده یک پرونده موقت است که فراداده کلاینت در آن قرار دارد.

دستور می‌تواند با خروج با یک کد خروج غیر صفر، اتصال را رد کند.

رد کردن کلیدهای کلاینت tls-crypt-v2 که قدیمی‌تر از n روز هستند یا فاقد برچسب زمانی می‌باشند.
خروج در صورت شکست در مذاکره TLS. این گزینه زمانی که فقط می‌خواهید یک بار برای اتصال تلاش کنید مفید است، مثلا در یک اسکریپت آزمایشی یا پایش. (مجموعه آزمون خود OpenVPN به همین شکل از آن استفاده می‌کند.)
فعال کردن TLS و به عهده گرفتن نقش سرور در طول دست‌تکانی TLS. توجه داشته باشید که OpenVPN به عنوان یک برنامه همتا به همتا طراحی شده است. تعیین کلاینت یا سرور صرفا به منظور مذاکره در کانال کنترل TLS است.
مهلت زمانی ارسال مجدد بسته در کانال کنترل TLS در صورت عدم دریافت تاییدیه از راه دور ظرف n ثانیه (پیش‌فرض 2). هنگامی که OpenVPN یک بسته کنترلی به همتای خود ارسال می‌کند، انتظار دارد تاییدیه را ظرف n ثانیه دریافت کند، در غیر این صورت بسته را مجددا تحت الگوریتم عقب‌نشینی نمایی مشابه TCP ارسال می‌کند. این پارامتر فقط برای بسته‌های کانال کنترل اعمال می‌شود. بسته‌های کانال داده (که داده‌های رمزگذاری‌شده تونل را حمل می‌کنند) هرگز توسط OpenVPN تایید، مرتب‌سازی یا بازفرستی نمی‌شوند، زیرا پروتکل‌های سطح بالاتر شبکه مانند TCP که روی تونل اجرا می‌شوند انتظار دارند این وظیفه به آن‌ها واگذار شود.
حداقل نسخه TLS قابل قبول از همتا را تعیین می‌کند (پیش‌فرض در نسخه 2.6.0 و جدیدتر "1.2" است).

نحو معتبر:

tls-version-min version ['or-highest']

نمونه‌ها برای version شامل 1.0، 1.1 یا 1.2 است. اگر or-highest مشخص شده باشد و version شناخته نشود، فقط بالاترین نسخه TLS پشتیبانی‌شده توسط پیاده‌سازی SSL محلی پذیرفته می‌شود.

حداکثر نسخه TLS مورد استفاده را تعیین می‌کند (پیش‌فرض بالاترین نسخه پشتیبانی‌شده است). نمونه‌ها برای version شامل 1.0، 1.1 یا 1.2 است.
منسوخ‌شده اثر انگشت SHA1 یا SHA256 را برای گواهی سطح ۱ مشخص کنید.

نحو معتبر:

verify-hash hash [algo]

گواهی سطح ۱ همان CA (یا گواهی میانی) است که گواهی برگ (leaf) را امضا می‌کند و در جهت ریشه، یک سطح با گواهی برگ فاصله دارد. هنگام پذیرش اتصال از یک همتا، اثر انگشت گواهی سطح ۱ باید با hash مطابقت داشته باشد، در غیر این صورت اعتبارسنجی گواهی با شکست مواجه می‌شود. هش به صورت XX:XX:... مشخص می‌شود. برای نمونه:

AD:B0:95:D8:09:C8:36:45:12:A9:89:C8:90:09:CB:13:72:A6:AD:16

پرچم algo می‌تواند SHA1 یا SHA256 باشد. در صورت عدم ارائه، مقدار پیش‌فرض SHA1 خواهد بود.

این گزینه می‌تواند به صورت درون‌خطی نیز تعریف شود

<verify-hash>
00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff
11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00
</verify-hash>

اگر گزینه به صورت درون‌خطی تعریف شود، algo همیشه SHA256 خواهد بود.


مشخص کردن یک اثرانگشت SHA256 یا فهرستی از اثرانگشت‌های SHA256 برای اعتبارسنجی گواهی همتا در برابر آن. گواهی همتا باید با یکی از اثرانگشت‌ها مطابقت داشته باشد، در غیر این صورت اعتبارسنجی گواهی با شکست مواجه خواهد شد. این گزینه می‌تواند به صورت درون‌خطی (inline) نیز استفاده شود

نحو معتبر:

peer-fingerprint AD:B0:95:D8:09:...

یا درون‌خطی:

<peer-fingerprint>
00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff
11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00
</peer-fingerprint>

هنگامی که گزینه --peer-fingerprint استفاده می‌شود، مشخص کردن یک CA با --ca یا --capath اختیاری است. این به --peer-fingerprint اجازه می‌دهد تا به عنوان جایگزینی برای یک PKI با گواهی‌های خودامضا برای راه‌اندازی‌های کوچک استفاده شود. برای چنین راه‌اندازی بخش مثال‌ها را ببینید.

پذیرش اتصالات تنها در صورتی که نام X.509 میزبان با name برابر باشد. میزبان راه دور همچنین باید تمام آزمون‌های دیگر اعتبارسنجی را پشت سر بگذارد.

نحو معتبر:

verify-x509 name type

اینکه کدام نام X.509 با name مقایسه شود به تنظیم type بستگی دارد. type می‌تواند subject برای مطابقت با DN کامل موضوع (پیش‌فرض)، name برای مطابقت با یک RDN موضوع یا name-prefix برای مطابقت با پیشوند RDN موضوع باشد. اینکه کدام RDN به عنوان name اعتبارسنجی شود به گزینه --x509-username-field بستگی دارد. اما مقدار پیش‌فرض آن common name (CN) است، برای نمونه گواهی‌ای با subject DN زیر

C=KG, ST=NA, L=Bishkek, CN=Server-1

با موارد زیر مطابقت داده می‌شود:

verify-x509-name 'C=KG, ST=NA, L=Bishkek, CN=Server-1'
verify-x509-name Server-1 name
verify-x509-name Server- name-prefix

آخرین مثال زمانی مفید است که می‌خواهید یک کلاینت تنها اتصالات به Server-1، Server-2 و غیره را بپذیرد.

گزینه --verify-x509-name یک جایگزین مفید برای گزینه --tls-verify جهت اعتبارسنجی میزبان راه دور است، زیرا --verify-x509-name در یک محیط --chroot بدون هیچ‌گونه وابستگی کار می‌کند.

استفاده از یک پیشوند نام، جایگزینی مفید برای مدیریت CRL (فهرست ابطال گواهی) روی کلاینت است، زیرا به کلاینت اجازه می‌دهد همه گواهی‌ها را به جز مواردی که با سرورهای تعیین‌شده مرتبط هستند رد کند.

نکته:
بررسی در برابر پیشوند نام را تنها زمانی انجام دهید که از OpenVPN همراه با یک گواهی CA سفارشی که تحت کنترل شماست استفاده می‌کنید. هرگز از این گزینه با نوع name-prefix زمانی که گواهی‌های کلاینت شما توسط شخص ثالث، مانند یک CA تجاری وب امضا شده‌اند، استفاده نکنید.
ذخیره مقدار attribute از X509 همتا در متغیرهای محیطی برای استفاده توسط افزونه‌ها و رابط مدیریتی. افزودن یک + به ابتدای attribute برای ذخیره مقادیر از کل زنجیره گواهی. در غیر این صورت ویژگی تنها برای گواهی برگ (یعنی عمق 0 از زنجیره گواهی) صادر می‌شود. مقادیر به صورت X509_<depth>_<attribute>=<value> کدگذاری خواهند شد. چندین گزینه --x509-track می‌توانند برای ردیابی چندین ویژگی تعریف شوند.

مورد attribute می‌تواند هر بخشی از فیلد Subject در X509 یا هر افزونه X509v3 (RFC 3280) باشد. افزونه‌های X509v3 ممکن است در صورت عدم استفاده از کتابخانه پیش‌فرض زیرساخت TLS (یعنی OpenSSL) پشتیبانی نشوند. شما همچنین می‌توانید اثرانگشت‌های SHA1 و SHA256 گواهی را درخواست کنید، اما این مقادیر در هر صورت همیشه به عنوان tls_digest_{n} و tls_digest_sha256_{n} صادر می‌شوند.

توجه داشته باشید که به طور پیش‌فرض همه بخش‌های فیلد Subject در X509 برای کل زنجیره گواهی در محیط صادر می‌شوند. اگر از --x509-track حداقل یک بار استفاده کنید، فقط ویژگی‌های مشخص‌شده توسط این گزینه‌ها صادر می‌شوند.

مثال‌ها:

x509-track CN               # exports only X509_0_CN
x509-track +CN              # exports X509_{n}_CN for chain
x509-track basicConstraints # exports value of "X509v3 Basic Constraints"
x509-track SHA256           # exports SHA256 fingerprint
فیلدهایی در عنوان (Subject) گواهی X.509 که باید به عنوان نام کاربری استفاده شوند (پیش‌فرض CN). اگر چند فیلد مشخص شوند، مقادیر آن‌ها با استفاده از نماد _ به عنوان جداکننده در یک نام کاربری ادغام خواهند شد.

نحو معتبر:

x509-username-field [ext:]fieldname [[ext:]fieldname...]

به طور معمول، این گزینه با آرگومان‌های fieldname به یکی از صورت‌های زیر مشخص می‌شود:

x509-username-field emailAddress
x509-username-field 1.2.840.113549.1.9.1
x509-username-field ext:subjectAltName
x509-username-field CN serialNumber

دو مثال اول از مقدار مشخصه emailAddress در فیلد Subject گواهی به عنوان نام کاربری استفاده می‌کنند، که در آن مثال اول از نام و مثال دوم از oid استفاده می‌کند. مثال سوم از پیشوند ext: برای نشان دادن این موضوع استفاده می‌کند که افزونه X.509 با نام فیلد fieldname subjectAltName باید برای یک فیلد rfc822Name (ایمیل) جهت استفاده به عنوان نام کاربری جستجو شود. در مواردی که چند آدرس ایمیل در ext:fieldname وجود داشته باشد، آخرین مورد انتخاب می‌شود. مثال آخر از مقدار مشخصه CN در فیلد Subject، ترکیب‌شده با جداکننده _ و نمایش هگزادسیمال serialNumber گواهی استفاده می‌کند.

هنگامی که این گزینه استفاده شود، گزینه --verify-x509-name به جای Common Name با fieldname انتخاب‌شده مطابقت داده خواهد شد.

تنها افزونه‌های X.509 شامل subjectAltName و issuerAltName و مشخصه X.509 با عنوان serialNumber پشتیبانی می‌شوند.

نمادهای ناسازگار با نماد _ جایگزین می‌شوند (مشابه جداکننده فیلدها)، بنابراین ادغام چندین فیلد با چنین نمادهایی یا نمادهای _ می‌تواند به طور بالقوه منجر به تداخل نام کاربری شود.

تنظیم می‌کند که آیا دسترسی به شیء گواهی باید پس از ورود انجام شود یا خیر. هر ارائه‌دهنده تنظیمات مخصوص به خود را دارد.

نحوهای معتبر:

pkcs11-cert-private 0
pkcs11-cert-private 1
شناسه (id) سریالی‌شده گواهی مورد استفاده را مشخص می‌کند. این شناسه می‌تواند از طریق گزینه مستقل --show-pkcs11-ids به دست آید. همچنین به توضیحات گزینه --pkcs11-providers مراجعه کنید.
دریافت شناسه PKCS#11 از رابط مدیریتی (management interface). در این حالت یک پیام آنی NEED-STR 'pkcs11-id-request' فعال می‌شود، برنامه می‌تواند از دستور pkcs11-id-count برای بازیابی تعداد گواهی‌های موجود و از دستور pkcs11-id-get برای بازیابی شناسه گواهی و بدنه گواهی استفاده کند. همچنین به توضیحات گزینه --pkcs11-providers مراجعه کنید.
مشخص می‌کند که PIN چند ثانیه می‌تواند در حافظه نهان ذخیره شود، حالت پیش‌فرض تا زمان خارج کردن توکن است.
مشخص می‌کند چه روشی برای انجام عملیات کلید خصوصی استفاده شود. برای هر ارائه‌دهنده می‌توان یک حالت متفاوت مشخص کرد. حالت به صورت عدد هگز رمزگذاری شده است و می‌تواند ماسکی از موارد زیر باشد:

0 (پیش‌فرض) تلاش برای تشخیص خودکار.

1 استفاده از sign.

2 استفاده از sign recover.

4 استفاده از decrypt.

8 استفاده از unwrap.

استفاده از مسیر احراز هویت محافظت‌شده PKCS#11، مفید برای دستگاه‌های بیومتریک و صفحه‌کلید خارجی. هر ارائه‌دهنده تنظیمات مخصوص به خود را دارد.

نحوهای معتبر:

pkcs11-protected-authentication 0
pkcs11-protected-authentication 1
ارائه‌دهنده‌های رابط توکن رمزنگاری RSA Security Inc. PKCS #11 (Cryptoki) را برای بارگذاری مشخص می‌کند. فهرستی از یک یا چند نام کتابخانه ارائه‌دهنده که با فاصله از هم جدا شده‌اند می‌تواند مشخص شود. این گزینه همراه با --pkcs11-id یا pkcs11-id-management می‌تواند به جای --cert و --key یا --pkcs12 استفاده شود.

اگر p11-kit روی سیستم موجود باشد و در حین ساخت فعال شده باشد، در صورتی که هر یک از گزینه‌های --pkcs11-id یا --pkcs11-id-management بدون --pkcs11-providers وجود داشته باشند، ماژول p11-kit-proxy.so آن به طور پیش‌فرض بارگذاری خواهد شد. اگر بارگذاری پیش‌فرض در ساخت فعال نشده باشد و هیچ ارائه‌دهنده‌ای مشخص نشود، گزینه‌های قبلی نادیده گرفته خواهند شد.

(مستقل) نمایش فهرست اشیاء توکن PKCS#11.

نحو معتبر:

show-pkcs11 [provider] [cert_private]

اگر گواهی‌ها به صورت اشیاء خصوصی ذخیره شده‌اند، cert_private را برابر 1 مشخص کنید.

اگر p11-kit روی سیستم موجود باشد، آرگومان provider اختیاری است؛ در صورت حذف، ماژول پیش‌فرض p11-kit-proxy.so پرس‌وجو خواهد شد.

گزینه --verb می‌تواند پیش از این گزینه برای تولید اطلاعات اشکال‌زدایی استفاده شود.

نگارش 2.4 و بالاتر OpenVPN قابلیت مذاکره رمز داده‌ای را دارند که برای رمزنگاری بسته‌های داده استفاده می‌شود. این بخش سازوکار را با جزئیات بیشتر و سازوکارهای مختلف سازگاری عقبروی با کارساز و کارخواه‌های قدیمی‌تر شرح می‌دهد.

هنگامی که هر دو کارخواه و کارساز دست‌کم OpenVPN 2.5 را اجرا می‌کنند، ترتیب رمزهای گزینه --data-ciphers کارساز برای انتخاب رمز داده استفاده می‌شود. این بدان معناست که نخستین رمز موجود در آن فهرست که در فهرست --data-ciphers کارخواه نیز وجود دارد، انتخاب می‌شود. اگر هیچ رمز مشترکی یافت نشود، کارخواه با یک پیام AUTH_FAILED رد می‌شود (همان‌طور که در لاگ کارخواه دیده می‌شود):

AUTH: Received control message: AUTH_FAILED,Data channel cipher negotiation failed (no shared cipher)

نگارش 2.5 و بالاتر OpenVPN تنها رمزهای مشخص‌شده در --data-ciphers را مجاز می‌دانند. اگر --data-ciphers تنظیم نشده باشد، پیش‌فرض AES-256-GCM:AES-128-GCM است. در نگارش 2.6 و بالاتر، در صورت در دسترس بودن Chacha20-Poly1305، مقدار پیش‌فرض به AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305 تغییر می‌یابد.

برای سازگاری عقبروی، نگارش 2.6 و بالاتر OpenVPN به همراه --compat-mode 2.4.x (یا پایین‌تر) و OpenVPN 2.5 به طور خودکار رمزی را که با گزینه --cipher مشخص شده به این فهرست اضافه می‌کنند.

پشتیبانی از مذاکره در OpenVPN 2.4 اولین تکرار پیاده‌سازی بود و هنوز اشکالاتی جزئی داشت. هدف اصلی آن "ارتقا به AES-256-GCM در صورت امکان" بود. یک کارخواه OpenVPN 2.4 که در برابر یک کتابخانه رمزنگاری با پشتیبانی از AES در حالت GCM ساخته شده باشد و گزینه --ncp-disable را نداشته باشد، همیشه پشتیبانی از AES-256-GCM و AES-128-GCM را با ارسال IV_NCP=2 به کارساز اعلام می‌کند.

این مورد تنها زمانی مشکل‌ساز می‌شود که گزینه --ncp-ciphers از مقدار پیش‌فرض AES-256-GCM:AES-128-GCM به مقداری تغییر کرده باشد که شامل این دو رمز نباشد. هنگامی که یک کارساز OpenVPN تلاش می‌کند از AES-256-GCM یا AES-128-GCM استفاده کند، اتصال با شکست مواجه خواهد شد. بنابراین توصیه می‌شود برای جلوگیری از این رفتار، همیشه رمزهای AES-256-GCM و AES-128-GCM را در گزینه --ncp-ciphers قرار دهید.

کارخواه‌های مبتنی بر کتابخانه OpenVPN 3.x (https://github.com/openvpn/openvpn3) گزینه --ncp-ciphers یا --data-ciphers قابل پیکربندی ندارند. نگارش‌های جدیدتر به صورت پیش‌فرض رمزهای قدیمی AES-CBC، BF-CBC و DES-CBC را غیرفعال می‌کنند. این کارخواه‌ها همیشه پشتیبانی از همه رمزهای AEAD مورد پشتیبانی خود (AES-256-GCM، AES-128-GCM و در نگارش‌های جدیدتر همچنین Chacha20-Poly1305) را اعلام می‌کنند.

برای پشتیبانی از کارخواه‌های مبتنی بر OpenVPN 3.x باید دست‌کم یکی از این رمزها در گزینه --data-ciphers کارساز گنجانده شود.

هنگامی که یک کارخواه بدون پشتیبانی از مذاکره رمز به یک کارساز متصل می‌شود، رمزی که با گزینه --cipher در پیکربندی کارخواه مشخص شده است باید در گزینه --data-ciphers کارساز گنجانده شده باشد تا اجازه اتصال به کارخواه داده شود. در غیر این صورت پیام AUTH_FAILED به کارخواه ارسال خواهد شد که نشان‌دهنده نبود رمز مشترک است.

اگر کارخواه نگارش 2.3 یا قدیمی‌تر باشد و با آرگومان --enable-small در ./configure پیکربندی شده باشد، استفاده از data-ciphers-fallback cipher در پرونده پیکربندی کارساز همراه با رمز صریحی که کارخواه استفاده می‌کند، ضروری است.

هنگامی که یک کارخواه پشتیبانی از AES-128-GCM و AES-256-GCM را اعلام می‌کند (با IV_NCP=2)، یک کارساز OpenVPN 2.4 صرف‌نظر از این که رمز چیست، اولین رمز موجود در --ncp-ciphers را به کارخواه OpenVPN ارسال می‌کند. برای شبیه‌سازی رفتار یک کارخواه OpenVPN 2.4 تا حد ممکن و دستیابی به سازگاری با راه‌اندازی‌هایی که به این رفتار وابسته‌اند، افزودن AES-128-GCM و AES-256-GCM به گزینه --data-ciphers کارخواه الزامی است. OpenVPN 2.5+ تنها در صورتی پرچم IV_NCP=2 را اعلام می‌کند که این رمزها موجود باشند.

رمزی که توسط کارساز استفاده می‌شود باید در --data-ciphers گنجانده شود تا به کارخواه اجازه اتصال به یک کارساز بدون پشتیبانی از مذاکره رمز داده شود. (برای سازگاری، OpenVPN 2.5 رمزی را که با --cipher تنظیم شده نیز خواهد پذیرفت)

اگر کارساز نگارش 2.3 یا قدیمی‌تر باشد و با آرگومان --enable-small در ./configure پیکربندی شده باشد، افزودن --data-ciphers-fallback cipher به پیکربندی کارخواه همراه با رمز صریحی که کارساز استفاده می‌کند، ضروری است.

گزینه --cipher در OpenVPN 2.4 و نگارش‌های قدیمی‌تر به طور پیش‌فرض روی BF-CBC تنظیم شده بود. این مقدار پیش‌فرض برای اطمینان از سازگاری عقبروی هرگز تغییر داده نشد. در OpenVPN 2.5 این رفتار اکنون تغییر یافته است به طوری که اگر --cipher به طور صریح تنظیم نشده باشد، دیگر اجازه استفاده از رمز ضعیف BF-CBC را نمی‌دهد و لازم است به طور صریح به عنوان --cipher BFC-CBC اضافه شود یا به --data-ciphers افزوده گردد.

ما اکیداً توصیه می‌کنیم که در عوض در اسرع وقت از BF-CBC به یک رمز امن‌تر مهاجرت کنید.

نرم‌افزار OpenVPN از دو بخش پیکربندی شبکه تشکیل شده است. یک بخش پیوند (link) بین سمت محلی و دوردست است، بخش دیگر آداپتور شبکه مجازی (دستگاه tun/tap) است.

این بخش از گزینه‌های پیوند، گزینه‌های مربوط به اتصال میان میزبان محلی و دوردست را پوشش می‌دهد.

اتصال (Bind) به آدرس و درگاه محلی. این مقدار پیش‌فرض است مگر اینکه از یکی از گزینه‌های --proto tcp-client ، --http-proxy یا --socks-proxy استفاده شود.

اگر کلیدواژه اختیاری ipv6only مشخص شده باشد، OpenVPN هنگام باز شدن یک سوکت IPv6 تنها به IPv6 (برخلاف IPv6 و IPv4) متصل خواهد شد.

به همتای دوردست اجازه می‌دهد تا آدرس IP و/یا شماره درگاه خود را تغییر دهد، مانند تغییرات ناشی از DHCP یا نگاشت‌های NAT. گزینه --float فقط هنگام استفاده از انتقال UDP کار می‌کند.

گزینه --float هنگامی که همراه با --remote مشخص شود به یک نشست OpenVPN اجازه می‌دهد ابتدا به همتایی با آدرس مشخص متصل شود، اما اگر بسته‌ها از یک آدرس جدید برسند و تمام آزمون‌های احراز هویت را بگذرانند، آدرس جدید کنترل نشست را در دست خواهد گرفت. این ویژگی زمانی مفید است که به همتایی با آدرس پویا مانند یک کاربر dial-in یا کارخواه DHCP متصل می‌شوید.

در اصل، --float به OpenVPN می‌گوید که بسته‌های احراز هویت شده را از هر آدرسی بپذیرد، نه فقط آدرسی که در گزینه --remote مشخص شده است.

نحو معتبر:
fragment max
fragment max mtu

قطعه‌بندی داخلی دیتاگرام را فعال می‌کند تا هیچ دیتاگرام UDP که بزرگ‌تر از max بایت باشد ارسال نشود.

اگر پارامتر mtu وجود داشته باشد، پارامتر max طوری تفسیر می‌شود که شامل سربار کپسوله‌سازی IP و UDP باشد. پارامتر mtu در نسخه 2.6.0 نرم‌افزار OpenVPN معرفی شده است.

اگر پارامتر mtu وجود نداشته باشد، پارامتر max همانند پارامتر --link-mtu تفسیر می‌شود، یعنی اندازه بسته UDP پس از اضافه شدن سربار کپسوله‌سازی، بدون احتساب سرآیند خود UDP.

گزینه --fragment تنها زمانی کاربرد دارد که از پروتکل UDP استفاده می‌کنید (--proto udp).

گزینه --fragment به اندازه ۴ بایت سربار به ازای هر دیتاگرام اضافه می‌کند.

گزینه --mssfix را در ادامه به عنوان یک گزینه مرتبط و مهم با --fragment ببینید.

همچنین باید توجه داشت که این گزینه برای جایگزینی قطعه‌بندی UDP در سطح پشته IP در نظر گرفته نشده است. این گزینه تنها به عنوان آخرین راهکار در زمانی که کشف MTU مسیر (path MTU discovery) مختل شده است کاربرد دارد. استفاده از این گزینه نسبت به اصلاح کشف MTU مسیر برای پیوند IP شما و استفاده از قطعه‌بندی بومی IP به جای آن، کارایی کمتری دارد.

با این حال، شرایطی وجود دارد که استفاده از قابلیت قطعه‌بندی داخلی OpenVPN' ممکن است تنها گزینه شما باشد، مانند انتقال یک جریان چندپخشی (multicast) بر بستر UDP از طریق تونل که نیازمند قطعه‌بندی است.

یک دستورالعمل کمکی که برای ساده‌سازی بیان --ping و --ping-restart طراحی شده است.

نحو معتبر:

keepalive interval timeout

هر interval ثانیه یک پینگ ارسال می‌کند، و اگر پینگی به مدت timeout ثانیه دریافت نشد، مجدداً راه‌اندازی می‌شود. هر دو مقدار به ۸۶۴۰۰ ثانیه محدود هستند. از آنجا که مهلت زمانی در سمت سرور دو برابر می‌شود، timeout در حالت سرور به ۴۳۲۰۰ ثانیه محدود است.

این گزینه را می‌توان در هر دو سمت کارخواه و سرور استفاده کرد، اما قرار دادن آن در سمت سرور کافی است چرا که گزینه‌های مناسب --ping و --ping-restart را به کارخواه ارسال (push) می‌کند. اگر در هر دو سمت سرور و کارخواه استفاده شود، مقادیر ارسال‌شده از سرور مقادیر محلی کارخواه را بازنویسی خواهند کرد.

آرگومان timeout در سمت سرور دو برابر طولانی‌تر خواهد بود. این امر تضمین می‌کند که اتمام مهلت زمانی در سمت کارخواه پیش از قطع اتصال توسط سمت سرور تشخیص داده شود.

برای مثال، --keepalive 10 60 به صورت زیر بسط داده می‌شود:

if mode server:
    ping 10                    # Argument: interval
    ping-restart 120           # Argument: timeout*2
    push "ping 10"             # Argument: interval
    push "ping-restart 60"     # Argument: timeout
else
    ping 10                    # Argument: interval
    ping-restart 60            # Argument: timeout
منسوخ‌شده حد بالایی را برای اندازه بسته‌های UDP که بین همتایان OpenVPN ارسال می‌شوند تعیین می‌کند. بهتر است این پارامتر را تنظیم نکنید مگر اینکه بدانید چه کار می‌کنید.

به دلیل متغیر بودن اندازه سرایند IP (۲۰ بایت برای IPv4 و ۴۰ بایت برای IPv6) و الگوریتم رمزنگاری کانال داده که به صورت پویا مذاکره می‌شود، این گزینه قابل اعتماد نیست. توصیه می‌شود به جای آن tun-mtu را با فضای خالی کافی تنظیم کنید.

نحو معتبر:
local host|* [port] [protocol]

نام میزبان محلی یا آدرس IP و درگاه برای bind. در صورت تعیین، OpenVPN به این آدرس متصل (bind) می‌شود. در صورت عدم تعیین، OpenVPN به تمام رابط‌ها متصل می‌شود. '*' می‌تواند به عنوان نام میزبان استفاده شود و به معنی 'هر میزبان' است (OpenVPN روی آنچه توسط سیستم‌عامل برگردانده می‌شود شنود خواهد کرد). روی یک کلاینت، یا در حالت نقطه-به-نقطه، این مقدار فقط یک بار می‌تواند مشخص شود (۱ سوکت).

در راه‌اندازی OpenVPN در حالت --server، این مقدار می‌تواند چندین بار مشخص شود تا چندین سوکت شنود روی آدرس‌ها و/یا درگاه‌های مختلف باز کند. برای تعیین چندین درگاه شنود بدون مشخص کردن آدرس، از '*' برای نشان دادن "استفاده از مقدار پیش‌فرضی که سیستم‌عامل ارائه می‌دهد" استفاده کنید، برای "تمام آدرس‌های IPv4" از "0.0.0.0" و برای "تمام آدرس‌های IPv6" از '::' استفاده کنید. --local متضمن --bind است.

شماره درگاه پیش‌فرض TCP/UDP را تنظیم می‌کند. نمی‌تواند همراه با گزینه --nobind استفاده شود. شماره درگاه 0 تنها برای دستیابی به "اتصال bind() به یک شماره درگاه تصادفی تخصیص‌یافته" در صورتی پذیرفته می‌شود که یک آدرس IP برای اتصال با --local مشخص شده باشد.
بسته‌های رمزگذاری‌شده ارسالی را با value علامت‌گذاری می‌کند. مقدار mark می‌تواند در قوانین مسیریابی سیاستی (policy routing) و فیلتر بسته (packetfilter) مطابقت داده شود. این گزینه فقط در لینوکس پشتیبانی می‌شود و در سایر سیستم‌های عامل کاری انجام نمی‌دهد.
حالت اصلی OpenVPN را تعیین می‌کند. به صورت پیش‌فرض، OpenVPN در حالت نقطه-به-نقطه (p2p) اجرا می‌شود. OpenVPN 2.0 حالت جدیدی (server) معرفی می‌کند که قابلیت سرور چندکلاینتی را پیاده‌سازی می‌نماید.
نحو معتبر:
mssfix max [mtu]
mssfix max [fixed]
mssfix

به نشست‌های TCP در حال اجرا روی تونل اعلام می‌کند که اندازه بسته ارسالی خود را به گونه‌ای محدود کنند که پس از کپسوله‌سازی توسط OpenVPN، اندازه بسته UDP حاصل که OpenVPN به همتای خود ارسال می‌کند از max بایت تجاوز نکند. مقدار پیش‌فرض 1492 mtu است. برای غیرفعال کردن mssfix از مقدار 0 به عنوان max استفاده کنید.

در صورت تعیین پارامتر mtu، مقدار max به عنوان اندازه نهایی بسته‌های VPN شامل سرایند IP و UDP تفسیر می‌شود. پشتیبانی از پارامتر mtu در نسخه 2.6.0 نرم‌افزار OpenVPN اضافه شد.

اگر پارامتر mtu مشخص نشده باشد، پارامتر max به همان روش پارامتر --link-mtu تفسیر می‌شود؛ یعنی اندازه بسته UDP پس از اضافه شدن سربار کپسوله‌سازی، اما بدون در نظر گرفتن سرایند خود UDP. بسته نهایی حداکثر ۲۸ بایت برای IPv4 و ۴۸ بایت برای IPv6 بزرگتر خواهد بود (۲۰/۴۰ بایت برای سرایند IP و ۸ بایت برای سرایند UDP). مقدار پیش‌فرض 1450 اجازه می‌دهد بسته‌های OpenVPN روی پیوندی با MTU برابر با 1478 یا بالاتر بدون قطعه‌قطعه شدن در سطح IP منتقل شوند (و 1498 برای IPv6).

اگر پارامتر fixed تعیین شود، OpenVPN تلاشی برای محاسبه سربار کپسوله‌سازی VPN نمی‌کند، بلکه مقدار MSS را برای محدود کردن اندازه بسته‌های IP بار داده (payload) به عدد مشخص شده تنظیم می‌کند. برای بسته‌های IPv4 مقدار MSS به mssfix - 40 و برای بسته‌های IPv6 به mssfix - 60 کاهش می‌یابد.

اگر --mssfix بدون هیچ پارامتری مشخص شود، در صورت تعیین --fragment پارامترهای آن را به ارث می‌برد، در غیر این صورت از مقدار پیش‌فرض برای --mssfix استفاده می‌کند.

گزینه --mssfix تنها زمانی کاربرد دارد که از پروتکل UDP برای ارتباط همتا-به-همتای OpenVPN استفاده کنید، یعنی --proto udp.

--mssfix و --fragment در حالت ایده‌آل می‌توانند با هم استفاده شوند؛ به طوری که --mssfix در وهله اول تلاش می‌کند تا TCP نیازی به قطعه‌قطعه کردن بسته‌ها نداشته باشد، و اگر بسته‌های بزرگی به هر حال عبور کنند (از پروتکل‌هایی غیر از TCP)، --fragment آن‌ها را به صورت داخلی قطعه‌قطعه می‌کند.

گزینه‌های --max-packet-size، --fragment و --mssfix برای دور زدن مواردی طراحی شده‌اند که کشف Path MTU در مسیر شبکه بین همتایان OpenVPN دچار اختلال است.

نشانه معمول چنین اختلالی، اتصال OpenVPN است که با موفقیت برقرار می‌شود، اما در حین استفاده فعال متوقف می‌گردد.

اگر --fragment و --mssfix با هم استفاده شوند، --mssfix پارامتر پیش‌فرض max خود را از گزینه --fragment max دریافت می‌کند.

بنابراین، می‌توان حداکثر اندازه بسته UDP را با گزینه‌های زیر به 1300 کاهش داد (یک راهکار اولیه مناسب برای حل مشکلات اتصال مربوط به MTU):

--tun-mtu 1500 --fragment 1300 --mssfix

اگر گزینه max-packet-size size در پیکربندی استفاده شود، به گونه‌ای عمل می‌کند که گویی mssfix size mtu در پیکربندی مشخص شده است.

آیا کشف MTU مسیر (Path MTU discovery) روی کانال TCP/UDP انجام شود؟ تنها در سیستم‌عامل‌هایی مانند لینوکس پشتیبانی می‌شود که از فراخوان سیستمی لازم برای تنظیم آن پشتیبانی می‌کنند.

نوع‌های معتبر:

no هرگز فریم‌های DF (Don't Fragment) ارسال نشود

maybe استفاده از راهنمایی‌های مبتنی بر مسیر

yes همیشه DF (Don't Fragment)

برای اندازه‌گیری تجربی MTU هنگام راه‌اندازی اتصال، گزینهٔ --mtu-test را به پیکربندی خود اضافه کنید. برنامهٔ OpenVPN بسته‌های پینگ در اندازه‌های مختلف را به همتای راه دور می‌فرستد و بزرگ‌ترین بسته‌هایی را که با موفقیت دریافت شده‌اند اندازه‌گیری می‌کند. فرایند --mtu-test معمولاً حدود ۳ دقیقه طول می‌کشد تا کامل شود.
به آدرس و درگاه محلی متصل (bind) نشود. پشتهٔ IP یک درگاه پویا برای بسته‌های بازگشتی اختصاص خواهد داد. از آنجا که مقدار درگاه پویا از قبل توسط یک همتا قابل شناسایی نیست، این گزینه تنها برای همتاهایی مناسب است که اتصال را با استفاده از گزینهٔ --remote آغاز می‌کنند.
فیلد TOS بستهٔ تونل را برابر با مقدار TOS بار داده (payload) قرار می‌دهد.
اگر برای حداقل n ثانیه هیچ بسته‌ای ارسال نشده باشد، به میزبان راه دور روی کانال کنترلی TCP/UDP پینگ بفرست (گزینهٔ --ping را روی هر دو همتا مشخص کنید تا بسته‌های پینگ در هر دو جهت ارسال شوند، زیرا بسته‌های پینگ OpenVPN مانند بسته‌های پینگ IP پژواک نمی‌شوند).

حداکثر مقدار برای n برابر ۸۶۴۰۰ ثانیه است.

این گزینه دو کاربرد در نظر گرفته شده دارد:

1.
سازگاری با دیوارهای آتش با قابلیت حفظ وضعیت (stateful). پینگ دوره‌ای تضمین می‌کند که قاعدهٔ دیوار آتش با حفظ وضعیت که اجازهٔ عبور به بسته‌های UDP برنامهٔ OpenVPN می‌دهد، منقضی (time out) نشود.
2.
فراهم کردن پایه‌ای برای میزبان راه دور جهت آزمایش وجود همتای خود با استفاده از گزینهٔ --ping-exit.

هنگام استفاده از OpenVPN در حالت سرور، --keepalive را نیز ببینید.

--ping-exit n
باعث خروج OpenVPN پس از گذشت n ثانیه بدون دریافت پینگ یا بسته‌ای دیگر از راه دور می‌شود. این گزینه می‌تواند با --inactive، --ping و --ping-exit ترکیب شود تا یک قطع ارتباط دو سطحی بر اثر عدم فعالیت ایجاد کند.

حداکثر مقدار برای n برابر ۸۶۴۰۰ ثانیه است.

برای نمونه،

openvpn [options...] --inactive 3600 --ping 10 --ping-exit 60

هنگامی که روی هر دو همتا استفاده شود، باعث می‌شود اگر همتا قطع ارتباط کرد، OpenVPN ظرف ۶۰ ثانیه خارج شود، اما در صورتی که دادهٔ تونل واقعی رد و بدل نشود، پس از یک ساعت خارج خواهد شد.

--ping-restart n
مشابه --ping-exit، اما پس از گذشت n ثانیه بدون دریافت پینگ یا بستهٔ دیگر از راه دور، راه‌اندازی مجدد با SIGUSR1 را فعال می‌کند.

حداکثر مقدار برای n برابر ۸۶۴۰۰ ثانیه است.

این گزینه در مواردی مفید است که همتای راه دور دارای آدرس IP پویا است و از یک نام DNS با TTL پایین برای ردیابی آدرس IP با استفاده از سرویسی مانند https://www.nsupdate.info به همراه یک کلاینت DNS پویا مانند ddclient استفاده می‌شود.

اگر دسترسی به همتا امکان‌پذیر نباشد، راه‌اندازی مجدد فعال شده و باعث بازخوانی مجدد نام میزبان مشخص‌شده در --remote می‌شود (در صورتی که --resolv-retry نیز مشخص شده باشد).

در حالت سرور، --ping-restart، --inactive یا هر نوع سیگنال تولیدشدهٔ داخلی دیگر همیشه روی اشیاء نمونهٔ کلاینت به‌صورت جداگانه اعمال می‌شود، نه روی کل سرور. همچنین توجه داشته باشید که در حالت سرور، هر سیگنال تولیدشدهٔ داخلی که معمولاً باعث راه‌اندازی مجدد می‌شود، در عوض باعث حذف شیء نمونهٔ کلاینت خواهد شد.

در حالت کلاینت، پارامتر --ping-restart به‌طور پیش‌فرض روی ۱۲۰ ثانیه تنظیم شده است. این پیش‌فرض تا زمانی که کلاینت مقدار جایگزین را از سرور (بر اساس تنظیم --keepalive در پیکربندی سرور) دریافت کند، برقرار خواهد بود. برای غیرفعال کردن پیش‌فرض ۱۲۰ ثانیه، مقدار --ping-restart 0 را روی کلاینت تنظیم کنید.

برای اطلاعات بیشتر دربارهٔ SIGUSR1 بخش سیگنال‌ها را در ادامه ببینید.

توجه داشته باشید که رفتار SIGUSR1 می‌تواند توسط گزینه‌های --persist-tun، --persist-local-ip و --persist-remote-ip تغییر کند.

همچنین توجه داشته باشید که --ping-exit و --ping-restart مانعة‌الجمع هستند و نمی‌توان آن‌ها را با هم استفاده کرد.

--ping-timer-rem
تایمر --ping-exit / --ping-restart را تنها در صورتی اجرا کن که یک آدرس راه دور داشته باشیم. اگر دیمن را در حالت شنود آغاز می‌کنید (یعنی بدون همتای صریح --remote) و نمی‌خواهید زمان‌سنجی مهلت زمانی تا زمان اتصال یک همتای راه دور آغاز شود، از این گزینه استفاده کنید.
از پروتکل p برای ارتباط با میزبان راه دور استفاده کن. p می‌تواند udp، tcp-client یا tcp-server باشد. همچنین می‌توانید با مشخص کردن p به‌ترتیب به‌صورت udp4، tcp4-client، tcp4-server یا udp6، tcp6-client، tcp6-server، برنامهٔ OpenVPN را به استفادهٔ تنها از IPv4 یا تنها IPv6 محدود کنید.

پروتکل پیش‌فرض در صورت مشخص نشدن --proto، udp است.

برای کارکرد UDP، باید --proto udp روی هر دو همتا مشخص شود.

برای کارکرد TCP، یک همتا باید از --proto tcp-server و همتای دیگر از --proto tcp-client استفاده کند. همتایی که با tcp-server آغاز شده باشد برای اتصال ورودی به‌طور نامحدود منتظر می‌ماند. همتایی که با tcp-client آغاز شده تلاش به اتصال می‌کند و در صورت شکست، ۵ ثانیه متوقف شده (قابل تنظیم از طریق گزینهٔ --connect-retry) و مجدداً به‌طور نامحدود یا تا N بار تلاش (قابل تنظیم از طریق گزینهٔ --connect-retry-max) تلاش خواهد کرد. هر دو کلاینت و سرور TCP در صورتی که هر یک از طرفین اتصال را بازنشانی کند، سیگنال راه‌اندازی مجدد SIGUSR1 را شبیه‌سازی می‌کنند.

برنامهٔ OpenVPN برای عملکرد بهینه روی UDP طراحی شده است، اما قابلیت TCP برای شرایطی که UDP قابل استفاده نیست فراهم شده است. در مقایسه با UDP، پروتکل TCP هنگام استفاده روی شبکه‌های غیرقابل‌اطمینان یا شلوغ معمولاً تا حدی کارایی و پایداری کمتری خواهد داشت.

این مقاله برخی از مشکلات تونل‌سازی IP روی TCP را تشریح می‌کند: https://web.archive.org/web/20141025181658/http://sites.inka.de/sites/bigred/devel/tcp-tcp.html

با این حال، موارد خاصی وجود دارد که در آن‌ها استفاده از TCP ممکن است از دیدگاه امنیت و پایداری سودمند باشد، مانند تونل‌سازی پروتکل‌های غیر IP یا پروتکل‌های UDP در سطح برنامه، یا تونل‌سازی پروتکل‌هایی که لایهٔ قابلیت‌اطمینان داخلی ندارند.

شماره یا نام درگاه TCP/UDP برای هر دو بخش محلی و دوردست (هر دو گزینه --lport و --rport را روی درگاه داده‌شده تنظیم می‌کند). مقدار پیش‌فرض فعلی یعنی 1194 نشان‌دهنده شماره درگاه رسمی اختصاص‌یافته توسط IANA برای OpenVPN است و از نسخه 2.0-beta17 استفاده می‌شود. نسخه‌های پیشین از درگاه 5000 به عنوان پیش‌فرض استفاده می‌کردند.
تنظیم شماره یا نام درگاه TCP/UDP مورد استفاده توسط گزینه --remote. درگاه همچنین می‌تواند مستقیماً با استفاده از گزینه --remote تنظیم شود.
تغییر اندازه پنجره لغزان و پنجره زمانی محافظت در برابر تکرار (replay protection).

ساختارهای معتبر:

replay-window n
replay-window n t

استفاده از یک پنجره لغزان محافظت در برابر تکرار با اندازه n و پنجره زمانی t ثانیه.

به‌طور پیش‌فرض n برابر 64 (پیش‌فرض IPSec) و t برابر 15 ثانیه است.

این گزینه تنها در حالت UDP کاربرد دارد، یعنی زمانی که --proto udp مشخص شده باشد یا هیچ گزینه --proto تعیین نشده باشد.

هنگامی که OpenVPN بسته‌های IP را از طریق UDP تونل می‌کند، این احتمال وجود دارد که بسته‌ها دور ریخته شوند یا بدون ترتیب تحویل داده شوند. از آنجا که OpenVPN، همانند IPSec، لایه فیزیکی شبکه را شبیه‌سازی می‌کند، دنباله بسته‌های نامرتب را می‌پذیرد و چنین بسته‌هایی را با همان ترتیبی که دریافت شده‌اند به پشته پروتکل TCP/IP تحویل می‌دهد، به شرطی که چندین شرط را برآورده کنند.

بسته نمی‌تواند تکراری باشد.
اگر بسته‌ای بدون ترتیب برسد، تنها در صورتی پذیرفته می‌شود که تفاوت بین شماره ترتیب آن و بالاترین شماره ترتیبی که تاکنون دریافت شده کمتر از n باشد.
اگر بسته‌ای بدون ترتیب برسد، تنها در صورتی پذیرفته می‌شود که حداکثر تا t ثانیه پس از هر بسته‌ای با شماره ترتیب بالاتر برسد.

اگر از یک پیوند شبکه‌ای با خط لوله بزرگ استفاده می‌کنید (به این معنی که حاصل‌ضرب پهنای باند و تأخیر بالا است)، ممکن است بخواهید از مقدار بزرگ‌تری برای n استفاده کنید. پیوندهای ماهواره‌ای به‌ویژه اغلب به این موضوع نیاز دارند.

اگر OpenVPN را با --verb 4 اجرا کنید، هر بار که بیشترین عقب‌گرد شماره ترتیب دیده‌شده تا کنون افزایش یابد، پیام "PID_ERR replay-window backtrack occurred [x]" را خواهید دید. از این پیام می‌توان برای کالیبره کردن n استفاده کرد.

در مورد روش مناسب برای رسیدگی به بازآرایی بسته‌ها در لایه امنیتی، اختلاف نظرهایی وجود دارد.

به‌طور مشخص، لایه امنیتی تا چه میزان باید از پروتکل کپسوله‌شده در برابر حملاتی که خود را به عنوان اتلاف بسته و بازآرایی عادی رخ‌داده در شبکه‌های IP جا می‌زنند، محافظت کند؟

رویکرد IPSec و OpenVPN این است که بازآرایی بسته‌ها را در یک پنجره ثابت مشخص از شماره‌های ترتیب مجاز بدانند.

برنامه OpenVPN با محدود کردن اندازه پنجره از نظر زمانی و همچنین فضای ترتیبی، مدل IPSec را ارتقا می‌دهد.

برنامه OpenVPN همچنین انتقال بر بستر TCP را به عنوان یک گزینه اضافه می‌کند (چیزی که توسط IPSec ارائه نمی‌شود)، که در این حالت OpenVPN می‌تواند موضع بسیار سخت‌گیرانه‌ای در قبال حذف و بازآرایی پیام‌ها اتخاذ کند: اجازه آن را ندهد. از آنجا که TCP قابلیت اطمینان را تضمین می‌کند، هرگونه رخداد اتلاف بسته یا بازآرایی می‌تواند یک حمله در نظر گرفته شود.

از این حیث، می‌توان گفت هنگامی که پروتکل‌های کاربردی غیر IP یا UDP که ممکن است در برابر حمله حذف یا بازآرایی پیام آسیب‌پذیر باشند تونل می‌شوند (حملاتی که در محدوده پارامترهای عملیاتی عادی شبکه‌های IP قرار می‌گیرند)، انتقال تونل بر بستر TCP ترجیح داده می‌شود.

بنابراین می‌توان گفت که هرگز نباید یک پروتکل غیر IP یا پروتکل کاربردی UDP را روی UDP تونل کرد، اگر آن پروتکل ممکن است در برابر حمله حذف یا بازآرایی پیامی که در محدوده پارامترهای عملیاتی مورد انتظار از لایه فیزیکی IP قرار می‌گیرد، آسیب‌پذیر باشد. این مشکل به سادگی با استفاده از TCP به عنوان لایه انتقال VPN برطرف می‌شود.

پایدار نگه داشتن وضعیت محافظت در برابر تکرار در طول نشست‌ها با استفاده از file برای ذخیره و بارگذاری مجدد وضعیت.

این گزینه یک نسخه دیسکی از وضعیت فعلی محافظت در برابر تکرار (یعنی جدیدترین برچسب زمانی و شماره ترتیب بسته دریافت‌شده از همتای دوردست) را نگه می‌دارد، تا در صورتی که یک نشست OpenVPN متوقف و دوباره راه‌اندازی شد، هرگونه تکرار بسته‌هایی که از قبل توسط نشست قبلی دریافت شده بودند را رد کند.

این گزینه تنها زمانی معنادار است که محافظت در برابر تکرار فعال باشد (پیش‌فرض) و شما از حالت TLS به همراه --tls-auth استفاده کنید.

پس از گذشت n ثانیه از آغاز نشست، سیگنال SIGTERM را برای نمونه کلاینت ارسال می‌کند و OpenVPN را مجبور به قطع ارتباط می‌نماید. در حالت کلاینت، OpenVPN ارتباط را قطع کرده و خارج می‌شود، در حالی که در حالت سرور تمام نشست‌های کلاینت خاتمه می‌یابند.

این گزینه همچنین می‌تواند در پرونده پیکربندی نمونه کلاینت با استفاده از --client-config-dir تعیین شود یا به‌طور پویا با استفاده از یک اسکریپت --client-connect تولید گردد. در این حالت‌ها، تنها نشست کلاینت مربوطه خاتمه می‌یابد.

اعمال پرچم‌های داده‌شده به سوکت انتقال OpenVPN. در حال حاضر تنها از TCP_NODELAY پشتیبانی می‌شود.

پرچم سوکت TCP_NODELAY در حالت TCP مفید است و باعث می‌شود هسته، بسته‌های تونل را بلافاصله از طریق اتصال TCP ارسال کند، بدون اینکه سعی کند چند بسته کوچک‌تر را در یک بسته بزرگ‌تر دسته‌بندی نماید. این امر می‌تواند به بهبود چشمگیری در تأخیر منجر شود.

از نسخه 2.7.6 برنامه OpenVPN، پرچم TCP_NODELAY به‌طور پیش‌فرض روی هر سوکت TCP فعال است، بنابراین مشخص کردن آن در اینجا دیگر ضروری نیست.

TCP_NODELAY به طور پیش‌فرض روی هر سوکت TCP فعال است. در --mode server این گزینه علاوه بر این socket-flags TCP_NODELAY را به کلاینت‌های در حال اتصال ارسال (push) می‌کند، تا کلاینت‌های قدیمی‌تر از 2.7.6 نیز آن را دریافت کنند. این گزینه را می‌توان پس از اینکه چنین کلاینت‌هایی دیگر در حال استفاده نبودند، حذف کرد.

ماکرو به صورت زیر بسط می‌یابد:

if mode server:
    push "socket-flags TCP_NODELAY"
این گزینه به OpenVPN دستور می‌دهد تا با محدود کردن اندازه بسته کانال کنترلی و تنظیم --mssfix، تلاش کند بیشینه اندازه بسته در هنگام نوشتن (on-write) را محدود نماید.

OpenVPN تلاش خواهد کرد پیام‌های کانال کنترلی خود را زیر این اندازه نگه دارد، اما به دلیل برخی محدودیت‌ها در پروتکل، این امر همیشه امکان‌پذیر نیست. اگر این گزینه تنظیم نشود، پیش‌فرض بیشینه اندازه بسته کنترلی 1250 خواهد بود. اندازه بسته کانال کنترلی به مقادیری بین 154 و 2048 محدود خواهد شد. بیشینه اندازه بسته شامل سربار کپسوله‌سازی مانند UDP و IP است.

از نظر --mssfix به این صورت گسترش می‌یابد:

mssfix size mtu

اگر نیاز دارید --mssfix را برای کانال داده و بیشینه اندازه بسته کانال کنترلی به صورت مستقل تنظیم کنید، ابتدا از --max-packet-size و سپس از یک --mssfix در پیکربندی استفاده کنید.

به طور کلی اندازه پیش‌فرض 1250 به جز در موارد خاص تقریباً در همه جا کار می‌کند، به‌ویژه از آنجا که IPv6 نیازمند یک MTU به اندازه 1280 یا بزرگ‌تر است.

گزینه‌های این بخش مربوط به پیکربندی رابط شبکه مجازی tun/tap، از جمله تنظیم آدرس IP در VPN و مسیریابی شبکه است.

--bind-dev device
(فقط لینوکس) device را تنظیم می‌کند تا سوکت سرور را به یک دستگاه Virtual Routing and Forwarding (VRF) متصل کند
در کلاینت، به جای ارسال بسته‌های IPv6 روی تونل VPN، به تمام بسته‌های IPv6 با یک پیام ICMPv6 no route host پاسخ داده می‌شود. در سرور، به تمام بسته‌های IPv6 از سمت کلاینت‌ها با یک پیام ICMPv6 no route to host پاسخ داده می‌شود. این گزینه برای مواردی در نظر گرفته شده است که IPv6 باید مسدود شود و گزینه‌های دیگر در دسترس نیستند. --block-ipv6 در صورت تنظیم، از IPv6 راه دور به عنوان آدرس مبدا بسته‌های ICMPv6 استفاده می‌کند، در غیر این صورت از fe80::7 به عنوان آدرس مبدا استفاده خواهد کرد.

برای معنادار بودن این گزینه باید حتماً ترافیک را به سمت رابط tun مسیریابی کنید. بلوک پیکربندی نمونه زیر تمام ترافیک IPv6 را به OpenVPN ارسال می‌کند و به تمام درخواست‌ها با no route to host پاسخ می‌دهد، که به طور موثری IPv6 را مسدود می‌کند (جهت جلوگیری از نشت اتصالات IPv6 از کلاینت‌های dual-stack در سرویس‌های VPN با IPv4 تنها).

--ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1
--redirect-gateway ipv6
--block-ipv6
ارسال یک پیکربندی ipv6 «معتبر» به کلاینت و مسدود کردن آن در سرور
--push "ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1"
--push "redirect-gateway ipv6"
--block-ipv6

نکته: این گزینه بر ترافیک ارسال شده از سمت سرور به طرف کلاینت تاثیری نمی‌گذارد (نه در سمت سرور و نه در سمت کلاینت). این امر ضروری دانسته نشده است، زیرا با عدم پیکربندی IPv6 روی tun سرور یا تنظیم یک قانون دیوار آتش در سمت سرور، به راحتی می‌توان از چنین ترافیکی جلوگیری کرد.

دستگاه شبکه مجازی TUN/TAP که می‌تواند tunX، tapX، null یا یک رشته نام دلخواه باشد (X را می‌توان برای یک دستگاه پویا حذف کرد.)

اگر نه --dev و نه --dev-type مشخص نشده باشند، OpenVPN به طور پیش‌فرض روی tun قرار می‌گیرد، یعنی یک دستگاه tunX با نام‌گذاری پویا ایجاد می‌کند و یک تونل لایه ۳ را اجرا می‌کند.

برای نمونه‌ای از راه‌اندازی یک دستگاه TUN، بخش مثال‌های زیر را ببینید.

شما باید در هر دو سمت اتصال یا از دستگاه‌های tun استفاده کنید یا در هر دو سمت از دستگاه‌های tap. نمی‌توانید آن‌ها را ترکیب کنید، زیرا لایه‌های شبکه زیرین متفاوتی را نشان می‌دهند:

دستگاه‌ها IPv4 یا IPv6 را کپسوله‌سازی می‌کنند (لایه ۳ مدل OSI)
دستگاه‌ها Ethernet 802.3 را کپسوله‌سازی می‌کنند (لایه ۲ مدل OSI).

نحوهای معتبر:

dev tun2
dev tap4
dev ovpn

اینکه اگر نام دستگاه tun یا tap نباشد چه اتفاقی رخ می‌دهد، به پلتفرم وابسته است.

در اکثر پلتفرم‌ها، tunN (مانند tun2، tun30) و tapN (مانند tap3) یک رابط tun/tap شماره‌گذاری شده با همان شماره مشخص شده ایجاد می‌کنند - این مورد زمانی مفید است که چندین نمونه OpenVPN فعال باشند، و نیاز به دانستن نگاشت نمونه به دستگاه باشد. برخی پلتفرم‌ها از "numbered tap" پشتیبانی نمی‌کنند، بنابراین تلاش برای --dev tap3 ناموفق خواهد بود.

نام‌های دلخواه دستگاه (مانند --dev tun-home) فقط روی FreeBSD (با درایور هسته DCO برای دستگاه‌های tun) و لینوکس (برای هر دو دستگاه tun و tap، درایور DCO و tun/tap) کار خواهند کرد.

اگر چنین نام دستگاهی با tun یا tap آغاز شود (مانند tun-home)، OpenVPN نوع دستگاه مناسب را به طور خودکار انتخاب خواهد کرد. در غیر این صورت نوع دستگاه مورد نظر باید با --dev-type tun یا --dev-type tap مشخص شود.

روی Windows، فقط نام‌های tun و tap پشتیبانی می‌شوند. انتخاب در میان چندین درایور یا نمونه درایور نصب شده با --dev-node انجام می‌شود.

--dev-node node
این یک گزینه به‌شدت وابسته به سیستم برای اثرگذاری بر انتخاب درایور tun/tap است.

در لینوکس، دستگاه‌های tun/tap با دسترسی به /dev/net/tun ایجاد می‌شوند، و نام این دستگاه می‌تواند با استفاده از --dev-node ... تغییر کند.

در Mac OS X این گزینه می‌تواند برای تعیین پیاده‌سازی پیش‌فرض tun استفاده شود. استفاده از --dev-node utun استفاده از پشتیبانی بومی هسته Darwin tun را اجباری می‌کند. از --dev-node utunN برای انتخاب یک نمونه utun مشخص استفاده کنید. برای اجبار به استفاده از tun.kext (/dev/tunX) از --dev-node tun استفاده کنید. در صورت عدم تعیین گزینه --dev-node، برنامه openvpn ابتدا تلاش می‌کند utun را باز کند، و در صورت شکست به tun.kext بازمی‌گردد.

در سیستم‌های ویندوز، آداپتور TAP-Win32 را که در Network Connections Control Panel به نام node است یا GUID خام آداپتور درون آکولاد را انتخاب کنید. گزینه --show-adapters در ویندوز نیز می‌تواند برای شمارش تمام آداپتورهای TAP-Win32 موجود استفاده شود و هم نام کنترل پنل اتصالات شبکه و هم GUID را برای هر آداپتور TAP-Win32 نمایش می‌دهد.

در سایر پلتفرم‌ها، در صورت پشتیبانی در آن پلتفرم، --dev-node node بر نام‌گذاری دستگاه tun/tap ایجاد شده اثر می‌گذارد. اگر OpenVPN نتواند بر اساس نام تشخیص دهد که node یک دستگاه TUN است یا TAP، باید --dev-type tun یا --dev-type tap را نیز مشخص کنید.

اگر node با رشته unix: آغاز شود، openvpn با باقی آرگومان مانند یک برنامه رفتار خواهد کرد. OpenVPN برنامه را اجرا کرده و یک سوکت موقت دامنه یونیکس (unix domain socket) ایجاد می‌کند که همراه با پیکربندی tun به عنوان متغیرهای محیطی به برنامه ارسال می‌شود. سوکت موقت دامنه یونیکس در متغیر محیطی TUNTAP_SOCKET_FD منتقل خواهد شد.

این حالت unix: اساساً برای استفاده با شبیه‌ساز شبکه lwipovpn طراحی شده است (https://github.com/OpenVPN/lwipovpn).

--dev-type device-type
از چه نوع دستگاهی استفاده می‌شود؟ device-type باید tun (لایه ۳ OSI) یا tap (لایه ۲ OSI) باشد. از این گزینه تنها در صورتی استفاده کنید که دستگاه TUN/TAP استفاده‌شده با --dev با tun یا tap شروع نشود.
تنظیم پارامترهای شبکه اضافی در پلتفرم‌های پشتیبانی‌شده. ممکن است روی کلاینت مشخص شود یا از سرور ارسال (push) شود. در ویندوز این گزینه‌ها به‌طور پیش‌فرض توسط درایور tap-windows6 یا در صورت غیرفعال بودن dhcp مستقیماً توسط OpenVPN مدیریت می‌شوند. کلاینت OpenVPN for Android نیز آن‌ها را به صورت داخلی پردازش می‌کند.

در سایر پلتفرم‌ها این گزینه‌ها پیش از فراخوانی اسکریپت --up، تنها در محیط کلاینت با نام foreign_option_{n} ذخیره می‌شوند. برای دریافت و تفسیر این موارد در صورت نیاز، باید از یک افزونه یا اسکریپت --up استفاده شود. بسیاری از توزیع‌های لینوکس شامل چنین اسکریپت‌هایی هستند و برخی رابط‌های کاربری شخص ثالث مانند tunnelblick نیز همراه با اسکریپت‌هایی برای پردازش این گزینه‌ها ارائه می‌شوند.

نحو معتبر:

dhcp-option type [parm]
تنظیم پسوند DNS ویژه اتصال به name.
نام مستعار برای DOMAIN. این یک گزینه سازگاری است و نباید در استقرارهای جدید استفاده شود.
افزودن name به فهرست جستجوی دامنه. برای افزودن موارد بیشتر این گزینه را تکرار کنید. تا ۱۰ دامنه پشتیبانی می‌شود.
تنظیم آدرس IPv4 یا IPv6 کارساز نام دامنه (DNS) اصلی. برای تنظیم آدرس‌های کارساز DNS ثانویه این گزینه را تکرار کنید.

نکته: کارسازهای DNS IPv6 در حال حاضر با استفاده از netsh تنظیم می‌شوند (کد DHCP فعلی تنها می‌تواند DHCP نسخه IPv4 را مدیریت کند، و آن پروتکل تنها آدرس‌های IPv4 را در همه جا مجاز می‌داند). این گزینه در محیط قرار خواهد گرفت تا در صورت نیاز، یک اسکریپت --up بتواند بر اساس آن عمل کند.

تنظیم آدرس کارساز WINS اصلی (کارساز نام NetBIOS روی TCP/IP). برای تنظیم آدرس‌های کارساز WINS ثانویه این گزینه را تکرار کنید.
تنظیم آدرس کارساز NBDD اصلی (کارساز توزیع دیتاگرام NetBIOS روی TCP/IP). برای تنظیم آدرس‌های کارساز NBDD ثانویه این گزینه را تکرار کنید.
تنظیم آدرس کارساز NTP اصلی (پروتکل زمان شبکه). برای تنظیم آدرس‌های کارساز NTP ثانویه این گزینه را تکرار کنید.
تنظیم نوع گره NetBIOS روی TCP/IP. گزینه‌های ممکن:
1
b-node (پخش همگانی)
2
p-node (پرس‌وجوهای نام نقطه به نقطه از یک کارساز WINS)
4
m-node (پخش همگانی و سپس پرس‌وجو از کارساز نام)
8
h-node (پرس‌وجو از کارساز نام، سپس پخش همگانی).
تنظیم دامنه (Scope) پروتکل NetBIOS روی TCP/IP. یک شناسه دامنه NetBIOS یک سرویس نام‌گذاری گسترش‌یافته برای ماژول NetBIOS روی TCP/IP (معروف به NBT) فراهم می‌کند. هدف اصلی شناسه دامنه NetBIOS، جداسازی ترافیک NetBIOS در یک شبکه واحد تنها به گره‌هایی با شناسه دامنه NetBIOS یکسان است. شناسه دامنه NetBIOS یک رشته متنی است که به نام NetBIOS پیوست می‌شود. شناسه دامنه NetBIOS در دو میزبان باید مطابقت داشته باشد، در غیر این صورت دو میزبان قادر به برقراری ارتباط نخواهند بود. شناسه دامنه NetBIOS همچنین به رایانه‌ها اجازه می‌دهد در صورت داشتن شناسه‌های دامنه متفاوت، از نام رایانه یکسانی استفاده کنند. شناسه دامنه بخشی از نام NetBIOS می‌شود و نام را یکتا می‌سازد. (این توصیف دامنه‌های NetBIOS با قدردانی از <NeonSurge@abyss.com>)
غیرفعال کردن Netbios-over-TCP/IP.
PROXY_HTTP host port تنظیم یک پراکسی HTTP که هنگام اتصال به VPN باید استفاده شود.

این گزینه در حال حاضر تنها روی OpenVPN for Android کار می‌کند و نیازمند اندروید ۱۰ یا بالاتر است.

تنظیم پارامترهای آداپتور TUN/TAP. این گزینه به آدرس IP نقطه پایانی VPN محلی نیاز دارد. برای دستگاه‌های TUN در حالت نقطه-به-نقطه (point-to-point)، آرگومان بعدی باید آدرس IP نقطه پایانی VPN دوردست باشد. برای دستگاه‌های TAP یا دستگاه‌های TUN استفاده‌شده با --topology subnet، آرگومان دوم ماسک زیرشبکه بخش شبکه مجازی در حال ساخت یا متصل‌شونده است.

برای دستگاه‌های TUN که اتصالات مجازی IP نقطه-به-نقطه را ممکن می‌سازند (هنگام استفاده در حالت --topology net30 یا p2p)، کاربرد مناسب --ifconfig به کار بردن دو آدرس IP خصوصی است که عضو هیچ زیرشبکه در حال استفاده‌ای نباشند. این آدرس‌های IP می‌توانند متوالی باشند و ترتیب آن‌ها در سمت دوردست باید معکوس شود. پس از برقراری VPN، با پینگ کردن rn، ارتباط از درون بستر VPN پینگ خواهد شد.

برای دستگاه‌های TAP که امکان ایجاد بخش‌های اترنت مجازی را فراهم می‌کنند، یا دستگاه‌های TUN در حالت --topology subnet (که "شبکه‌های چندنقطه‌ای" مجازی ایجاد می‌کنند)، --ifconfig برای تنظیم یک آدرس IP و ماسک زیرشبکه درست مانند پیکربندی یک آداپتور فیزیکی اترنت استفاده می‌شود. اگر در تلاش برای اتصال به یک پل اترنت (ethernet bridge) دوردست هستید، آدرس IP و زیرشبکه باید روی مقادیری تنظیم شوند که در بخش اترنت پل‌شده معتبر باشند (توجه داشته باشید که از DHCP نیز می‌توان برای همین منظور استفاده کرد).

این گزینه، با اینکه اساساً به عنوان واسطی برای دستور ifconfig(8) عمل می‌کند، برای ساده‌سازی پیکربندی تونل TUN/TAP از طریق ارائه یک رابط استاندارد برای پیاده‌سازی‌های گوناگون ifconfig در پلتفرم‌های مختلف طراحی شده است.

پارامترهای --ifconfig که آدرس‌های IP هستند را می‌توان با نام قابل تحلیل از طریق DNS یا پرونده /etc/hosts نیز مشخص کرد.

برای دستگاه‌های TAP، در صورتی که رابط TAP اجاره آدرس IP را از یک سرور DHCP دریافت می‌کند، نباید از --ifconfig استفاده شود.

نمونه‌ها:

# tun device in net30/p2p mode
ifconfig 10.8.0.2 10.8.0.1
# tun/tap device in subnet mode
ifconfig 10.8.0.2 255.255.255.0
--ifconfig-ipv6 args
پیکربندی یک آدرس IPv6 روی دستگاه tun.

نحو معتبر:

ifconfig-ipv6 ipv6addr/bits [ipv6remote]

آرگومان ipv6addr/bits آدرس IPv6 مورد استفاده است. پارامتر دوم در صورت مشخص نشدن درگاه (gateway)، به عنوان مقصد مسیر برای --route-ipv6 استفاده می‌شود.

گزینه --topology هیچ تأثیری بر --ifconfig-ipv6 ندارد.

--ifconfig-noexec
دستورهای ifconfig/netsh را واقعاً اجرا نکن، بلکه در عوض پارامترهای --ifconfig را با استفاده از متغیرهای محیطی به اسکریپت‌ها ارسال کن.
--ifconfig-nowarn
اگر گزینه --ifconfig در این سمت اتصال با سمت دوردست مطابقت نداشت، هشدار بررسی سازگاری گزینه‌ها را صادر نکن. این گزینه زمانی مفید است که می‌خواهید مزایای کلی بررسی سازگاری گزینه‌ها را حفظ کنید (همچنین گزینه --disable-occ را ببینید) و در عین حال فقط مؤلفه ifconfig این بررسی را غیرفعال کنید.

برای نمونه، اگر پیکربندی‌ای دارید که در آن میزبان محلی از --ifconfig استفاده می‌کند اما میزبان دوردست استفاده نمی‌کند، از --ifconfig-nowarn در میزبان محلی استفاده کنید.

این گزینه همچنین هشدارهای مربوط به تداخل بالقوه آدرس‌ها را بی‌صدا می‌کند، که گاهی با ایجاد هشدارهای "مثبت کاذب" کاربران باتجربه‌تر را آزار می‌دهد.

آدرس لایه پیوند (link layer address) را که بیشتر به عنوان آدرس MAC شناخته می‌شود مشخص کنید. فقط برای دستگاه‌های TAP اعمال می‌شود.
هنگام راه‌اندازی‌های مجدد ناشی از SIGUSR1 یا --ping-restart، دستگاه TUN/TAP را نبندید و دوباره باز نکنید یا اسکریپت‌های up/down را اجرا نکنید.

سیگنال SIGUSR1 یک سیگنال راه‌اندازی مجدد مشابه SIGHUP است، اما کنترل دقیق‌تری روی گزینه‌های بازنشانی ارائه می‌دهد.

در لینوکس، این گزینه زمانی می‌تواند مفید باشد که OpenVPN به عنوان ریشه (root) اجرا نمی‌شود و دسترسی CAP_NET_ADMIN به آن داده نشده است، چرا که در غیر این صورت به فرایند اجازه غیرفعال و فعال کردن مجدد رابط داده نخواهد شد.

در کنار موارد فوق، استفاده از --persist-tun به رابط تونل اجازه می‌دهد تمام تنظیمات IP/مسیر را حفظ کند، بنابراین به کاربر امکان می‌دهد هرگونه محافظت پیشرفته در برابر نشت ترافیک را پیاده‌سازی کند (لطفاً توجه داشته باشید که برای محافظت کامل، باید قوانین مسیر/دیوار آتش اضافی برقرار باشند).

اجرای خودکار دستورهای مسیریابی برای هدایت مجدد تمام ترافیک خروجی IP از طریق VPN. این یک گزینه سمت کلاینت است.

این گزینه سه مرحله را انجام می‌دهد:

1.
ایجاد یک مسیر ایستا برای آدرس --remote که به درگاه پیش‌فرض از پیش موجود فوروارد می‌شود. این کار برای این انجام می‌شود که مرحله (3) یک حلقه مسیریابی ایجاد نکند.
2.
حذف مسیر درگاه پیش‌فرض.
3.
تنظیم درگاه پیش‌فرض جدید روی آدرس نقطه پایانی VPN (که از --route-gateway یا پارامتر دوم --ifconfig در صورت مشخص شدن --dev tun به دست می‌آید).

هنگامی که تونل برچیده می‌شود، تمام مراحل بالا معکوس می‌شوند تا مسیر پیش‌فرض اصلی بازیابی شود.

پرچم‌های گزینه:

local
اگر هر دو طرف OpenVPN به طور مستقیم از طریق یک زیرشبکه مشترک متصل هستند (مانند ارتباط بی‌سیم)، پرچم local را اضافه کنید. پرچم local باعث حذف مرحله (1) در بالا می‌شود.
تلاش برای تعیین خودکار فعال‌سازی پرچم local در بالا.
استفاده از این پرچم برای بازنویسی درگاه پیش‌فرض با استفاده از 0.0.0.0/1 و 128.0.0.0/1 به جای 0.0.0.0/0. این کار این مزیت را دارد که درگاه پیش‌فرض اصلی را بازنویسی می‌کند اما آن را به طور کامل پاک نمی‌کند.
افزودن یک مسیر مستقیم به سرور DHCP (در صورتی که غیرمحلی باشد) که تونل را دور می‌زند (در کلاینت‌های ویندوز موجود است، ممکن است در کلاینت‌های غیرویندوزی در دسترس نباشد).
افزودن یک مسیر مستقیم به سرور(های) DNS (در صورتی که غیرمحلی باشند) که تونل را دور می‌زند (در کلاینت‌های ویندوز موجود است، ممکن است در کلاینت‌های غیرویندوزی در دسترس نباشد).
مسدود کردن دسترسی به LAN محلی در هنگام فعال بودن تونل، به جز خود درگاه LAN. این کار با مسیریابی LAN محلی (به جز آدرس درگاه LAN) به داخل تونل انجام می‌شود. در ویندوز فیلترهای WFP علاوه بر مسیرها اضافه می‌شوند که دسترسی به منابعی که از طریق آداپتور VPN مسیریابی نمی‌شوند را مسدود می‌کنند. این پرچم را برای محافظت در برابر حملات نوع TunnelCrack ارسال کنید (ببینید: https://tunnelcrack.mathyvanhoef.com).
هدایت مجدد مسیریابی IPv6 به داخل تونل. این مشابه پرچم def1 عمل می‌کند، به این صورت که مسیرهای خاص‌تر IPv6 اضافه می‌شوند (2000::/4، 3000::/4) و کل فضای یونی‌کست IPv6 را پوشش می‌دهند.
!ipv4
ترافیک IPv4 را هدایت مجدد نکن - معمولاً در جفت پرچم ipv6 !ipv4 برای هدایت مجدد ترافیک فقط IPv6 استفاده می‌شود.
مانند --redirect-gateway، اما تغییر واقعی در درگاه پیش‌فرض (default gateway) ایجاد نمی‌کند. هنگام فرستادن (push) زیرشبکه‌های خصوصی مفید است.
--route-table id
مشخص کردن یک شناسه (id) جدول پیش‌فرض برای استفاده با --route. به صورت پیش‌فرض، OpenVPN مسیرها را در جدول مسیریابی اصلی سیستم‌عامل نصب می‌کند، اما با این گزینه، می‌توان از یک جدول مسیریابی تعریف‌شده توسط کاربر به‌جای آن استفاده کرد.

(تنها در لینوکس پشتیبانی می‌شود، در دیگر پلتفرم‌ها بی‌اثر است).

افزودن مسیر به جدول مسیریابی پس از برقراری اتصال. می‌توان چندین مسیر را مشخص کرد. مسیرها پیش از بسته‌شدن دستگاه TUN/TAP به صورت خودکار و با ترتیب معکوس برچیده می‌شوند.

نحو‌های معتبر:

route network/IP
route network/IP netmask
route network/IP netmask gateway
route network/IP netmask gateway metric

این گزینه به عنوان یک جایگزین راحت برای دستور شل route(8) در نظر گرفته شده است، در حالی که هم‌زمان مفاهیم قابل حمل در سراسر پلتفرم‌های OpenVPN فراهم می‌کند.

در صورت مشخص نشدن، پیش‌فرض روی 255.255.255.255 تنظیم می‌شود
مقدار پیش‌فرض از --route-gateway یا دومین پارامتر --ifconfig در صورت مشخص بودن --dev tun گرفته می‌شود.
مقدار پیش‌فرض در صورت تنظیم شدن از --route-metric گرفته می‌شود، در غیر این صورت 0 است.

مقدار پیش‌فرض را می‌توان با خالی گذاشتن یک گزینه یا تنظیم آن روی default مشخص کرد.

پارامترهای network و gateway همچنین می‌توانند به عنوان یک نام قابل حل توسط DNS یا پرونده /etc/hosts، یا به عنوان یکی از سه کلیدواژه ویژه مشخص شوند:

نشانی نقطه پایانی دوردست VPN (مشتق‌شده از --route-gateway یا پارامتر دوم --ifconfig هنگامی که --dev tun مشخص شده باشد).
درگاه پیش‌فرض IP از قبل موجود، خوانده‌شده از جدول مسیریابی (در همه سیستم‌عامل‌ها پشتیبانی نمی‌شود).
نشانی --remote در صورتی که OpenVPN در حالت کلاینت اجرا شده باشد، و در حالت سرور تعریف‌نشده است.
--route-delay args
نحو‌های معتبر:
route-delay
route-delay n
route-delay n w

تاخیر به مدت n ثانیه (پیش‌فرض 0) پس از برقراری اتصال، پیش از افزودن مسیرها. اگر n برابر با 0 باشد، مسیرها بلافاصله پس از برقراری اتصال افزوده می‌شوند. در صورت حذف --route-delay، مسیرها بلافاصله پس از باز شدن دستگاه TUN/TAP و اجرای اسکریپت --up، پیش از هرگونه کاهش سطح دسترسی --user یا --group (یا اجرای --chroot) افزوده خواهند شد.

این گزینه برای سناریوهایی طراحی شده که در آن‌ها از DHCP برای تنظیم نشانی‌های آداپتور tap استفاده می‌شود. این تاخیر به دست‌تکانی DHCP زمان کافی برای تکمیل پیش از افزودن مسیرها را می‌دهد.

در ویندوز، --route-delay با انتظار به مدت w ثانیه (پیش‌فرض 30) برای بالا آمدن آداپتور TAP-Win32 پیش از افزودن مسیرها، هوشمندانه‌تر عمل می‌کند.

--route-ipv6 args
راه‌اندازی مسیریابی IPv6 در سیستم برای ارسال شبکه IPv6 تعیین‌شده به داخل tun مربوط به OpenVPN.

نحو‌های معتبر:

route-ipv6 ipv6addr/bits
route-ipv6 ipv6addr/bits gateway
route-ipv6 ipv6addr/bits gateway metric
تنها برای مسیرهای IPv6 از طریق دستگاه‌های tap استفاده می‌شود، و در صورت عدم وجود، فیلد ipv6remote از --ifconfig-ipv6 یا --route-ipv6-gateway استفاده خواهد شد.
مقدار پیش‌فرض در صورت تنظیم شدن از --route-metric گرفته می‌شود، در غیر این صورت 0 است.
--route-gateway arg
تعیین یک gateway پیش‌فرض برای استفاده با --route.

اگر dhcp به عنوان پارامتر مشخص شود، نشانی درگاه (gateway) از طریق مذاکره DHCP با LAN سمت سرور OpenVPN استخراج خواهد شد.

ساختارهای معتبر:

route-gateway gateway
route-gateway dhcp
--route-ipv6-gateway gw
تعیین یک درگاه (gateway) پیش‌فرض gw برای استفاده با --route-ipv6.
--route-metric m
تعیین یک متریک پیش‌فرض m برای استفاده با --route.
--route-noexec
مسیرها را به‌طور خودکار اضافه یا حذف نکن. در عوض مسیرها را با استفاده از متغیرهای محیطی به اسکریپت --route-up ارسال کن.
--route-nopull
هنگام استفاده با --client یا --pull، گزینه‌های ارسال‌شده توسط سرور را بپذیر، به جز مسیرها، block-outside-dns و گزینه‌های dhcp مانند کارگزارهای DNS.

هنگام استفاده روی کلاینت، این گزینه عملاً سرور را از افزودن مسیرها به جدول مسیریابی کلاینت بازمی‌دارد، با این حال توجه داشته باشید که این گزینه همچنان به سرور اجازه می‌دهد ویژگی‌های TCP/IP رابط TUN/TAP کلاینت را تنظیم کند.

پیکربندی توپولوژی آدرس‌دهی مجازی هنگام اجرا در حالت --dev tun. این دستورالعمل در حالت --dev tap که همیشه از توپولوژی subnet استفاده می‌کند، هیچ معنایی ندارد.

اگر این دستورالعمل را روی سرور تنظیم کنید، دستورالعمل‌های --server و --server-bridge به‌طور خودکار تنظیمات توپولوژی انتخابی شما را به کلاینت‌ها نیز ارسال می‌کنند. این دستورالعمل را می‌توان به‌صورت دستی نیز به کلاینت‌ها ارسال کرد. مانند دستورالعمل --dev، این دستورالعمل نیز باید همیشه بین کلاینت و سرور سازگار باشد.

mode می‌تواند یکی از موارد زیر باشد:

استفاده از یک زیرشبکه به‌جای یک توپولوژی نقطه-به-نقطه با پیکربندی رابط tun با یک نشانی IP محلی و ماسک زیرشبکه (subnet mask)، مشابه توپولوژی استفاده‌شده در حالت --dev tap و پل‌زنی اترنت (ethernet bridging). این حالت به ازای هر کلاینت متصل یک نشانی IP اختصاص می‌دهد و روی ویندوز نیز کار می‌کند. این حالت پیش‌فرض است.
استفاده از یک توپولوژی نقطه-به-نقطه، با اختصاص یک زیرشبکه 30/ به ازای هر کلاینت. این حالت به گونه‌ای طراحی شده است که وقتی برخی یا همه کلاینت‌های متصل سیستم‌های ویندوزی هستند، رفتارهای نقطه-به-نقطه را امکان‌پذیر سازد.
استفاده از یک توپولوژی نقطه-به-نقطه که در آن نقطه پایانی دوردست رابط tun کلاینت همیشه به نقطه پایانی محلی رابط tun سرور اشاره می‌کند. این حالت به ازای هر کلاینت متصل یک نشانی IP اختصاص می‌دهد. فقط زمانی استفاده شود که هیچ‌یک از کلاینت‌های متصل سیستم‌های ویندوزی نباشند.

نکته: استفاده از --topology subnet تفسیر آرگومان‌های --ifconfig را به معنای "address netmask" تغییر می‌دهد، و نه "local remote".

ساختارهای معتبر:
tun-mtu tun-mtu
tun-mtu tun-mtu occ-mtu

مقدار MTU دستگاه TUN را tun-mtu در نظر می‌گیرد و MTU پیوند را از آن مشتق می‌کند. در بیشتر موارد، احتمالاً می‌خواهید این پارامتر را روی مقدار پیش‌فرض خود باقی بگذارید.

مقدار پیش‌فرض برای tun-mtu برابر 1500 است.

مقدار OCC MTU می‌تواند برای جلوگیری از هشدارهای عدم تطابق MTU از سوی کلاینت‌ها استفاده شود. اگر occ-mtu مشخص نشود، پیش‌فرض آن برابر با tun-mtu خواهد بود.

مقدار MTU (Maximum Transmission Units) حداکثر اندازه دیتاگرام بر حسب بایت است که می‌تواند بدون تکه‌تکه شدن (unfragmented) از طریق یک مسیر شبکه خاص ارسال شود. OpenVPN نیازمند آن است که بسته‌ها روی کانال‌های داده و کنترل به‌صورت تکه‌تکه‌نشده ارسال شوند.

مشکلات MTU اغلب خود را به صورت اتصالات معلق‌شده در دوره‌های استفاده فعال نشان می‌دهند.

بهتر است از گزینه‌های --fragment و/یا --mssfix برای مقابله با مشکلات اندازه MTU استفاده شود.

نکته: بسته به پلتفرم، سیستم‌عامل اجازه دریافت بسته‌های بزرگتر از tun-mtu را می‌دهد (مانند Linux و FreeBSD) اما پلتفرم‌های دیگر (مانند macOS) بسته‌های دریافتی را به همان اندازه MTU محدود می‌کنند.

حداکثر اندازه MTU را که یک سرور می‌تواند اعمال کند روی maxmtu پیکربندی می‌کند، با پیکربندی بافرهای داخلی برای پشتیبانی از حداقل این اندازه بسته. مقدار پیش‌فرض برای maxmtu برابر 1600 است. در حال حاضر فقط افزایش به بیش از 1600 امکان‌پذیر است، و تلاش برای کاهش max-mtu به زیر 1600 نادیده گرفته خواهد شد.
فرض می‌کند که دستگاه TUN/TAP ممکن است در هنگام خواندن، حداکثر تا n بایت بیشتر از اندازه --tun-mtu بازگرداند. این پارامتر به‌طور پیش‌فرض 0 است که برای اکثر دستگاه‌های TUN کافی است. دستگاه‌های TAP ممکن است سربار اضافی بیش از اندازه MTU ایجاد کنند، و هنگام استفاده از دستگاه‌های TAP مقدار 32 پیش‌فرض است. این پارامتر فقط اندازه بافر داخلی OpenVPN را کنترل می‌کند، بنابراین هیچ سربار انتقالی ناشی از استفاده از یک مقدار بزرگتر وجود ندارد.

این دو عملیات مستقل به --dev و به‌طور اختیاری به --user و/یا --group نیاز خواهند داشت.

(مستقل) ایجاد یک تونل ماندگار در پلتفرم‌هایی که از آن پشتیبانی می‌کنند مانند لینوکس. به‌طور معمول تونل‌های TUN/TAP تنها در بازه زمانی‌ای که یک برنامه آن‌ها را باز نگه داشته است وجود دارند. این گزینه از قابلیت درایور TUN/TAP برای ساخت تونل‌های ماندگاری بهره می‌برد که در میان چندین بار اجرای OpenVPN باقی می‌مانند و تنها زمانی از بین می‌روند که حذف شوند یا دستگاه بازراه‌اندازی شود.

یکی از مزایای تونل‌های ماندگار این است که نیاز به اسکریپت‌های مجزای --up و --down را برای اجرای دستورات مناسب ifconfig(8) و route(8) از بین می‌برند. این دستورات را می‌توان در همان اسکریپت شل که نشست OpenVPN را آغاز یا متوقف می‌کند قرار داد.

مزیت دیگر این است که اتصالات باز روی تونل مبتنی بر TUN/TAP با راه‌اندازی مجدد همتای OpenVPN بازنشانی نخواهند شد. این مورد می‌تواند برای برقراری اتصال بدون وقفه از طریق تونل در صورت بازنشانی DHCP آدرس IP عمومی همتا مفید باشد (گزینه --ipchange در بالا را ببینید).

یکی از معایب تونل‌های ماندگار این است که پیکربندی خودکار مقدار MTU آن‌ها دشوارتر است (گزینه‌های --link-mtu و --tun-mtu در بالا را ببینید).

در برخی پلتفرم‌ها مانند ویندوز، تونل‌های TAP-Win32 به‌طور پیش‌فرض ماندگار هستند.

(مستقل) حذف یک تونل ماندگار.

گزینه‌های این بخش مربوط به پیکربندی مسیریابی و فورواردینگ مجازی در ترکیب با سیستم‌عامل پایه است.

در حال حاضر این امکان تنها در لینوکس پشتیبانی می‌شود و هسته >= 4.9 پیشنهاد می‌شود.

این قابلیت برای نمونه زمانی می‌تواند کاربردی باشد که شبکه خارجی فقط باید به عنوان وسیله‌ای برای اتصال به برخی نقاط پایانی VPN استفاده شود و تمامی ترافیک عادی صرفاً از طریق تونل(ها) هدایت گردد. این کار را می‌توان با راه‌اندازی یک VRF و پیکربندی رابط متصل به شبکه خارجی به عنوان بخشی از VRF انجام داد. نمونه‌های زیر این پیکربندی را پوشش می‌دهند.

گزینه دیگر قرار دادن رابط tun/tap در یک VRF است. این کار می‌تواند با یک up-script انجام شود که از دستور ip link set نشان‌داده‌شده در زیر استفاده می‌کند.

ایجاد VRF با نام vrf_external و نگاشت آن به جدول مسیریابی 1023

ip link add vrf_external type vrf table 1023

انتقال eth0 به داخل vrf_external

ip link set master vrf_external dev eth0

هرگونه پیشوند پیکربندی‌شده روی eth0 از جدول مسیریابی :code`main` به جدول مسیریابی 1023 منتقل خواهد شد

برای توزیع‌های بر پایه دبیان، بسته ifupdown2 تقریباً یک جایگزین مستقیم برای ifupdown به همراه VRFها و قابلیت‌های دیگر ارائه می‌دهد. پیکربندی برای رابط eth0 که بخشی از VRF با نام code:vrf_external باشد می‌تواند به این صورت باشد:

auto eth0
iface eth0
    address 192.0.2.42/24
    address 2001:db8:08:15::42/64
    gateway 192.0.2.1
    gateway 2001:db8:08:15::1
    vrf vrf_external
auto vrf_external
iface vrf_external
    vrf-table 1023

پیکربندی OpenVPN باید شامل این خط باشد:

bind-dev vrf_external

ویکی‌پدیا صفحه مناسبی درباره VRFها دارد: https://en.wikipedia.org/wiki/Virtual_routing_and_forwarding

این ارائه از بخش شبکه FrOSCon 2018 نمایی کلی از قابلیت‌های پیشرفته لایه ۲ و لایه ۳ لینوکس ارائه می‌دهد

برنامه OpenVPN می‌تواند اسکریپت‌های خارجی را در مراحل مختلف چرخه حیات فرایند OpenVPN اجرا کند.

1.
--dns-updown

پس از مقیدسازی سوکت TCP/UDP و باز شدن TUN/TAP، پیش از --up اجرا می‌شود.

2.
--up

پس از مقیدسازی سوکت TCP/UDP و باز شدن TUN/TAP، پس از --dns-updown اجرا می‌شود.

3.
--tls-verify

زمانی اجرا می‌شود که هنوز همتای دوردست غیرقابل‌اعتماد است.

4.
--ipchange

پس از احراز هویت اتصال، یا تغییر آدرس IP دوردست اجرا می‌شود.

5.
--client-connect

در حالت --mode server بلافاصله پس از احراز هویت کلاینت اجرا می‌شود.

6.
--route-up

پس از احراز هویت اتصال، بلافاصله یا پس از چند ثانیه مشخص‌شده توسط گزینه --route-delay اجرا می‌شود.

7.
--route-pre-down

درست پیش از حذف مسیرها اجرا می‌شود.

8.
--client-disconnect

در حالت --mode server هنگام خاموش شدن یا قطع کلاینت اجرا می‌شود.

9.
--dns-updown

پیش از بسته شدن TCP/UDP و TUN/TAP، پیش از --down اجرا می‌شود.

10.
--down

پس از بسته شدن TCP/UDP و TUN/TAP، پس از --dns-updown اجرا می‌شود.

11.
--learn-address

در حالت --mode server هر زمان که یک آدرس/مسیر IP یا آدرس MAC به جدول مسیریابی داخلی OpenVPN اضافه شود اجرا می‌گردد.

12.
--auth-user-pass-verify

در حالت --mode server در اتصال‌های جدید کلاینت، زمانی که کلاینت هنوز غیرقابل‌اعتماد است اجرا می‌شود.

13.
--client-crresponse
در حالت --mode server هر زمان که یک کلاینت پیام CR_RESPONSE ارسال کند اجرا می‌شود.

--auth-user-pass-verify args
کلاینت را ملزم به ارائه نام‌کاربری/گذرواژه (احتمالاً علاوه بر گواهی کلاینت) برای احراز هویت می‌کند.

نحو معتبر:

auth-user-pass-verify cmd method

برنامه OpenVPN دستور cmd را برای اعتبارسنجی نام‌کاربری/گذرواژه ارائه‌شده توسط کلاینت اجرا می‌کند.

بخش cmd شامل مسیر یک اسکریپت (یا برنامه اجرایی) است که می‌تواند با آرگومان‌های اختیاری همراه باشد. مسیر و آرگومان‌ها می‌توانند در نقل‌قول‌های تکی یا دوتایی قرار گیرند و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از یکدیگر جدا شوند.

اگر method روی via-env تنظیم شود، OpenVPN دستور cmd را با متغیرهای محیطی username و password که روی رشته‌های نام‌کاربری/گذرواژه ارائه‌شده توسط کلاینت تنظیم شده‌اند فراخوانی می‌کند. توجه داشته باشید که این روش در پلتفرم‌هایی که محیط فرایند را برای سایر فرایندهای غیرممتاز قابل‌مشاهده می‌کنند ناامن است.

اگر method روی via-file تنظیم شود، OpenVPN نام‌کاربری و گذرواژه را در دو خط نخست یک فایل موقت می‌نویسد. نام فایل به عنوان یک آرگومان به cmd داده می‌شود، و فایل پس از بازگشت اسکریپت به‌طور خودکار توسط OpenVPN حذف خواهد شد. مکان فایل موقت توسط گزینه --tmp-dir کنترل می‌شود. برای امنیت، تنظیم آن روی یک رسانه ذخیره‌سازی فرار مانند /dev/shm (در صورت وجود) را در نظر بگیرید تا از نوشته شدن فایل نام‌کاربری/گذرواژه روی دیسک سخت جلوگیری شود.

اسکریپت باید نام‌کاربری و گذرواژه را بررسی کند، و در صورت پذیرش درخواست احراز هویت کلاینت کد خروج موفقیت‌آمیز (0)، برای رد کلاینت کد شکست (1)، یا برای به تعویق انداختن احراز هویت کد (2) را بازگرداند. اگر احراز هویت به تعویق بیفتد، اسکریپت باید یک عملیات پس‌زمینه یا غیرمسدودکننده دیگر را اجرا/فورک کند تا احراز هویت در پس‌زمینه ادامه یابد. پس از اتمام احراز هویت، مقدار 1 یا 0 باید در فایل مشخص‌شده توسط auth_control_file نوشته شود.

اگر فایل مشخص‌شده توسط auth_failed_reason_file وجود داشته باشد و دارای محتوای غیرخالی باشد، محتوای این فایل به عنوان پیام AUTH_FAILED استفاده می‌شود. برای جلوگیری از شرایط رقابتی، این فایل باید پیش از auth_control_file نوشته شود.

این دلیل شکست احراز هویت می‌تواند عبارتی ساده مانند "User has been permanently disabled" باشد، اما پیام‌های شکست احراز هویت ویژه دیگری نیز وجود دارند.

پیام TEMP نشان می‌دهد که احراز هویت موقتاً ناموفق بوده و کلاینت باید تلاش مجدد برای اتصال را ادامه دهد. سرور می‌تواند اختیاری پیامی خوانا برای کاربر ارائه دهد و نحوه اقدام را به کلاینت راهنمایی کند. کلیدواژه‌های پیام AUTH_FAILED,TEMP مقادیر/کلیدهای جداشده با ویرگول هستند و نحوه اقدام را به کلاینت نشان می‌دهند. کلیدواژه‌های تعریف‌شده فعلی عبارتند از:

به کلاینت دستور می‌دهد حداقل s ثانیه پیش از تلاش بعدی برای اتصال صبر کند. اگر کلاینت از قبل تأخیر بیشتری برای اتصال مجدد استفاده می‌کرد، این تأخیر کوتاه‌تر نخواهد شد.
به کلاینت دستور می‌دهد به آدرس (IP) بعدی سرور فعلی متصل شود.
به کلاینت دستور می‌دهد از باقی آدرس‌های IP سرور فعلی صرف‌نظر کرده و به سرور بعدی مشخص‌شده در فایل پیکربندی متصل شود.
به کلاینت دستور می‌دهد اتصال مجدد به همان سرور را تکرار کند.

برای مثال، پیام TEMP[backoff 42,advance no]: No free IP addresses نشان می‌دهد که اتصال VPN در حال حاضر نمی‌تواند برقرار شود و به کلاینت دستور می‌دهد ۴۲ ثانیه دیگر مجدداً تلاش کند.

هنگام استفاده از احراز هویت معوق، اسکریپت همچنین می‌تواند با نوشتن در فایل مشخص‌شده توسط auth_pending_file درخواست احراز هویت در حال انتظار کند. خط اول باید زمان مهلت (timeout) بر حسب ثانیه باشد، خط دوم روش مورد نیاز (مانند crtext) و خط سوم باید مقادیر EXTRA باشد همان‌طور که در بخش client-pending-auth از فایل doc/management.txt مستند شده است.

این دستورالعمل برای ایجاد رابطی به سبک افزونه جهت گسترش قابلیت‌های احراز هویت OpenVPN طراحی شده است.

برای محافظت در برابر کلاینتی که رشته نام‌کاربری یا گذرواژه مخرب ارسال می‌کند، رشته نام‌کاربری فقط باید شامل این نویسه‌ها باشد: الفبانمایی، زیرخط ('_')، خط تیره ('-')، نقطه ('.') یا ات‌ساین ('@'). رشته گذرواژه می‌تواند شامل هر نویسه قابل‌چاپی به جز CR یا LF باشد. هر نویسه غیرمجاز در رشته نام‌کاربری یا گذرواژه به زیرخط ('_') تبدیل خواهد شد.

تمام اسکریپت‌های تعریف‌شده توسط کاربر باید در نحوه مدیریت این رشته‌ها دقت کنند تا از بروز آسیب‌پذیری‌های امنیتی جلوگیری شود. هرگز از این رشته‌ها به گونه‌ای استفاده نکنید که توسط یک مفسر شل ارزیابی یا گریز داده شوند.

برای مشاهده یک اسکریپت نمونه که احراز هویت PAM را انجام می‌دهد، فایل sample-scripts/auth-pam.pl را در توزیع منبع OpenVPN بررسی کنید.

--client-crresponse
هنگامی که کلاینت یک پاسخ به چالش (challenge response) متنی ارسال می‌کند، اجرا می‌شود.

نحو معتبر:

client-crresponse cmd

برنامه OpenVPN پاسخ کلاینت را در یک پرونده موقت می‌نویسد. نام پرونده به عنوان یک آرگومان به cmd ارسال می‌شود، و پرونده پس از بازگشت اسکریپت به صورت خودکار توسط OpenVPN حذف خواهد شد.

پاسخ دقیقاً همان‌طور که از کلاینت آمده ارسال می‌شود. اسکریپت باید خودش بررسی کند که آیا ورودی معتبر است یا خیر، برای مثال آیا ورودی دارای کدگذاری base64 معتبر است یا نه.

اسکریپت می‌تواند نتیجه اعتبارسنجی را مستقیماً در auth_control_file بنویسد یا آن را بیشتر به تعویق بیندازد. برای جزئیات به `--auth-user-pass-verify`` مراجعه کنید.

برای یک اسکریپت نمونه که احراز هویت دو مرحله‌ای مبتنی بر TOTP (RFC 6238) را پیاده‌سازی می‌کند، sample-scripts/totpauth.py را ببینید.

--client-connect cmd
اجرای دستور cmd هنگام اتصال کلاینت.

cmd شامل یک مسیر به یک اسکریپت (یا برنامه اجرایی) است که به صورت اختیاری آرگومان‌هایی به دنبال آن می‌آیند. مسیر و آرگومان‌ها می‌توانند داخل کوتیشن تکی یا دوتایی قرار گیرند و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

نام عمومی (common name) و آدرس IP کلاینتِ تازه احراز هویت شده به عنوان متغیرهای محیطی به دستور ارسال می‌شوند (بخش متغیرهای محیطی را در زیر ببینید). همچنین مسیر یک پرونده موقت تازه ایجاد شده به عنوان آخرین آرگومان (پس از هر آرگومان مشخص شده در cmd ) به دستور داده می‌شود، تا توسط دستور جهت ارسال دستورالعمل‌های پرونده پیکربندی تولید شده به صورت پویا به OpenVPN استفاده شود.

اگر اسکریپت بخواهد یک پرونده پیکربندی پویا برای اعمال روی سرور هنگام اتصال کلاینت تولید کند، باید آن را در پرونده‌ای که نامش در آخرین آرگومان مشخص شده بنویسد.

برای گزینه‌هایی که می‌توانند به صورت مجاز در یک پرونده پیکربندی تولید شده به صورت پویا استفاده شوند، گزینه --client-config-dir را در زیر ببینید.

توجه داشته باشید که مقدار بازگشتی script مهم است. اگر script یک وضعیت خطای غیر صفر برگرداند، باعث قطع اتصال کلاینت خواهد شد.

اگر یک --client-connect بخواهد تولید پیکربندی را به تعویق بیندازد، اسکریپت باید از متغیرهای محیطی client_connect_deferred_file و client_connect_config_file استفاده کند و وضعیت را بر این اساس در این پرونده‌ها بنویسد. برای جزئیات بیشتر به بخش متغیرهای محیطی مراجعه کنید.

--client-disconnect cmd
مشابه --client-connect اما هنگام خاموش شدن نمونه کلاینت فراخوانی می‌شود. فراخوانی نخواهد شد مگر اینکه اسکریپت و پلاگین‌های --client-connect (در صورت تعریف شدن) پیش‌تر روی این نمونه با وضعیت بازگشتی موفقیت‌آمیز (0) فراخوانی شده باشند.

استثنای این قاعده زمانی است که دستور یا پلاگین‌های --client-disconnect به صورت آبشاری (cascaded) باشند، و حداقل یکی از توابع client-connect موفق شده باشد؛ در این حالت همه توابع client-disconnect برای اسکریپت‌ها و پلاگین‌ها هنگام حذف شیء نمونه کلاینت فراخوانی خواهند شد، حتی در مواردی که برخی از توابع مرتبط client-connect وضعیت خطا برگردانده باشند.

هیچ آرگومان اضافی به دستور --client-disconnect ارسال نمی‌شود (تنها همان آرگومان‌های مشخص شده در cmd، در صورت وجود).

--dns-updown cmd
اجرای دستور cmd، به جای دستور پیش‌فرض DNS up/down که همراه با openvpn ارائه می‌شود. اگر cmd برابر با disable باشد، دستور --dns-updown اجرا نمی‌شود.

اگر دستور اختصاصی خود را می‌نویسید، لطفاً مطمئن شوید که پروفایل‌های سرور --dns غیرقابل اعمال نادیده گرفته شوند. تنظیمات درگاه، DNSSEC و انتقال امن باید رعایت شوند. اگر split DNS امکان‌پذیر نباشد، می‌توان از تغییر مسیر کامل (full redirect) به عنوان یک راهکار جایگزین استفاده کرد. اگر پیکربندی همه آدرس‌های سرور یا دامنه‌های جستجو امکان‌پذیر نباشد، آن‌ها را به همان ترتیبی که فهرست شده‌اند اعمال کنید.

توجه داشته باشید که --dns-updown در همه پلتفرم‌ها پشتیبانی نمی‌شود. در Windows تنظیم DNS همیشه توسط سرویس انجام خواهد شد. در Android تنظیم DNS از طریق رابط مدیریتی منتقل می‌شود.

توجه داشته باشید که در صورت عدم وجود گزینه‌های --dns، ممکن است --dhcp-optionهای مربوط به DNS تبدیل شوند تا برای این قلاب در دسترس باشند. اگر هرگونه گزینه --dns server وجود داشته باشد، --dhcp-optionهای مربوط به DNS همیشه نادیده گرفته خواهند شد. اگر یک اسکریپت --up تعریف شده باشد، متغیرهای محیطی foreign_option از گزینه‌های --dns تولید شده و به اسکریپت ارسال می‌شوند. در صورت تعریف اسکریپت --up، دستور پیش‌فرض --dns-updown اجرا نمی‌شود. هر دوی این کارها برای سازگاری با گذشته انجام شده است. در صورتی که می‌خواهید حتی با وجود تعریف --up دستور --dns-updown اجرا شود، می‌توانید یک دستور سفارشی تعریف کنید یا از force به عنوان cmd برای اجرای دستور پیش‌فرض استفاده کنید. در این حالت هیچ متغیر محیطی DNS به --up ارسال نخواهد شد.

اجرای دستور cmd پس از بسته شدن دستگاه TUN/TAP (پس از تغییر UID با --user و/یا --chroot ). cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که به صورت اختیاری آرگومان‌هایی به دنبال آن می‌آیند. مسیر و آرگومان‌ها می‌توانند داخل کوتیشن تکی یا دوتایی قرار گیرند و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

با همان پارامترها و متغیرهای محیطی گزینه --up در بالا فراخوانی می‌شود.

توجه داشته باشید که اگر با استفاده از --user و/یا --group سطح دسترسی را کاهش دهید، اسکریپت --down شما نیز با دسترسی کاهش‌یافته اجرا خواهد شد.

--down-pre
فراخوانی دستور/اسکریپت --down قبل از بسته شدن TUN/TAP، به جای بعد از آن.
اجرای دستور cmd هنگامی که نشانی IP راه دور ما برای نخستین بار احراز هویت شده یا تغییر می‌کند.

cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که به صورت اختیاری می‌تواند با آرگومان‌ها همراه شود. مسیر و آرگومان‌ها می‌توانند درون نقل‌قول تکی یا جفتی قرار گرفته و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از یکدیگر جدا شوند.

هنگام اجرای cmd، دو آرگومان پس از هر آرگومان مشخص‌شده در cmd به صورت زیر افزوده می‌شوند:

cmd ip address port number

از --ipchange در حالت --mode server استفاده نکنید. به جای آن از یک اسکریپت --client-connect استفاده کنید.

برای پارامترهای اضافی ارسالی به عنوان متغیرهای محیطی، بخش متغیرهای محیطی در زیر را ببینید.

اگر در محیطی با نشانی‌های IP پویا کار می‌کنید که نشانی IP هر یک از طرفین می‌تواند بدون اطلاع قبلی تغییر کند، می‌توانید برای نمونه از این اسکریپت برای ویرایش پرونده /etc/hosts با نشانی فعلی طرف مقابل استفاده کنید. این اسکریپت هر بار که همتای راه دور نشانی IP خود را تغییر دهد اجرا خواهد شد.

به همین ترتیب اگر نشانی IP ما به دلیل DHCP تغییر کند، باید اسکریپت تغییر نشانی IP خود را (صفحه راهنمای dhcpcd(8) را ببینید) به گونه‌ای پیکربندی کنیم تا یک سیگنال SIGHUP یا SIGUSR1 به OpenVPN ارسال کند. سپس OpenVPN اتصال را با آخرین همتای احراز هویت‌شده روی نشانی IP جدیدش دوباره برقرار خواهد کرد.

اجرای دستور cmd برای اعتبارسنجی نشانی‌های مجازی یا مسیرهای کلاینت.

cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که به صورت اختیاری می‌تواند با آرگومان‌ها همراه شود. مسیر و آرگومان‌ها می‌توانند درون نقل‌قول تکی یا جفتی قرار گرفته و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

سه آرگومان به هر آرگومان مشخص در cmd به صورت زیر پیوست خواهد شد:

$1 - [عملیات]
"add"، "update" یا "delete" بر اساس اینکه نشانی به جدول مسیریابی درونی OpenVPN افزوده، ویرایش یا از آن حذف شده است یا خیر.
$2 - [نشانی]
نشانی‌ای که در حال یادگیری یا فراموش‌شدن است. این مقدار می‌تواند شامل موارد زیر باشد:
  • یک نشانی IPv4 مانند "198.162.10.14"،
  • یک زیرشبکه IPv4 مانند "198.162.10.0/24"،
  • یک نشانی IPv6 مانند "2001:db8:1:2:3:4:5:6"،
  • یک زیرشبکه IPv6 مانند "2001:db8:1:2:3:4:5::/112"، یا
  • یک نشانی اترنت MAC (هنگامی که --dev tap استفاده می‌شود) مانند "00:FF:01:02:03:04".
$3 - [نام عمومی]
نام عمومی (Common Name) روی گواهی مرتبط با کلاینت متصل به این نشانی. تنها برای عملیات‌های "add" یا "update" وجود دارد، نه "delete".

در متدهای "add" یا "update"، اگر اسکریپت کد خطایی (غیرصفر) بازگرداند، OpenVPN نشانی را رد کرده و جدول مسیریابی درونی خود را تغییر نخواهد داد.

به طور معمول، اسکریپت cmd از اطلاعات ارائه‌شده در بالا برای تنظیم ورودی‌های مناسب دیواره آتش روی رابط TUN/TAP مربوط به VPN استفاده می‌کند. از آنجا که OpenVPN ارتباط بین نشانی مجازی IP یا MAC و نام عمومی احراز هویت‌شده کلاینت را فراهم می‌کند، به اسکریپت تعریف‌شده توسط کاربر امکان می‌دهد تا سیاست‌های دسترسی دیواره آتش را بر اساس نام عمومی سطح‌بالای کلاینت، به جای نشانی‌های مجازی سطح‌پایین کلاینت پیکربندی کند.

اتصال یک کلاینت دارای پشته دوگانه (dual-stack) به سرور دوپشته‌ای باعث دو بار فراخوانی پشت سر هم اسکریپت cmd خواهد شد، زیرا سرور هر یک از نشانی‌های IPv4 و IPv6 کلاینت را یاد می‌گیرد.

--route-up cmd
اجرای دستور cmd پس از افزودن مسیرها، منوط به --route-delay.

cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که به صورت اختیاری می‌تواند با آرگومان‌ها همراه شود. مسیر و آرگومان‌ها می‌توانند درون نقل‌قول تکی یا جفتی قرار گرفته و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

برای پارامترهای اضافی ارسالی به عنوان متغیرهای محیطی، بخش متغیرهای محیطی در زیر را ببینید.

--route-pre-down cmd
اجرای دستور cmd پیش از حذف مسیرها هنگام قطع اتصال.

cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که به صورت اختیاری می‌تواند با آرگومان‌ها همراه شود. مسیر و آرگومان‌ها می‌توانند درون نقل‌قول تکی یا جفتی قرار گرفته و/یا با استفاده از بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

برای پارامترهای اضافی ارسالی به عنوان متغیرهای محیطی، بخش متغیرهای محیطی در زیر را ببینید.

تنظیم یک متغیر محیطی سفارشی name=value برای ارسال به اسکریپت.

نحوهای معتبر:

setenv name value
setenv FORWARD_COMPATIBLE 1
setenv opt config_option

با تنظیم FORWARD_COMPATIBLE روی 1، بررسی نحو پرونده پیکربندی ساده‌تر می‌شود به طوری که دستورالعمل‌های ناشناخته به جای خطای مهلک، هشدار صادر می‌کنند، بر این فرض که دستورالعمل ناشناخته مفروض ممکن است در نسخه‌های آینده OpenVPN معتبر باشد.

این گزینه باید با احتیاط استفاده شود، زیرا دلایل امنیتی موجهی برای متوقف شدن OpenVPN در صورت شناسایی مشکلات در یک پرونده پیکربندی وجود دارد. با این حال، دلایل معتبری نیز برای کاهش ملایم کارایی ویژگی‌های جدید نرم‌افزار هنگام مواجهه با نسخه‌های قدیمی‌تر نرم‌افزار وجود دارد.

همچنین امکان برچسب‌گذاری یک دستورالعمل مشخص وجود دارد تا در صورت عدم شناسایی آن، خطای مهلکی رخ ندهد. برای انجام این کار، عبارت زیر را پیش از دستورالعمل قرار دهید: setenv opt

نسخه‌های پیش از OpenVPN 2.3.3 همیشه گزینه‌های تنظیم‌شده با دستورالعمل setenv opt را نادیده می‌گیرند.

همچنین --ignore-unknown-option را ببینید.

--setenv-safe args
تنظیم یک متغیر محیطی سفارشی OPENVPN_name با مقدار value برای ارسال به اسکریپت‌ها.

نحو معتبر:

setenv-safe name value

این دستورالعمل برای ارسال (push) از سمت سرور به کلاینت‌ها طراحی شده است، و افزودن پیشوند OPENVPN_ به متغیر محیطی یک اقدام احتیاطی برای جلوگیری از حملاتی از نوع LD_PRELOAD توسط یک سرور مخرب یا آسیب‌دیده است.

اجرای دستور cmd برای اعتبارسنجی نام X509 یک اتصال TLS در حال انتظار که سایر آزمون‌های گواهی را پشت سر گذاشته است (به‌جز ابطال از طریق دستورالعمل --crl-verify؛ آزمون ابطال پس از آزمون --tls-verify رخ می‌دهد).

دستور cmd باید برای مجاز کردن ادامه دست‌تکانی TLS مقدار 0 و برای شکست مقدار 1 را برگرداند.

دستور cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که می‌تواند با آرگومان‌هایی دنبال شود. مسیر و آرگومان‌ها ممکن است در نقل‌قول تکی یا دوتایی قرار گیرند و/یا با بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

هنگامی که cmd اجرا می‌شود، دو آرگومان پس از هر آرگومانی که در cmd مشخص شده باشد، به صورت زیر اضافه می‌شود:

cmd certificate_depth subject

این آرگومان‌ها به ترتیب عبارتند از عمق فعلی گواهی و نام متمایز موضوع (subject dn) گواهی X509 طرف مقابل.

این قابلیت زمانی مفید است که طرف مقابل که می‌خواهید به آن اعتماد کنید گواهی‌ای دارد که توسط مرجع صدور گواهی امضا شده است که گواهی‌های بسیار دیگری را نیز امضا کرده است، در حالی که لزوماً نمی‌خواهید به همه آنها اعتماد کنید، بلکه ترجیح می‌دهید در پذیرش گواهی طرف مقابل گزینشی عمل کنید. این قابلیت به شما امکان می‌دهد اسکریپتی بنویسید که نام X509 را در یک گواهی آزمایش کرده و تصمیم بگیرد که آیا باید پذیرفته شود یا خیر. برای یک اسکریپت ساده perl که فیلد نام عمومی (common name) را روی گواهی آزمایش می‌کند، فایل verify-cn را در توزیع OpenVPN ببینید.

برای پارامترهای بیشتر که به عنوان متغیرهای محیطی ارسال می‌شوند، بخش Environmental Variables را در زیر ببینید.

افزودن متغیر محیطی peer_cert هنگام فراخوانی اسکریپت --tls-verify یا اجرای قلاب افزونه OPENVPN_PLUGIN_TLS_VERIFY برای اعتبارسنجی گواهی.

این متغیر محیطی شامل مسیر یک گواهی با کدبندی PEM از گواهی طرف مقابل فعلی در پوشه dir است.

اجرای دستور cmd پس از باز شدن موفقیت‌آمیز دستگاه TUN/TAP (پیش از تغییر UID گزینه --user).

دستور cmd شامل مسیری به یک اسکریپت (یا برنامه اجرایی) است که می‌تواند با آرگومان‌هایی دنبال شود. مسیر و آرگومان‌ها ممکن است در نقل‌قول تکی یا دوتایی قرار گیرند و/یا با بک‌اسلش گریز داده شوند، و باید با یک یا چند فاصله از هم جدا شوند.

دستور up برای مشخص کردن دستورات مسیریابی که ترافیک IP به مقصد زیرشبکه‌های خصوصی واقع در سمت دیگر اتصال VPN را به درون تونل هدایت می‌کنند، کاربرد دارد.

برای --dev tun به این صورت اجرا می‌شود:

cmd tun_dev tun_mtu 0 ifconfig_local_ip ifconfig_remote_ip [init | restart]

برای --dev tap به این صورت اجرا می‌شود:

cmd tap_dev tap_mtu 0 ifconfig_local_ip ifconfig_netmask [init | restart]

برای پارامترهای بیشتر که به عنوان متغیرهای محیطی ارسال می‌شوند، بخش Environmental Variables را در زیر ببینید. آرگومان 0 قبلاً link_mtu بوده است که دیگر به اسکریپت‌ها ارسال نمی‌شود - برای حفظ ترتیب آرگومان‌ها، با 0 جایگزین شده است.

توجه داشته باشید که اگر cmd شامل آرگومان‌هایی باشد، تمام آرگومان‌های تولیدشده توسط OpenVPN به آن‌ها الحاق می‌شوند تا فهرست آرگومانی ساخته شود که برنامه اجرایی با آن فراخوانی خواهد شد.

معمولاً cmd اسکریپتی را برای افزودن مسیرها به تونل اجرا می‌کند.

به‌طور معمول اسکریپت up پس از باز شدن دستگاه TUN/TAP فراخوانی می‌شود. در این زمینه، آخرین پارامتر خط فرمان ارسالی به اسکریپت init. خواهد بود. اگر از گزینه --up-restart نیز استفاده شود، اسکریپت up برای راه‌اندازی‌های مجدد نیز فراخوانی خواهد شد. راه‌اندازی مجدد به عنوان مقداردهی اولیه جزئی مجدد OpenVPN در نظر گرفته می‌شود که در آن نمونه TUN/TAP حفظ می‌گردد (گزینه --persist-tun این حفظ را فعال می‌کند). راه‌اندازی مجدد می‌تواند توسط سیگنال SIGUSR1، اتمام مهلت زمان --ping-restart، یا بازنشانی اتصال هنگامی که پروتکل TCP با گزینه --proto فعال است رخ دهد. اگر راه‌اندازی مجدد رخ دهد، و --up-restart مشخص شده باشد، اسکریپت up با restart به عنوان آخرین پارامتر فراخوانی خواهد شد.

هنگام راه‌اندازی مجدد، OpenVPN مجموعه کامل متغیرهای محیطی را به اسکریپت ارسال نمی‌کند. به‌ویژه، هیچ‌چیز مربوط به مسیریابی و درگاه‌ها ارسال نخواهد شد، زیرا در هر صورت نیازی به انجام کاری نیست - تمام پیکربندی‌های مسیریابی از قبل برقرار هستند. علاوه بر این، اسکریپت up-restart با تنظیمات تقلیل‌یافته UID/GID اجرا خواهد شد (در صورت پیکربندی).

مثال مستقل زیر نحوه فراخوانی اسکریپت --up را هم در زمینه مقداردهی اولیه و هم راه‌اندازی مجدد نشان می‌دهد. (NOTE: به دلایل امنیتی، مثال زیر را اجرا نکنید مگر اینکه درگاه UDP 9999 توسط دیوار آتش شما مسدود شده باشد. همچنین، مثال به طور نامحدود اجرا خواهد شد، بنابراین باید با control-c آن را متوقف کنید).

openvpn --dev tun --port 9999 --verb 4 --ping-restart 10 \
        --up 'echo up' --down 'echo down' --persist-tun  \
        --up-restart

توجه داشته باشید که OpenVPN همچنین گزینه --ifconfig را برای اعمال خودکار ifconfig روی دستگاه TUN فراهم می‌کند، که نیاز به تعریف اسکریپت --up را برطرف می‌سازد، مگر اینکه بخواهید مسیرها را نیز در اسکریپت --up پیکربندی کنید.

اگر --ifconfig نیز مشخص شده باشد، OpenVPN نقاط انتهایی محلی و دوردست ifconfig را در خط فرمان به اسکریپت --up ارسال می‌کند تا بتوان از آن‌ها برای پیکربندی مسیرهایی مانند زیر استفاده کرد:

route add -net 10.0.0.0 netmask 255.255.255.0 gw $5
--up-delay
به تاخیر انداختن باز شدن TUN/TAP و اجرای احتمالی اسکریپت --up تا پس از برقراری اتصال TCP/UDP با همتا (peer).

در حالت --proto udp، این گزینه معمولاً نیازمند استفاده از --ping است تا شروع اتصال در غیاب داده‌های تونل شناسایی شود، چرا که UDP یک پروتکل "بدون اتصال (connectionless)" است.

در ویندوز، این گزینه تغییر وضعیت رسانه TAP-Win32 به "connected" را تا زمان برقراری اتصال، یعنی دریافت اولین بسته احراز هویت شده از همتا به تاخیر می‌اندازد.

--up-restart
فعال کردن فراخوانی اسکریپت‌های --up و --down برای راه‌اندازی‌های مجدد و همچنین شروع اولیه برنامه. این گزینه به طور کامل‌تر در بالا در مستندات گزینه --up توضیح داده شده است.

در موارد خاص، OpenVPN نویسه‌ها را در رشته‌ها بازنگاشت (remapping) می‌کند. در اصل، هر نویسه‌ای خارج از مجموعه نویسه‌های مجاز برای هر نوع رشته، به خط زیر ('_') تبدیل خواهد شد.

پرسش: چرا نگاشت مجدد رشته ضروری است؟
این یک ویژگی امنیتی مهم برای جلوگیری از کدگذاری مخرب رشته‌ها از منابع غیرقابل اعتماد است تا به عنوان آرگومان به اسکریپت‌ها ارسال نشوند، در متغیرهای محیطی ذخیره نشوند، به عنوان نام مشترک استفاده نشوند، به نام پرونده ترجمه نشوند، و غیره.
پرسش: آیا نگاشت مجدد رشته می‌تواند غیرفعال شود؟
خیر. گزینه‌های --no-name-remapping و --compat-names در نگارش 2.5 حذف شده‌اند زیرا بیش از حد ناامن در نظر گرفته می‌شدند.

در اینجا مرور کوتاهی از انواع رشته‌های کنونی OpenVPN و دسته نویسه‌های مجاز برای هر رشته آورده شده است:

نام‌های X509
حروف و ارقام، خط زیر ('_')، خط تیره ('-')، نقطه ('.')، ات‌ساین ('@')، دونقطه (':')، اسلش ('/')، و مساوی ('='). نویسه حرفی-عددی (Alphanumeric) به عنوان نویسه‌ای تعریف می‌شود که باعث بازگرداندن مقدار true توسط تابع isalnum() در کتابخانه C شود.
نام‌های مشترک (Common Names)
حروف و ارقام، خط زیر ('_')، خط تیره ('-')، نقطه ('.')، و ات‌ساین ('@').
نام کاربری --auth-user-pass
مشابه نام مشترک، با یک استثنا: نام کاربری به صورت خام و بدون نگاشت مجدد رشته به افزونه OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY ارسال می‌شود.
گذرواژه --auth-user-pass
هر نویسه "قابل چاپ" به جز CR یا LF. نویسه قابل چاپ به عنوان نویسه‌ای تعریف می‌شود که باعث بازگرداندن مقدار true توسط تابع isprint() در کتابخانه C شود.
نام پرونده --client-config-dir مشتق‌شده از common name یا username
حروف و ارقام، خط زیر ('_')، خط تیره ('-')، ات‌ساین ('@')، و نقطه ('.') به جز "." یا ".." به عنوان رشته‌های مستقل.
نام‌های متغیرهای محیطی
حروف و ارقام یا خط زیر ('_').
مقادیر متغیرهای محیطی
هر نویسه قابل چاپ.

برای تمام موارد، نویسه‌های موجود در یک رشته که عضو دسته نویسه‌های مجاز برای آن نوع رشته نیستند، به خط زیر ('_') بازنگاشت خواهند شد.

پس از تنظیم، یک متغیر به طور نامحدود باقی می‌ماند تا زمانی که با یک مقدار جدید یا راه‌اندازی مجدد بازنشانی شود،

در حالت سرور، دامنه متغیرهای محیطی تنظیم‌شده توسط OpenVPN بر اساس اشیاء کلاینت مرتبط با آن‌ها مشخص می‌شود، بنابراین نباید هیچ مشکلی در دسترسی اسکریپت‌ها به متغیرهای قدیمی و از پیش تنظیم‌شده که به نمونه‌های مختلف کلاینت ارجاع دارند وجود داشته باشد.

تعداد کل بایت‌های دریافت شده از کلاینت در طول نشست VPN. پیش از اجرای اسکریپت --client-disconnect مقداردهی می‌شود.
تعداد کل بایت‌های ارسال شده به کلاینت در طول نشست VPN. پیش از اجرای اسکریپت --client-disconnect مقداردهی می‌شود.
مسیر پرونده پیکربندی که باید توسط اسکریپت --client-connect در آن نوشته شود (اختیاری، در صورتی که پیکربندی مجزا برای هر نشست مد نظر باشد). این همان نام پرونده‌ای است که از طریق آرگومان خط فرمان در هنگام فراخوانی اسکریپت --client-connect ارسال می‌شود.
این پرونده می‌تواند به صورت اختیاری برای اعلام کد وضعیت اسکریپت یا افزونه --client-connect نوشته شود. فقط اولین نویسه در پرونده اهمیت دارد. این نویسه باید یا 1 برای نشان دادن اجرای عادی اسکریپت باشد، 0 نشان‌دهنده خطا است (همانند وضعیت خروج غیر صفر) یا 2 برای نشان دادن این که اسکریپت بازگرداندن پرونده پیکربندی را به تعویق انداخته است.

برای رسیدگی معوق (پس‌زمینه)، اسکریپت یا افزونه حتماً باید 2 را در پرونده بنویسد تا تعویق را اعلام کند و سپس با کد خروج 0 بازگردد تا پیام deferred handler started OK را مخابره کند.

سپس یک فرایند پس‌زمینه یا مشابه آن باید وظیفه نوشتن پیکربندی در پرونده مشخص‌شده توسط متغیر محیطی client_connect_config_file را به عهده بگیرد و پس از اتمام، مقدار 1 (یا در صورت بروز خطا 0) را در این پرونده بنویسد.

نبود هرگونه نویسه در پرونده هنگام پایان اجرای اسکریپت، همانند 1 تفسیر می‌شود. این به اسکریپت‌هایی که برای پشتیبانی از سازوکار تعویق نوشته نشده‌اند اجازه می‌دهد تا بدون تغییر مورد استفاده قرار گیرند.

نام عمومی (common name) مربوط به X509 یک کلاینت احراز هویت شده. پیش از اجرای اسکریپت‌های --client-connect، --client-disconnect و --auth-user-pass-verify تنظیم می‌شود.
config
نام نخستین پروندهٔ --config. هنگام راه‌اندازی برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
daemon
اگر دستورالعمل --daemon مشخص شده باشد روی "1" و در غیر این صورت روی "0" تنظیم می‌شود. هنگام راه‌اندازی برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
اگر دستورالعمل‌های --log یا --log-append مشخص شده باشند روی "1" و در غیر این صورت روی "0" تنظیم می‌شود. هنگام راه‌اندازی برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
dev
نام واقعی دستگاه TUN/TAP، شامل شمارهٔ واحد در صورت وجود. پیش از اجرای اسکریپت‌های --up یا --down تنظیم می‌شود.
در ویندوز، نمایهٔ (index) دستگاه مربوط به آداپتور TUN/TAP (جهت استفاده در فراخوانی‌های netsh.exe که گاهی با نام‌های رابط به درستی کار نمی‌کنند). پیش از اجرای اسکریپت‌های --up یا --down تنظیم می‌شود.
گزینه‌های پیکربندی --dns از طریق این مجموعه از متغیرهای محیطی در دسترس اجرای --dns-updown قرار خواهند گرفت. متغیرها تنها در صورتی پدیدار می‌شوند که به گزینهٔ مربوطه مقداری تخصیص داده شده باشد. برای آگاهی از مفهوم دقیق هر متغیر، لطفاً به مستندات --dns مراجعه کنید.
dns_search_domain_{n}
dns_server_{n}_address_{m}
dns_server_{n}_port_{m}
dns_server_{n}_resolve_domain_{m}
dns_server_{n}_dnssec
dns_server_{n}_transport
dns_server_{n}_sni
گزینه‌ای که از طریق --push به کلاینتی ارسال (push) شده که به طور بومی از آن پشتیبانی نمی‌کند، مانند --dhcp-option در یک سیستم غیرویندوزی، پیش از اجرای اسکریپت --up در این دنباله از متغیرهای محیطی ذخیره خواهد شد.
نشانی IPv6 محلی نقطهٔ پایانی VPN مشخص‌شده در گزینهٔ --ifconfig-ipv6 (پارامتر اول). پیش از فراخوانی دستورهای ifconfig یا code:netsh (نسخهٔ ویندوزی ifconfig) توسط OpenVPN تنظیم می‌شود که معمولاً قبل از اجرای اسکریپت --up رخ می‌دهد.
طول پیشوند (prefix length) شبکهٔ IPv6 در رابط VPN. مشتق‌شده از پارامتر nnn/ در نشانی IPv6 در گزینهٔ --ifconfig-ipv6 (پارامتر اول). پیش از فراخوانی دستورهای ifconfig یا netsh (نسخهٔ ویندوزی ifconfig) توسط OpenVPN تنظیم می‌شود که معمولاً قبل از اجرای اسکریپت --up رخ می‌دهد.
نشانی IPv6 دوردست (remote) نقطهٔ پایانی VPN مشخص‌شده در گزینهٔ --ifconfig-ipv6 (پارامتر دوم). پیش از فراخوانی دستورهای ifconfig یا netsh (نسخهٔ ویندوزی ifconfig) توسط OpenVPN تنظیم می‌شود که معمولاً قبل از اجرای اسکریپت --up رخ می‌دهد.
نشانی IP محلی نقطهٔ پایانی VPN مشخص‌شده در گزینهٔ --ifconfig (پارامتر اول). پیش از فراخوانی دستورهای ifconfig یا netsh (نسخهٔ ویندوزی ifconfig) توسط OpenVPN تنظیم می‌شود که معمولاً قبل از اجرای اسکریپت --up رخ می‌دهد.
نشانی IP دوردست (remote) نقطهٔ پایانی VPN مشخص‌شده در گزینهٔ --ifconfig (پارامتر دوم) هنگامی که --dev tun استفاده شده باشد. پیش از فراخوانی دستورهای ifconfig یا netsh (نسخهٔ ویندوزی ifconfig) توسط OpenVPN تنظیم می‌شود که معمولاً قبل از اجرای اسکریپت --up رخ می‌دهد.
ماسک زیرشبکهٔ (subnet mask) بخش اترنت مجازی که به عنوان پارامتر دوم در --ifconfig هنگام استفاده از --dev tap مشخص شده است. پیش از فراخوانی دستورهای ifconfig یا netsh (نسخهٔ ویندوزی ifconfig) توسط OpenVPN تنظیم می‌شود که معمولاً قبل از اجرای اسکریپت --up رخ می‌دهد.
نشانی IPv4 مجازی محلی برای تونل TUN/TAP برگرفته از دستورالعمل --ifconfig-push در صورت تعیین، یا در غیر این صورت از استخر ifconfig (کنترل‌شده با دستورالعمل پروندهٔ پیکربندی --ifconfig-pool). تنها برای تونل‌های --dev tun تنظیم می‌شود. این گزینه در کارساز پیش از اجرای اسکریپت‌های --client-connect و --client-disconnect تنظیم می‌شود.
نشانی IPv6 مجازی محلی برای تونل TUN/TAP برگرفته از دستورالعمل --ifconfig-ipv6-push در صورت تعیین، یا در غیر این صورت از استخر ifconfig (کنترل‌شده با دستورالعمل پروندهٔ پیکربندی --ifconfig-ipv6-pool). تنها برای تونل‌های --dev tun تنظیم می‌شود. این گزینه در کارساز پیش از اجرای اسکریپت‌های --client-connect و --client-disconnect تنظیم می‌شود.
نت‌ماسک (netmask) مجازی IPv4 برای تونل TUN/TAP برگرفته از دستورالعمل --ifconfig-push در صورت تعیین، یا در غیر این صورت از استخر ifconfig (کنترل‌شده با دستورالعمل پروندهٔ پیکربندی --ifconfig-pool). تنها برای تونل‌های --dev tap تنظیم می‌شود. این گزینه در کارساز پیش از اجرای اسکریپت‌های --client-connect و --client-disconnect تنظیم می‌شود.
طول پیشوند (prefix length) مجازی IPv6 برای تونل TUN/TAP برگرفته از دستورالعمل --ifconfig-ipv6-push در صورت تعیین، یا در غیر این صورت از استخر ifconfig (کنترل‌شده با دستورالعمل پروندهٔ پیکربندی --ifconfig-ipv6-pool). تنها برای تونل‌های --dev tap تنظیم می‌شود. این گزینه در کارساز پیش از اجرای اسکریپت‌های --client-connect و --client-disconnect تنظیم می‌شود.
نشانی IPv4 مجازی دوردست برای تونل TUN/TAP که در صورت تعیین، از دستورالعمل --ifconfig-push گرفته می‌شود، وگرنه از استخر ifconfig (کنترل‌شده توسط دستورالعمل پرونده پیکربندی --ifconfig-pool). این گزینه پیش از اجرای اسکریپت‌های --client-connect و --client-disconnect روی کارگزار تنظیم می‌شود.
نشانی IPv6 مجازی دوردست برای تونل TUN/TAP که در صورت تعیین، از دستورالعمل --ifconfig-ipv6-push گرفته می‌شود، وگرنه از استخر ifconfig (کنترل‌شده توسط دستورالعمل پرونده پیکربندی --ifconfig-ipv6-pool). این گزینه پیش از اجرای اسکریپت‌های --client-connect و --client-disconnect روی کارگزار تنظیم می‌شود.
REMOVED از OpenVPN 2.6.0 به بعد دیگر به اسکریپت‌ها ارسال نمی‌شود. پیش‌تر حداکثر اندازه بسته (بدون احتساب سربرگ IP) داده‌های تونل در حالت انتقال تونل UDP بود.
local
پارامتر --local. هنگام آغاز برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
شماره یا نام درگاه محلی، مشخص‌شده توسط --port یا --lport. هنگام آغاز برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
گذرواژه ارائه‌شده توسط کارخواه متصل‌شونده. تنها زمانی که تغییردهنده via-env مشخص شده باشد، پیش از اجرای اسکریپت --auth-user-pass-verify تنظیم شده و پس از بازگشت اسکریپت از محیط حذف می‌شود.
اگر گزینه --tls-export-cert فعال باشد، این گزینه شامل مسیر گواهی همتای فعلی برای اعتبارسنجی در قالب PEM است. همچنین آرگومان certificate_depth را در دستور --tls-verify ببینید.
proto
پارامتر --proto. هنگام آغاز برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
پارامتر --remote. هنگام آغاز برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
شماره درگاه دوردست، مشخص‌شده توسط --port یا --rport. هنگام آغاز برنامه تنظیم شده و با SIGHUP بازنشانی می‌شود.
درگاه پیش‌فرض IP موجود از قبل در جدول مسیریابی سیستم. پیش از اجرای اسکریپت --up تنظیم می‌شود.
درگاه پیش‌فرض مورد استفاده گزینه‌های --route، همان‌طور که در گزینه --route-gateway یا پارامتر دوم --ifconfig هنگام تعیین --dev tun مشخص شده است. پیش از اجرای اسکریپت --up تنظیم می‌شود.
مجموعه‌ای از متغیرها که هر مسیر برای اضافه‌شدن را تعریف کرده و پیش از اجرای اسکریپت --up تنظیم می‌شوند.

مقدار parm یکی از موارد network، netmask"، gateway یا metric خواهد بود.

مقدار n شماره مسیر OpenVPN است که از 1 شروع می‌شود.

اگر شبکه یا درگاه نام‌های DNS قابل‌حل باشند، ترجمه نشانی IP آن‌ها به جای نام‌هایشان همان‌طور که در خط فرمان یا پرونده پیکربندی آمده ثبت خواهد شد.

مجموعه‌ای از متغیرها که هر مسیر IPv6 برای اضافه‌شدن را تعریف کرده و پیش از اجرای اسکریپت --up تنظیم می‌شوند.

مقدار parm یکی از موارد network، gateway یا metric خواهد بود. برخلاف IPv4 که در یک متغیر محیطی جداگانه ارسال می‌شود، route_ipv6_network_{n} شامل netmask به صورت /nnn است.

مقدار n شماره مسیر OpenVPN است که از 1 شروع می‌شود.

اگر شبکه یا درگاه نام‌های DNS قابل‌حل باشند، ترجمه نشانی IP آن‌ها به جای نام‌هایشان همان‌طور که در خط فرمان یا پرونده پیکربندی آمده ثبت خواهد شد.

route_redirect_gateway_ipv4

اگر درگاه پیش‌فرض مربوطه باید به داخل تونل هدایت شود روی 1، و اگر قطعه LAN محلی نیز باید مسدود شود (block-local) روی 2 تنظیم می‌شود. در غیر این صورت تنظیم نمی‌شود. پیش از اجرای اسکریپت --up تنظیم می‌شود.
پیش از اجرای اسکریپت up/down روی "init" یا "restart" تنظیم می‌شود. برای اطلاعات بیشتر، مستندات --up را ببینید.
پیش از اجرای هر اسکریپت، این متغیر روی نوع اسکریپت در حال اجرا تنظیم می‌شود. می‌تواند یکی از موارد زیر باشد: up، down، ipchange، route-up، tls-verify، auth-user-pass-verify، client-connect، client-disconnect یا learn-address. پیش از اجرای هر اسکریپت تنظیم می‌شود.
دلیل خروج یا راه‌اندازی مجدد. می‌تواند یکی از موارد sigusr1، sighup، sigterm، sigint، inactive (کنترل‌شده توسط گزینه --inactive)، ping-exit (کنترل‌شده توسط گزینه --ping-exit)، ping-restart (کنترل‌شده توسط گزینه --ping-restart)، connection-reset (تحریک‌شده در بازنشانی اتصال TCP)، error یا unknown (سیگنال نامشخص) باشد. این متغیر دقیقاً پیش از اجرای اسکریپت down تنظیم می‌شود.
برچسب زمانی اتصال کلاینت، قالب‌بندی‌شده به‌صورت یک رشته زمانی خوانا برای انسان. پیش از اجرای اسکریپت --client-connect تنظیم می‌شود.
مدت زمان (به ثانیه) نشست کلاینت که اکنون در حال قطع اتصال است. پیش از اجرای اسکریپت --client-disconnect تنظیم می‌شود.
برچسب زمانی اتصال کلاینت، قالب‌بندی‌شده به‌صورت مقدار صحیح تاریخ/زمان یونیکس. پیش از اجرای اسکریپت --client-connect تنظیم می‌شود.
شامل اثر انگشت SHA1 / SHA256 گواهی، که در آن n سطح اعتبارسنجی است. فقط برای اتصال‌های TLS تنظیم می‌شود. پیش از اجرای اسکریپت --tls-verify تنظیم می‌شود.
مجموعه‌ای از فیلدهای گواهی از همتای دوردست، که در آن n سطح اعتبارسنجی است. فقط برای اتصال‌های TLS تنظیم می‌شود. پیش از اجرای اسکریپت --tls-verify تنظیم می‌شود.
شماره سریال گواهی همتای دوردست، که در آن n سطح اعتبارسنجی است. فقط برای اتصال‌های TLS تنظیم می‌شود. پیش از اجرای اسکریپت --tls-verify تنظیم می‌شود. این مقدار به‌صورت یک رشته ده‌دهی مانند "933971680" است، که برای انجام پرس‌وجوهای OCSP مبتنی بر سریال مناسب است (در OpenSSL، عبارت "0x" را به ابتدای رشته اضافه نکنید). اگر هنگام خواندن مقدار از گواهی مشکلی پیش بیاید، رشته‌ای خالی خواهد بود، بنابراین کد شما باید آن را بررسی کند. اسکریپت contrib/OCSP_check/OCSP_check.sh را برای نمونه ببینید.
مانند tls_serial_{n}، اما در قالب هگزادسیمال (مانند 12:34:56:78:9A).
میزان MTU برای دستگاه TUN/TAP. پیش از اجرای اسکریپت --up یا --down تنظیم می‌شود.
آدرس IP واقعی کلاینت یا همتای متصل‌شونده که احراز هویت شده است. پیش از اجرای اسکریپت‌های --ipchange، --client-connect و --client-disconnect تنظیم می‌شود. در صورت استفاده از نقاط انتهایی ipv6 (مانند udp6، tcp6)، متغیر trusted_ip6 به‌جای آن تنظیم می‌شود.
شماره پورت واقعی کلاینت یا همتای متصل‌شونده که احراز هویت شده است. پیش از اجرای اسکریپت‌های --ipchange، --client-connect و --client-disconnect تنظیم می‌شود.
آدرس IP واقعی کلاینت یا همتای متصل‌شونده که هنوز احراز هویت نشده است. گاهی اوقات برای اجرای nmap روی میزبان متصل‌شونده در یک اسکریپت --tls-verify استفاده می‌شود تا از درستی عملکرد فایروال اطمینان حاصل شود. پیش از اجرای اسکریپت‌های --tls-verify و --auth-user-pass-verify تنظیم می‌شود. در صورت استفاده از نقاط انتهایی ipv6 (مانند udp6، tcp6)، متغیر untrusted_ip6 به‌جای آن تنظیم می‌شود.
شماره پورت واقعی کلاینت یا همتای متصل‌شونده که هنوز احراز هویت نشده است. پیش از اجرای اسکریپت‌های --tls-verify و --auth-user-pass-verify تنظیم می‌شود.
نام کاربری ارائه‌شده توسط کلاینت متصل‌شونده. تنها زمانی پیش از اجرای اسکریپت --auth-user-pass-verify تنظیم می‌شود که اصلاح‌کننده via-env مشخص شده باشد.
یک فیلد موضوع (subject) گواهی X509 از همتای دوردست، که در آن n سطح اعتبارسنجی است. فقط برای اتصال‌های TLS تنظیم می‌شود. پیش از اجرای اسکریپت --tls-verify تنظیم می‌شود. این متغیر مشابه tls_id_{n} است به‌جز اینکه فیلدهای سازنده موضوع X509 تفکیک شده‌اند، و هیچ نگاشت مجددی روی رشته‌های این فیلدها اعمال نمی‌شود (به‌جز نگاشت مجدد نویسه‌های کنترلی به "_"). برای نمونه، متغیرهای زیر روی سرور OpenVPN با استفاده از گواهی نمونه کلاینت در sample-keys (پرونده client.crt) تنظیم خواهند شد. توجه داشته باشید که سطح اعتبارسنجی برای گواهی کلاینت 0 و برای گواهی CA برابر با 1 است.

می‌توانید از گزینه --x509-track برای برون‌ریزی اطلاعات بیشتر یا کمتر از گواهی‌ها استفاده کنید.

X509_0_emailAddress=me@myhost.mydomain
X509_0_CN=Test-Client
X509_0_O=OpenVPN-TEST
X509_0_ST=NA
X509_0_C=KG
X509_1_emailAddress=me@myhost.mydomain
X509_1_O=OpenVPN-TEST
X509_1_L=BISHKEK
X509_1_ST=NA
X509_1_C=KG

برنامه OpenVPN یک واسط مدیریتی مبتنی بر سوکت غنی از ویژگی را برای هر دو حالت عملیاتی سرور و کلاینت فراهم می‌کند.

فعال‌سازی سرور مدیریتی روی سوکت یونیکس socket-name در پلتفرم‌های پشتیبانی‌کننده، یا روی یک درگاه TCP مشخص‌شده.

ساختارهای نحوی معتبر:

management socket-name unix          #
management socket-name unix pw-file  # (recommended)
management IP port                   # (INSECURE)
management IP port pw-file           #

پارامتر pw-file، در صورت مشخص شدن، پرونده گذرواژه‌ای است که گذرواژه در آن باید در سطر اول باشد. به‌جای نام پرونده می‌توان از کلیدواژه stdin استفاده کرد که هنگام شروع OpenVPN، گذرواژه مورد نیاز را از کاربر درخواست می‌کند.

برای سوکت‌های یونیکس، رفتار پیش‌فرض ایجاد یک سوکت دامنه یونیکس است که هر پردازشی می‌تواند به آن متصل شود. از دستورالعمل‌های --management-client-user و --management-client-group برای محدود کردن دسترسی استفاده کنید.

واسط مدیریت یک حالت ویژه فراهم می‌کند که در آن پیوند مدیریتی TCP می‌تواند روی خود تونل کار کند. برای فعال‌سازی این حالت، مقدار IP را روی tunnel تنظیم کنید. حالت تونل باعث می‌شود واسط مدیریت روی آدرس محلی VPN از واسط TUN/TAP به اتصالات TCP گوش فرا دهد.

هنگام فعال‌سازی واسط مدیریت روی TCP *مراقب باشید*. در این موارد باید همیشه از pw-file جهت محافظت واسط مدیریت با گذرواژه استفاده کنید. هر کاربری که بتواند به این IP:port متصل شود، قادر خواهد بود فرآیند OpenVPN را مدیریت، کنترل (و در آن اختلال ایجاد) کند. همچنین اکیداً توصیه می‌شود که IP روی 127.0.0.1 (localhost) تنظیم شود تا دسترسی به سرور مدیریت فقط به کلاینت‌های محلی محدود گردد.

اگرچه درگاه مدیریت برای کنترل برنامه‌ریزی‌شده OpenVPN توسط سایر برنامه‌ها طراحی شده است، اما امکان برقراری ارتباط telnet به این درگاه با استفاده از کلاینت telnet در حالت "raw" وجود دارد. پس از اتصال، عبارت help را برای مشاهده فهرست دستورها تایپ کنید.

برای مستندات دقیق درباره واسط مدیریت، پرونده management-notes.txt را در پوشه management از توزیع سورس OpenVPN مشاهده کنید.

--management-client
رابط مدیریت به‌جای گوش دادن به‌عنوان یک سرور TCP یا روی یک سوکت یونیکس‌دامین، به‌عنوان کلاینت TCP/unix domain به IP:port مشخص‌شده توسط --management متصل خواهد شد.

اگر اتصال کلاینت برقرار نشود یا قطع گردد، یک سیگنال SIGTERM تولید شده و باعث خروج OpenVPN می‌شود.

--management-client-auth
مسئولیت احراز هویت کلاینت‌ها پس از تأیید گواهی کلاینت آن‌ها را به کلاینت رابط مدیریت محول می‌کند. برای یادداشت‌های دقیق، management-notes.txt را در بسته توزیع OpenVPN ببینید.
--management-client-group g
هنگامی که رابط مدیریت روی یک سوکت یونیکس‌دامین گوش می‌دهد، فقط اتصال‌ها از گروه g مجاز خواهند بود.
--management-client-user u
هنگامی که رابط مدیریت روی یک سوکت یونیکس‌دامین گوش می‌دهد، فقط اتصال‌ها از کاربر u مجاز خواهند بود.
--management-external-cert certificate-hint
اجازه استفاده از گواهی خارجی را به‌جای گزینه --cert می‌دهد (فقط کلاینت). آرگومان certificate-hint یک رشته دلخواه است که به‌عنوان یک آرگومان از اعلان NEED-CERTIFICATE به کلاینت رابط مدیریت ارسال می‌شود. به --management-external-key نیاز دارد.
--management-external-key args
اجازه استفاده از پرونده کلید خصوصی خارجی را به‌جای گزینه --key می‌دهد (فقط کلاینت).

ساختار دستوری مجاز:

management-external-key
management-external-key nopadding
management-external-key pkcs1
management-external-key pss

یا هر ترکیبی مانند:

management-external-key nopadding pkcs1
management-external-key pkcs1 pss

پارامترهای اختیاری nopadding، pkcs1 و pss پشتیبانی از الگوریتم‌های فاصله‌گذاری (padding) مختلف را اعلام می‌کنند. برای توضیحات کامل این ویژگی، doc/mangement-notes.txt را ببینید.

--management-forget-disconnect
باعث می‌شود هنگام قطع نشست مدیریت، OpenVPN گذرواژه‌ها را فراموش کند.

این دستور روی نام‌کاربری/گذرواژه --http-proxy تأثیری ندارد. آن همواره ذخیره (cache) می‌شود.

--management-hold
اجرای OpenVPN را در وضعیت تعلیق آغاز می‌کند، تا زمانی که یک کلاینت رابط مدیریت صراحتاً آن را با دستور hold release فعال کند.
--management-log-cache n
تعداد n خط اخیر از تاریخچه پرونده لاگ را برای استفاده توسط کانال مدیریت در حافظه موقت (cache) نگه می‌دارد.
--management-query-passwords
گذرواژه کلید خصوصی و نام‌کاربری/گذرواژه --auth-user-pass را از کانال مدیریت استعلام می‌کند. تنها ورودی‌هایی از کانال مدیریت استعلام می‌شوند که در حالت عادی از کنسول درخواست می‌شدند.
--management-query-proxy
اطلاعات سرور پروکسی را برای یک --remote مشخص از کانال مدیریت استعلام می‌کند (فقط کلاینت).
--management-query-remote
به رابط مدیریت اجازه بازنویسی (override) دستورهای --remote را می‌دهد (فقط کلاینت).
--management-signal
در صورت قطع نشست مدیریت، سیگنال SIGUSR1 را به OpenVPN ارسال می‌کند. این مورد زمانی کاربرد دارد که بخواهید هنگام خروج کاربر، نشست OpenVPN قطع شود. برای --management-client نیازی به این گزینه نیست چرا که قطع اتصال همواره یک سیگنال SIGTERM تولید می‌کند.
--management-up-down
رویدادهای بالا/پایین آمدن تونل (up/down) را به رابط مدیریت گزارش می‌دهد.

‏OpenVPN می‌تواند با بارگذاری ماژول‌های افزونه خارجی در زمان اجرا گسترش یابد. این افزونه‌ها باید از پیش ساخته شده باشند و از OpenVPN Plug-In API پیروی کنند.

یک ماژول افزونه OpenVPN را بارگذاری می‌کند.

ساختار دستوری مجاز:

plugin module-name
plugin module-name "arguments"

آرگومان اول باید module-name باشد که افزونه مورد نظر برای بارگذاری را مشخص می‌کند. آرگومان دوم یک رشته مقداردهی اولیه (init) اختیاری است که مستقیماً به افزونه ارسال می‌شود. اگر مقداردهی اولیه شامل چندین آرگومان باشد، باید در علامت نقل‌قول دوتایی (") قرار گیرد. چندین ماژول افزونه می‌توانند در یک فرآیند OpenVPN بارگذاری شوند.

آرگومان module-name می‌تواند صرفاً یک نام پرونده یا نام پرونده همراه با یک مسیر نسبی یا مطلق باشد. قالب نام پرونده و مسیر تعیین می‌کند که آیا افزونه از پوشه پیش‌فرض افزونه بارگذاری شود یا خارج از این پوشه.

--plugin path         Effective directory used
===================== =============================
 myplug.so            DEFAULT_DIR/myplug.so
 subdir/myplug.so     DEFAULT_DIR/subdir/myplug.so
 ./subdir/myplug.so   CWD/subdir/myplug.so
 /usr/lib/my/plug.so  /usr/lib/my/plug.so

مقدار DEFAULT_DIR با پوشه پیش‌فرض افزونه که در زمان ساخت OpenVPN پیکربندی شده، جایگزین می‌شود. CWD پوشه جاری است که OpenVPN در آن راه‌اندازی شده یا پوشه‌ای است که OpenVPN از طریق گزینه --cd پیش از گزینه --plugin به آن جابجا شده است.

برای اطلاعات بیشتر و نمونه‌هایی از نحوه ساخت ماژول‌های افزونه OpenVPN، پرونده README موجود در پوشه plugin توزیع سورس OpenVPN را ببینید.

اگر از بسته نصبی RPM برای OpenVPN استفاده می‌کنید، /usr/share/openvpn/plugin را ببینید. مستندات در doc و ماژول‌های افزونه اصلی در lib قرار دارند.

چندین ماژول افزونه را می‌توان به‌صورت آبشاری به‌کار برد و ماژول‌ها را می‌توان همراه با اسکریپت‌ها استفاده کرد. ماژول‌ها به ترتیبی که در پرونده پیکربندی اعلان شده‌اند توسط OpenVPN فراخوانی می‌شوند. اگر هم یک افزونه و هم یک اسکریپت برای فراخوانی بازگشتی (callback) یکسانی تنظیم شده باشند، اسکریپت در آخر فراخوانی می‌شود. چنانچه کد بازگشتی ماژول/اسکریپت یک تابع احراز هویت را کنترل کند (مانند tls-verify، auth-user-pass-verify، یا client-connect)، در این صورت تک‌تک ماژول‌ها و اسکریپت‌ها باید وضعیت موفقیت‌آمیز (0) را برگردانند تا اتصال احراز هویت شود.

هشدار:
افزونه‌ها ممکن است اجرای تعویقی (deferred execution) انجام دهند؛ بدین معنی که افزونه کنترل را به فرآیند اصلی OpenVPN برمی‌گرداند و نتیجه افزونه را بعداً از طریق یک نخ (thread) یا فرآیند دیگر ارائه می‌دهد. ‏OpenVPN از چند افزونه احراز هویت در شرایطی که بیش از یک افزونه بخواهد احراز هویت تعویقی انجام دهد، پشتیبانی نمی‌کند. در صورت شناسایی چنین رفتاری، OpenVPN در اولین احراز هویت متوقف خواهد شد.

این گزینه‌ها در پلتفرم‌های غیر Windows ناشناخته در نظر گرفته شده و منجر به خطای مهلک می‌شوند (به جز --route-method). ممکن است بخواهید از --setenv opt یا --ignore-unknown-option برای نادیده گرفتن این خطا استفاده کنید. توجه داشته باشید که ارسال گزینه‌های ناشناخته از سمت سرور خطای مهلک ایجاد نمی‌کند.

(Standalone) تنظیم TAP-adapter برای مجاز کردن دسترسی از حساب‌های غیر مدیر (non-administrative). اگر TAP-adapter حذف شود، تمام آداپتورهای TAP روی سیستم برای اجازه دسترسی غیر مدیر پیکربندی خواهند شد. تنظیم دسترسی غیر مدیر تنها به مدت زمانی که شیء دستگاه و درایور TAP-Win32 بارگذاری شده باقی بمانند پایدار خواهد بود، و پس از راه‌اندازی مجدد، یا در صورت تخلیه و بارگذاری مجدد درایور، نیاز به فعال‌سازی مجدد خواهد داشت. این دستورالعمل تنها توسط یک مدیر (administrator) قابل استفاده است.
مسدود کردن سرورهای DNS در سایر آداپتورهای شبکه جهت جلوگیری از نشت DNS. این گزینه از دسترسی هر برنامه‌ای به درگاه‌های TCP یا UDP شماره 53 به جز درگاه داخل تونل جلوگیری می‌کند. این گزینه از Windows Filtering Platform (WFP) استفاده کرده و در Windows Vista یا جدیدتر کار می‌کند.
(فقط Windows/OpenSSL) بارگذاری گواهی و کلید خصوصی از Windows Certificate System Store.

از این گزینه به جای --cert و --key استفاده کنید.

این قابلیت استفاده از هر کارت هوشمندی که توسط Windows پشتیبانی می‌شود، و همچنین هر نوع گواهی موجود در Cert Store که در آن به کلید خصوصی دسترسی دارید را ممکن می‌سازد. این گزینه با چند کارت هوشمند مختلف (GemSAFE، Cryptoflex، و Swedish Post Office eID) در سمت کلاینت، و همچنین یک گواهی نرم‌افزاری وارد شده PKCS12 در سمت سرور آزمایش شده است.

برای انتخاب یک گواهی بر اساس جستجوی زیررشته در موضوع (subject) گواهی:

cryptoapicert "SUBJ:Peter Runestig"

برای انتخاب یک گواهی بر اساس اثر انگشت (هش SHA1) گواهی:

cryptoapicert "THUMB:f6 49 24 41 01 b4 ..."

رشته هگزادسیمال اثر انگشت را می‌توان به راحتی از رابط گرافیکی Windows Certificate Store رونوشت و جای‌گذاری کرد. فاصله‌های موجود در رشته هگز اختیاری هستند.

برای انتخاب یک گواهی بر اساس زیررشته در نام صادرکننده (issuer) گواهی:

cryptoapicert "ISSUER:Sample CA"

برای انتخاب یک گواهی بر اساس نام الگوی گواهی یا OID الگو:

cryptoapicert "TMPL:Name of Template"
cryptoapicert "TMPL:1.3.6.1.4..."

نخستین گواهی منقضی‌نشده یافت‌شده در مخزن کاربر یا مخزن ماشین که با select-string مطابقت داشته باشد استفاده می‌شود.

درخواست از Windows برای آزادسازی اجاره (lease) آداپتور TAP هنگام خاموش شدن. این گزینه اکنون هیچ اثری ندارد، زیرا از OpenVPN 2.4.1 به بعد به طور پیش‌فرض فعال است.
درخواست از Windows برای تمدید اجاره (lease) آداپتور TAP هنگام راه‌اندازی. این گزینه معمولاً غیرضروری است، زیرا Windows هنگام بالا آمدن آداپتور TAP به طور خودکار مذاکره مجدد DHCP را آغاز می‌کند، با این حال اگر ویژگی Media Status آداپتور TAP-Win32 را روی "Always Connected" تنظیم کرده باشید، ممکن است به این پرچم نیاز پیدا کنید.
هنگام استفاده از --ifconfig در Windows، آدرس IP و ماسک شبکه آداپتور TAP-Win32 را با استفاده از method تنظیم کنید. از این گزینه استفاده نکنید مگر اینکه از --ifconfig نیز استفاده کنید.
آدرس IP یا ماسک شبکه را به صورت خودکار تنظیم نکنید. در عوض پیامی را به کنسول ارسال کرده و به کاربر اعلام کنید که آداپتور را به صورت دستی پیکربندی کند و IP/netmask مورد انتظار OpenVPN برای آداپتور را مشخص نمایید.
تنظیم خودکار آدرس IP و ماسک شبکه از طریق پاسخ به پیام‌های پرس‌وجوی DHCP تولید شده توسط هسته. این حالت احتمالاً "تمیزترین" راه‌حل برای تنظیم ویژگی‌های TCP/IP است زیرا از پروتکل شناخته‌شده DHCP استفاده می‌کند. با این حال، دو پیش‌نیاز برای استفاده از این حالت وجود دارد:
1.
ویژگی‌های TCP/IP برای آداپتور TAP-Win32 باید روی "Obtain an IP address automatically" تنظیم شده باشند، و
2.
برنامه OpenVPN باید یک آدرس IP را در زیرشبکه تصاحب کند تا از آن به عنوان آدرس سرور DHCP مجازی استفاده نماید.

به طور پیش‌فرض در حالت --dev tap، برنامه OpenVPN نخستین آدرس معمولاً استفاده‌نشده در زیرشبکه را می‌گیرد. برای نمونه، اگر زیرشبکه شما 192.168.4.0 netmask 255.255.255.0 باشد، OpenVPN آدرس IP مقدار 192.168.4.0 را به عنوان آدرس سرور DHCP مجازی استفاده خواهد کرد. در حالت --dev tun، برنامه OpenVPN باعث می‌شود سرور DHCP به گونه‌ای نقاب‌گذاری (masquerade) کند که گویی از نقطه پایانی راه دور می‌آید.

پارامتر اختیاری offset یک عدد صحیح است که > -256 و < 256 بوده و پیش‌فرض آن 0 است. اگر offset مثبت باشد، سرور DHCP به عنوان آدرس IP در آدرس شبکه + offset نقاب‌گذاری خواهد کرد. اگر offset منفی باشد، سرور DHCP به عنوان آدرس IP در آدرس پخش همگانی (broadcast) + offset نقاب‌گذاری می‌کند.

دستور ipconfig /all در Windows می‌تواند برای نمایش آدرسی که Windows به عنوان سرور DHCP در نظر می‌گیرد استفاده شود. برنامه OpenVPN این آدرس را "تصاحب" خواهد کرد، بنابراین اطمینان حاصل کنید که از یک آدرس آزاد استفاده می‌کنید. با این وجود، نمونه‌های مختلف OpenVPN، از جمله سرانجام‌های مختلف یک اتصال یکسان، می‌توانند یک آدرس سرور DHCP مجازی مشترک داشته باشند.

پارامتر lease-time مدت زمان اجاره انتساب DHCP داده‌شده به آداپتور TAP-Win32 را کنترل می‌کند و بر حسب ثانیه مشخص می‌شود. معمولاً یک زمان اجاره بسیار طولانی ترجیح داده می‌شود زیرا از بین رفتن مسیرهای مرتبط با آداپتور TAP-Win32 هنگام به خواب رفتن سیستم (sleep) جلوگیری می‌کند. مدت زمان پیش‌فرض اجاره یک سال است.

تنظیم خودکار آدرس IP و ماسک شبکه با استفاده از دستور خط فرمان "netsh" در Windows. به نظر می‌رسد این روش در Windows XP به درستی کار می‌کند اما در Windows 2000 خیر.
تنظیم خودکار آدرس IP و ماسک شبکه با استفاده از Windows IP Helper API. این رویکرد معناشناسی (semantics) ایده‌آلی ندارد، اگرچه آزمایش‌ها نشان داده است که در عمل به خوبی کار می‌کند. اگر از این گزینه استفاده می‌کنید، بهتر است ویژگی‌های TCP/IP آداپتور TAP-Win32 را در حالت پیش‌فرض خود، یعنی "Obtain an IP address automatically." رها کنید.
در ابتدا روش dynamic را امتحان کنید و در صورتی که مذاکره DHCP با آداپتور TAP-Win32 در مدت 20 ثانیه موفقیت‌آمیز نبود، به netsh جابه‌جا شوید (fail over). این‌گونه خرابی‌ها زمانی رخ می‌دهند که برخی بسته‌های فایروال شخص ثالث نصب شده روی دستگاه کلاینت، مذاکره DHCP مورد استفاده آداپتور TAP-Win32 را مسدود کنند. توجه داشته باشید که در صورت وقوع جابه‌جایی اضطراری (failover) به netsh، ویژگی‌های TCP/IP آداپتور TAP-Win32 از DHCP به ایستا (static) بازنشانی خواهند شد، و این امر باعث می‌شود که راه‌اندازی‌های بعدی OpenVPN با استفاده از حالت adaptive فوراً از netsh استفاده کنند، به جای اینکه ابتدا dynamic را امتحان نمایند.

برای "رها کردن" حالت adaptive از استفاده از netsh، برنامه OpenVPN را حداقل یک بار با استفاده از حالت dynamic اجرا کنید تا ویژگی‌های TCP/IP آداپتور TAP-Win32 به پیکربندی DHCP بازگردانده شود.

نمایش پیام "press any key to continue" روی کنسول پیش از خروج برنامه OpenVPN. این گزینه هنگام اجرای OpenVPN روی یک پرونده پیکربندی از طریق منوی راست‌کلیک، به‌طور خودکار توسط Windows Explorer استفاده می‌شود.
اجرای ipconfig /flushdns و ipconfig /registerdns هنگام آغاز اتصال. این کار برای واداشتن ویندوز به شناسایی سرورهای DNS ارسال‌شده شناخته شده است.
--route-method m
کدام روش m برای افزودن مسیرها در ویندوز استفاده شود؟
ابتدا IP helper API را امتحان کن. در صورت شکست، به دستور شل route.exe بازگرد.
استفاده از IP helper API.
فراخوانی دستور شل route.exe.
باید زمانی استفاده شود که OpenVPN به‌طور خودکار توسط برنامه دیگری در شرایطی اجرا می‌شود که هیچ تعاملی با کاربر از طریق نمایشگر یا صفحه‌کلید امکان‌پذیر نیست.

نحو معتبر:

service exit-event [0|1]

به‌طور کلی، کاربران نهایی هرگز نباید نیاز به استفاده صریح از این گزینه داشته باشند، زیرا هنگام اجرای یک پیکربندی مشخص OpenVPN به عنوان یک سرویس، این گزینه به‌طور خودکار توسط راه‌انداز سرویس OpenVPN افزوده می‌شود.

exit-event نام یک شیء رویداد سراسری ویندوز است، و OpenVPN به‌طور مداوم وضعیت این شیء رویداد را نظارت کرده و هنگامی که سیگنال‌دهی شود، خارج می‌شود.

پارامتر دوم وضعیت اولیه exit-event را مشخص می‌کند و به‌طور معمول پیش‌فرض آن 0 است.

چندین فرایند OpenVPN می‌توانند به‌طور هم‌زمان با همان پارامتر exit-event اجرا شوند. در هر صورت، فرایند کنترل‌کننده می‌تواند به exit-event سیگنال دهد و باعث خروج تمام آن فرایندهای OpenVPN شود.

هنگام اجرای یک فرایند OpenVPN با استفاده از دستورالعمل --service، احتمالاً OpenVPN پنجره کنسولی برای خروجی دادن پیام‌های وضعیت/خطا نخواهد داشت، بنابراین استفاده از --log یا --log-append برای نوشتن این پیام‌ها در یک پرونده مفید است.

(مستقل) نمایش آداپتورهای TAP-Win32 موجود که می‌توان با استفاده از گزینه --dev-node انتخاب کرد. در سیستم‌های غیرویندوزی، دستور ifconfig(8) قابلیت مشابهی ارائه می‌دهد.
(مستقل) نمایش دیدگاه OpenVPN از جدول مسیریابی سیستم و فهرست آداپتورهای شبکه.
خروجی دادن دیدگاه OpenVPN از جدول مسیریابی سیستم و فهرست آداپتورهای شبکه به syslog یا پرونده گزارش، پس از بالا آمدن آداپتور TUN/TAP و اضافه شدن هرگونه مسیر.
(مستقل) نمایش زیرشبکه‌های معتبر برای شبیه‌سازی --dev tun. از آنجا که درایور TAP-Win32 یک رابط اترنت را به ویندوز صادر می‌کند، و از آنجا که دستگاه‌های TUN ماهیت نقطه‌به‌نقطه دارند، لازم است درایور TAP-Win32 محدودیت‌های خاصی را بر انتخاب آدرس نقطه پایانی TUN اعمال کند.

به این صورت که، نقاط پایانی نقطه‌به‌نقطه استفاده‌شده در شبیه‌سازی دستگاه TUN باید دو آدرس میانی یک زیرشبکه /30 (با netmask 255.255.255.252) باشند.

باعث می‌شود OpenVPN بلافاصله پس از تنظیم وضعیت آداپتور TAP-Win32 روی "connected" به مدت n ثانیه بخوابد.

این گزینه برای عیب‌یابی مشکلات گزینه‌های --ifconfig و --ip-win32 در نظر گرفته شده است، و برای دادن زمان به آداپتور TAP-Win32 جهت آماده‌سازی پیش از اعمال عملیات‌های Windows IP Helper API روی آن استفاده می‌شود.

تنظیم مسیر دایرکتوری سیستم ویندوز جهت استفاده برای یافتن برنامه‌های اجرایی سیستم مانند route.exe و netsh.exe. به‌طور پیش‌فرض، اگر این دستورالعمل مشخص نشود، OpenVPN از متغیر محیطی SystemRoot استفاده خواهد کرد.

رفتار این گزینه از OpenVPN 2.3 تغییر کرده است. پیش‌تر باید --win-sys env را برای استفاده از متغیر محیطی SystemRoot تعریف می‌کردید، در غیر این صورت پیش‌فرض آن C:\\WINDOWS بود. دیگر نیازی به استفاده از کلیدواژه env نیست و نادیده گرفته خواهد شد. در صورت یافتن آن در پرونده پیکربندی، هشداری ثبت می‌شود.

(مستقل) نمایش دروازه پیش‌فرض فعلی IPv4 و IPv6 و رابط متصل به دروازه (در صورتی که پروتکل مربوطه فعال باشد).

نحو معتبر:

--show-gateway
--show-gateway IPv4-target
--show-gateway IPv6-target

برای IPv4 به دنبال مسیر 0.0.0.0/0، یا آدرس مشخص‌شده IPv4 در صورت تجزیه‌پذیر بودن مقصد به عنوان آدرس IPv4 می‌گردد. برای IPv6 مسیر متصل به ::/128، یا آدرس مقصد مشخص‌شده IPv6 در صورت بودن آرگومان به عنوان یک آدرس IPv6 را بررسی می‌کند.

افزودن یک مقصد برای عیب‌یابی مفید است تا مشخص شود در صورت وجود مسیرهای خاص‌تر IPv4/IPv6 به یک سرور VPN، آیا OpenVPN عملکرد صحیحی دارد یا خیر.

این‌ها گزینه‌هایی هستند که تنها در صورت نیاز به تنظیمات خاص الزامی می‌شوند، و اغلب هنگام اشکال‌زدایی یا آزمایش سناریوهای کاربردی خاص استفاده می‌شوند.

اندازه جدول درهم‌سازی نشانی واقعی را روی r و جدول نشانی مجازی را روی v تنظیم می‌کند.

نحو معتبر:

hash-size r v

به‌طور پیش‌فرض، اندازه هر دو جدول ۴ برابر باکت‌های --max-clients است. با مقدار پیش‌فرض ۱۰۲۴ برای --max-clients، این مقدار ۴۰۹۶ باکت می‌شود.

تخصیص n بافر برای دیتاگرام‌های همگانی (پیش‌فرض 256).
حفظ نشانی IP محلی و شماره درگاه حل‌شده اولیه در بازراه‌اندازی‌های SIGUSR1 یا --ping-restart.
حفظ آخرین نشانی IP دوردست و شماره درگاه احراز هویت شده در بازراه‌اندازی‌های SIGUSR1 یا --ping-restart.
تنظیم اندازه بافر دریافت سوکت TCP/UDP. مقدار پیش‌فرض آن به پیش‌فرض سیستم‌عامل برمی‌گردد.
محدود کردن پهنای باند داده‌های خروجی تونل به n بایت در ثانیه روی درگاه TCP/UDP. توجه داشته باشید که این گزینه فقط در صورتی کار می‌کند که حالت روی p2p تنظیم شده باشد. اگر می‌خواهید پهنای باند را در هر دو جهت محدود کنید، از این گزینه در هر دو همتا استفاده کنید.

برنامه OpenVPN برای پیاده‌سازی شکل‌دهی ترافیک از الگوریتم زیر استفاده می‌کند: با در نظر گرفتن نرخ شکل‌دهنده به اندازه n بایت در ثانیه، پس از صف‌بندی یک نوشتن دیتاگرام به اندازه b بایت روی درگاه TCP/UDP، حداقل (b / n) ثانیه قبل از صف‌بندی نوشتن بعدی صبر کنید.

باید توجه داشت که OpenVPN از چندین تونل بین دو همتای یکسان پشتیبانی می‌کند و به شما امکان می‌دهد تونل‌های سرعت کامل و پهنای باند کاهش‌یافته را هم‌زمان بسازید و داده‌های با اولویت پایین مانند پشتیبان‌گیری‌های خارج از محل را از طریق تونل با پهنای باند کاهش‌یافته و سایر داده‌ها را از طریق تونل سرعت کامل مسیریابی کنید.

همچنین توجه داشته باشید که برای تونل‌های با پهنای باند کم (زیر ۱۰۰۰ بایت در ثانیه)، احتمالاً باید از مقادیر کمتر MTU نیز استفاده کنید (به بالا مراجعه کنید)، در غیر این صورت تاخیر بسته‌ها آن‌قدر زیاد می‌شود که باعث اتمام مهلت زمانی در لایه TLS و اتصالات TCP در حال اجرا بر روی تونل خواهد شد.

برنامه OpenVPN اجازه می‌دهد n بین ۱۰۰ بایت/ثانیه و ۱۰۰ مگابایت/ثانیه باشد.

تنظیم اندازه بافر ارسال سوکت TCP/UDP. مقدار پیش‌فرض آن به پیش‌فرض سیستم‌عامل برمی‌گردد.
حداکثر تعداد بسته‌های خروجی صف‌بندی‌شده قبل از TCP (پیش‌فرض 64).

هنگامی که OpenVPN در حال تونل‌زنی داده‌ها از یک دستگاه TUN/TAP به یک کلاینت دوردست از طریق اتصال TCP است، ممکن است دستگاه TUN/TAP داده‌ها را با سرعتی بیشتر از آنچه اتصال TCP می‌تواند پشتیبانی کند تولید کند. هنگامی که تعداد بسته‌های خروجی صف‌بندی‌شده قبل از ارسال به سوکت TCP برای یک اتصال کلاینت مشخص به این حد برسد، OpenVPN شروع به دور انداختن بسته‌های خروجی هدایت‌شده به این کلاینت می‌کند.

(فقط لینوکس) تنظیم طول صف TX روی رابط TUN/TAP. در حال حاضر مقدار پیش‌فرض آن به پیش‌فرض سیستم‌عامل برمی‌گردد.
--disable-dco
استفاده فرصت‌طلبانه از برون‌سپاری کانال داده (DCO) را در صورت در دسترس بودن غیرفعال می‌کند. بدون این گزینه، اگر گزینه‌های پیکربندی و هسته در حال اجرا از DCO پشتیبانی کنند، OpenVPN به‌طور فرصت‌طلبانه از حالت DCO استفاده خواهد کرد.

برون‌سپاری کانال داده در حال حاضر نیازمند این است که data-ciphers فقط شامل رمزهای AEAD (یعنی AES-GCM و Chacha20-Poly1305) باشد و لینوکس همراه با ماژول ovpn اجرا شود. ماژول ovpn از نسخه ۶.۱۶ در هسته لینوکس ادغام شده است یا به‌صورت backport از https://github.com/OpenVPN/ovpn-backports در دسترس است.

توجه داشته باشید که هنگام فعال بودن حالت DCO، برخی گزینه‌ها بی‌اثر هستند یا قابل استفاده نیستند.

روی پلتفرم‌هایی که از DCO پشتیبانی نمی‌کنند، disable-dco اثری ندارد.

گزینه‌های فهرست‌شده در این بخش از OpenVPN حذف شده‌اند و دیگر پشتیبانی نمی‌شوند

--client-cert-not-required
در OpenVPN 2.5 حذف شده است. این گزینه باید با --verify-client-cert none جایگزین شود.
از OpenVPN 2.7 نادیده گرفته می‌شود. این گزینه به دلیل تغییرات در حلقه رویداد از کار افتاد.
در OpenVPN 2.4 حذف شده است. تمام تلاش‌های مجدد توسط --max-connect-retry کنترل می‌شوند.
در OpenVPN 2.4 حذف شده است. مهلت زمانی اتصال توسط --connect-timeout کنترل می‌شود.
--ifconfig-pool-linear
در OpenVPN 2.5 حذف شده است. این گزینه باید با --topology p2p جایگزین شود.
در OpenVPN 2.5 حذف شده است. این گزینه نباید استفاده شود، زیرا استفاده از key-method قدیمی، امنیت تونل VPN را تضعیف می‌کند. همچنین key-method قدیمی تنها زمانی مورد نیاز بود که طرف دوردست قدیمی‌تر از OpenVPN 2.0 بود.
--management-client-pf
در OpenVPN 2.6 حذف شد. قابلیت درون‌ساخت فیلترسازی بسته‌ها (pf) حذف شده است.
در OpenVPN 2.4 حذف شد. این محدودیت برداشته شد.
در OpenVPN 2.6 حذف شد. این گزینه بیشتر نقش یک گزینه اشکال‌زدایی را در زمان معرفی اولیه NCP ایفا می‌کرد. دیگر نباید نیازی به آن باشد.
در OpenVPN 2.5 حذف شد. این گزینه نباید استفاده شود زیرا امنیت تونل VPN را تضعیف می‌کند. این گزینه از OpenVPN 2.4 به عنوان NOOP (بی‌اثر) بوده است.
در OpenVPN 2.7 حذف شد. این گزینه نباید استفاده شود زیرا امنیت تونل VPN را تضعیف می‌کند. پیش‌تر ادعا شده بود که این گزینه در OpenVPN 2.5 حذف شده است، اما در عمل چنین نبود.
در OpenVPN 2.6 حذف شد. اکنون همیشه از PRNG کتابخانه SSL استفاده می‌شود.
از OpenVPN 2.7 نادیده گرفته می‌شود. کلیدها اکنون همیشه پس از راه‌اندازی‌های مجدد حفظ می‌شوند.
در OpenVPN 2.7 حذف شد. این گزینه دیگر کاربردی ندارد زیرا ممکن است رشته‌های گزینه‌ها به دلیل معرفی مذاکره پارامترها مطابقت نداشته باشند.
در OpenVPN 2.4 حذف شد. تمام تلاش‌های مجدد توسط --max-connect-retry کنترل می‌شوند.
در OpenVPN 2.7 حذف شد. OpenVPN همیشه از ovpn-dco به عنوان درایور پیش‌فرض در Windows استفاده خواهد کرد. در صورت استفاده از گزینه‌های ناسازگار با ovpn-dco، به tap-windows6 بازمی‌گردد.

پرونده‌های پیکربندی کلاینت ممکن است شامل چندین سرور راه دور باشند که برای اتصال به آن‌ها تلاش خواهد شد. اما برخی گزینه‌های پیکربندی وجود دارند که به گزینه‌های --remote خاصی مرتبط هستند. برای این موارد استفاده، پروفایل‌های اتصال راهکار هستند.

با کپسوله‌سازی گزینه --remote و گزینه‌های مرتبط درون <connection> و </connection>، این گزینه‌ها به صورت یک گروه مدیریت می‌شوند.

یک کلاینت OpenVPN هر پروفایل اتصال را به ترتیب امتحان می‌کند تا به یک اتصال موفق دست یابد.

از --remote-random می‌توان برای "درهم‌ریزی" اولیه فهرست اتصالات استفاده کرد.

در اینجا نمونه‌ای از کاربرد پروفایل اتصال آمده است:

client
dev tun
<connection>
remote 198.19.34.56 1194 udp
</connection>
<connection>
remote 198.19.34.56 443 tcp
</connection>
<connection>
remote 198.19.34.56 443 tcp
http-proxy 192.168.0.8 8080
</connection>
<connection>
remote 198.19.36.99 443 tcp
http-proxy 192.168.0.8 8080
</connection>
persist-tun
pkcs12 client.p12
remote-cert-tls server
verb 3

ابتدا تلاش می‌کنیم با استفاده از UDP به سروری در 198.19.34.56:1194 متصل شویم. اگر ناموفق بود، سپس سعی می‌کنیم با TCP به 198.19.34.56:443 متصل شویم. اگر آن هم ناموفق بود، اتصال از طریق یک پراکسی HTTP در 192.168.0.8:8080 به 198.19.34.56:443 با استفاده از TCP امتحان می‌شود. در نهایت، تلاش برای اتصال از طریق همان پراکسی به سروری در 198.19.36.99:443 با استفاده از TCP انجام می‌گیرد.

گزینه‌های زیر از OpenVPN را می‌توان درون یک بلوک <connection> استفاده کرد:

bind، connect-retry، connect-retry-max، connect-timeout، explicit-exit-notify، float، fragment، http-proxy، http-proxy-option، key-direction، link-mtu، local، lport، mssfix، mtu-disc، nobind، port، proto، remote، rport، socks-proxy، tls-auth، tls-crypt، tls-crypt-v2، tun-mtu و tun-mtu-extra.

یک سازوکار پیش‌فرض‌گذاری برای تعیین گزینه‌هایی که باید روی تمام پروفایل‌های <connection> اعمال شوند وجود دارد. اگر هر یک از گزینه‌های بالا (به استثنای remote) خارج از یک بلوک <connection>، اما در پرونده پیکربندی‌ای قرار گیرند که دارای یک یا چند بلوک <connection> است، تنظیمات آن گزینه به عنوان پیش‌فرض برای بلوک‌های <connection> که پس از آن در پرونده پیکربندی می‌آیند، استفاده خواهد شد.

برای نمونه، فرض کنید گزینه nobind در پرونده پیکربندی نمونه بالا، نزدیک بالای پرونده، قبل از اولین بلوک <connection> قرار داده شود. نتیجه به این صورت خواهد بود که گویی nobind در تمام بلوک‌های <connection> پس از آن اعلان شده است.

نرم‌افزار OpenVPN امکان گنجاندن پرونده‌ها را در پیکربندی اصلی برای گزینه‌های --ca، --cert، --dh، --extra-certs، --key، --pkcs12، --crl-verify، --http-proxy-user-pass، --tls-auth، --auth-gen-token-secret، --peer-fingerprint، --tls-crypt، --tls-crypt-v2، --verify-hash و --auth-user-pass فراهم می‌کند.

هر پرونده درون‌خطی با خط <option> شروع شده و با خط </option> پایان می‌یابد.

در اینجا نمونه‌ای از کاربرد پرونده درون‌خطی آورده شده است:

<cert>
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
</cert>

هنگام استفاده از قابلیت پرونده درون‌خطی با گزینه --pkcs12، پرونده درون‌خطی باید با base64 کدگذاری شده باشد. کدگذاری یک پرونده .p12 به base64 می‌تواند برای نمونه با OpenSSL از طریق اجرای فرمان openssl base64 -in input.p12 انجام شود.

باعث می‌شود OpenVPN تمام اتصالات TUN/TAP و شبکه را ببندد، دوباره راه‌اندازی شود، پرونده پیکربندی (در صورت وجود) را مجدداً بخواند، و اتصالات TUN/TAP و شبکه را دوباره باز کند.
مانند SIGHUP عمل می‌کند، به جز اینکه پرونده پیکربندی را دوباره نمی‌خواند، و احتمالاً بر اساس گزینه‌های --persist-tun، --persist-local-ip و --persist-remote-ip (به بالا مراجعه کنید)، به ترتیب دستگاه TUN/TAP را نمی‌بندد و باز نمی‌کند، پرونده‌های کلید را دوباره نمی‌خواند، نشانی IP/درگاه محلی را حفظ می‌کند، یا نشانی IP/درگاه دوردستِ اخیراً احراز هویت شده را نگه می‌دارد.

این سیگنال همچنین می‌تواند به صورت داخلی توسط یک وضعیت انقضای زمان (timeout) که توسط گزینه --ping-restart کنترل می‌شود، ایجاد شود.

این سیگنال هنگام ترکیب با --persist-remote-ip، ممکن است زمانی ارسال شود که پارامترهای زیرین رابط شبکه میزبان تغییر کنند؛ مانند زمانی که میزبان یک کلاینت DHCP است و یک نشانی IP جدید دریافت می‌کند. برای اطلاعات بیشتر --ipchange را ببینید.

باعث می‌شود OpenVPN آمار فعلی خود را نمایش دهد (در صورت استفاده از --daemon در پرونده syslog، و در غیر این صورت در stdout).
باعث خروج تمیز (gracefully) OpenVPN می‌شود.

https://community.openvpn.net/openvpn/wiki/FAQ

صفحه راهنمای openvpn-examples(5) نمونه‌هایی را به‌ویژه برای راه‌اندازی‌های کوچک ارائه می‌دهد.

برای یک راهنمای جامع‌تر جهت راه‌اندازی OpenVPN در یک محیط عملیاتی، راهنمای HOWTO اوپن‌وی‌پی‌ان را در نشانی زیر ببینید: https://openvpn.net/community-resources/how-to

تلاشی مداوم برای مستندسازی پروتکل OpenVPN را می‌توان در نشانی زیر یافت: https://github.com/openvpn/openvpn-rfc

وب‌سایت OpenVPN در https://community.openvpn.net قرار دارد.

برای بارگیری آخرین نسخه OpenVPN، عضویت در فهرست‌های پستی، خواندن آرشیو فهرست‌های پستی، یا مرور مخزن Git به اینجا مراجعه کنید.

همه اشکالات را به تیم OpenVPN گزارش دهید: <info@openvpn.net>

openvpn-examples(5), dhcpcd(8), ifconfig(8), openssl(1), route(8), scp(1) ssh(1)

این محصول شامل نرم‌افزاری است که توسط پروژه OpenSSL توسعه یافته است (https://www.openssl.org)

برای اطلاعات بیشتر درباره پروتکل TLS ببینید: https://tools.ietf.org/html/rfc2246

برای اطلاعات بیشتر درباره کتابخانه فشرده‌سازی بی‌درنگ LZO ببینید: https://www.oberhumer.com/opensource/lzo

حق نشر (C) ۲۰۰۲-۲۰۲۵ OpenVPN Inc. این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU GPL) نسخه ۲ که توسط بنیاد نرم‌افزارهای آزاد منتشر شده، بازتوزیع کنید و/یا تغییر دهید.

James Yonan <james@openvpn.net>