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

openconnect - کلاینت VPN چندپروتکله، برای VPNهای AnyConnect سیسکو و دیگر موارد

openconnect [--config configfile] [-b,--background] [--pid-file pidfile] [-c,--certificate cert] [-e,--cert-expire-warning days] [-k,--sslkey key] [-C,--cookie cookie] [--cookie-on-stdin] [--compression MODE] [-d,--deflate] [-D,--no-deflate] [--force-dpd interval] [--force-trojan interval] [-F,--form-entry form:opt=value] [-g,--usergroup group] [-h,--help] [--http-auth methods] [--external-browser browser] [-i,--interface ifname] [-l,--syslog] [--timestamp] [--passtos] [-U,--setuid user] [--csd-user user] [-m,--mtu mtu] [--base-mtu mtu] [-p,--key-password pass] [-P,--proxy proxyurl] [--proxy-auth methods] [--no-proxy] [--libproxy] [--key-password-from-fsid] [-q,--quiet] [-Q,--queue-len len] [-s,--script vpnc-script] [-S,--script-tun] [-u,--user name] [-V,--version] [-v,--verbose] [-x,--xmlconfig config] [--authgroup group] [--authenticate] [--cookieonly] [--printcookie] [--cafile file] [--disable-ipv6] [--dtls-ciphers list] [--dtls12-ciphers list] [--dtls-local-port port] [--dump-http-traffic] [--no-system-trust] [--pfs] [--no-dtls] [--no-http-keepalive] [--no-passwd] [--no-xmlpost] [--non-inter] [--passwd-on-stdin] [--protocol proto] [--token-mode mode] [--token-secret {secret[,counter]|@file}] [--reconnect-timeout seconds] [--resolve host:ip] [--sni host] [--servercert sha1] [--useragent string] [--version-string string] [--local-hostname string] [--os string] [--server] [https://]host[:port][/group]

برنامه openconnect به سرورهای VPN که از پروتکل‌های استاندارد TLS/SSL، DTLS و ESP برای انتقال داده استفاده می‌کنند، متصل می‌شود.

این برنامه در ابتدا برای پشتیبانی از سرورهای VPN سیسکو "AnyConnect" نوشته شد، و از آن زمان با پشتیبانی آزمایشی از سرورهای VPN جونیپر Network Connect (--protocol=nc)، سرورهای VPN پالس/ایوانتی Connect Secure (--protocol=pulse)، سرورهای VPN پالو آلتو نتورکز GlobalProtect (--protocol=gp)، سرورهای VPN اف۵ Big-IP (--protocol=f5)، سرورهای VPN فورتی‌نت Fortigate (--protocol=fortinet) و سرورهای SSL VPN ارِی نتورکز (Array Networks) (--protocol=array) گسترش یافته است.

اتصال در دو فاز انجام می‌شود. ابتدا یک اتصال ساده HTTPS برقرار می‌شود که کاربر در آن به روشی احراز هویت می‌کند - با استفاده از یک گواهی، رمز عبور یا SecurID و غیره. پس از احراز هویت، به کاربر یک کوکی احراز هویت داده می‌شود که می‌تواند برای برقراری اتصال واقعی VPN استفاده شود.

فاز دوم از آن کوکی برای اتصال به یک تونل از طریق HTTPS استفاده می‌کند و بسته‌های داده می‌توانند از طریق اتصال حاصل منتقل شوند. در صورت امکان، یک تونل UDP نیز پیکربندی می‌شود: AnyConnect از DTLS استفاده می‌کند، در حالی که Juniper و GlobalProtect از ESP کپسوله‌شده در UDP بهره می‌برند. تونل UDP می‌تواند با --no-dtls غیرفعال شود، اما در صورتی که توسط سرور و شبکه به درستی پشتیبانی شود، به دلایل کارایی ترجیح داده می‌شود. (عملکرد TCP بر روی تونل‌های مبتنی بر TCP ضعیف و غیرقابل‌اطمینان است؛ به https://web.archive.org/web/20230228035749/https://sites.inka.de/~W1011/devel/tcp-tcp.html مراجعه کنید.)

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

هر گزینه‌ای به جز گزینه config می‌تواند در این فایل مشخص شود.

ادامه فعالیت در پس‌زمینه پس از راه‌اندازی
ذخیره pid در PIDFILE هنگام رفتن به پس‌زمینه
استفاده از گواهی کلاینت SSL CERT که می‌تواند یک نام فایل یا در صورتی که OpenConnect با نسخه مناسبی از GnuTLS ساخته شده باشد، یک URL مربوط به PKCS#11 باشد.

گزینه --mca-certificate گواهی ثانویه را برای احراز هویت چندگواهی تنظیم می‌کند (طبق اصطلاحات سیسکو، گواهی کلاینت SSL گواهی "دستگاه" و گواهی دوم گواهی "کاربر" نامیده می‌شود).

ارائه هشدار زمانی که DAYS روز تا انقضای گواهی کلاینت SSL باقی مانده است
استفاده از کلید خصوصی SSL KEY که می‌تواند یک نام فایل یا در صورتی که OpenConnect با نسخه مناسبی از GnuTLS ساخته شده باشد، یک URL مربوط به PKCS#11 باشد.

گزینه --mca-key کلید خصوصی را برای گواهی ثانویه تنظیم می‌کند (به --mca-certificate مراجعه کنید).

استفاده از کوکی احراز هویت COOKIE.
خواندن کوکی از ورودی استاندارد.
فعال‌سازی تمام حالت‌های فشرده‌سازی، از جمله حالت‌های دارای وضعیت (stateful). به طور پیش‌فرض، فقط الگوریتم‌های فشرده‌سازی بدون وضعیت فعال هستند.
غیرفعال‌سازی تمام حالت‌های فشرده‌سازی.
تنظیم حالت فشرده‌سازی، که در آن MODE یکی از مقادیر stateless، none یا all است.

به طور پیش‌فرض، فقط الگوریتم‌های فشرده‌سازی بدون وضعیت که وضعیتی را از یک بسته به بسته بعدی حفظ نمی‌کنند (و می‌توانند در بسترهای انتقال UDP استفاده شوند) فعال هستند. با تنظیم حالت روی all الگوریتم‌های دارای وضعیت (در حال حاضر تنها zlib deflate) می‌توانند فعال شوند. یا می‌توان تمام فشرده‌سازی را با تنظیم حالت روی none غیرفعال کرد.

استفاده از INTERVAL به عنوان بازه زمانی تشخیص همتای مرده (Dead Peer Detection - DPD) (به ثانیه). این امر باعث می‌شود که کلاینت از DPD در بازه زمانی مشخص‌شده استفاده کند حتی اگر سرور آن را درخواست نکرده باشد، یا در بازه زمانی متفاوتی نسبت به آنچه توسط سرور درخواست شده است.

سازوکارهای DPD بر اساس پروتکل و بستر انتقال (TLS یا DTLS/ESP) متفاوت است، اما همگی از نظر عملکردی مشابه هستند: آن‌ها به کلاینت VPN یا سرور VPN امکان می‌دهند سیگنالی را به همتا ارسال کنند و خواستار پاسخ فوری شوند که می‌تواند برای تایید فعال بودن پیوند میان دو همتا استفاده شود.

تنظیم مسیر URL اتصال اولیه HTTPS به سرور.

در برخی پروتکل‌ها، این مسیر ممکن است به عنوان گروه ورود به سیستم یا قلمرو (realm) عمل کند، از این رو این گزینه نام‌گذاری شده است. به عنوان مثال، فراخوانی‌های زیر از OpenConnect معادل یکدیگر هستند:

openconnect --usergroup=loginPath vpn.server.com
openconnect https://vpn.server.com/loginPath
ارائه ورودی فرم احراز هویت، که در آن FORM و OPTION شناسه‌های مربوط به فرم و فیلد ورودی خاص هستند و VALUE رشته‌ای است که باید به طور خودکار پر شود. به عنوان مثال، فیلد نام کاربری استاندارد (که توسط گزینه --user نیز مدیریت می‌شود) می‌تواند با این گزینه نیز به این صورت ارائه شود: --form-entry main:username=joebloggs.

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

از این گزینه نباید برای وارد کردن رمزهای عبور استفاده شود. گزینه --passwd-on-stdin باید برای این منظور استفاده گردد. این گزینه نه تنها مقدار رمز عبور را از طریق خط فرمان فرایند OpenConnect فاش می‌کند، بلکه برخلاف --passwd-on-stdin حالت رمز عبور نادرست را تشخیص نمی‌دهد و تلاش مکرر برای ورود مجدد آن را متوقف نمی‌کند.

نمایش متن راهنما
استفاده تنها از روش‌های مشخص‌شده برای احراز هویت HTTP در سرور. به طور پیش‌فرض، فقط روش‌های احراز هویت Negotiate، NTLM و Digest فعال هستند. احراز هویت Basic نیز پشتیبانی می‌شود اما به دلیل ناامن بودن باید به صراحت فعال شود. آرگومان یک لیست جداشده با ویرگول از روش‌هایی است که باید فعال شوند. توجه داشته باشید که ترتیب آن‌ها اهمیتی ندارد: OpenConnect در صورت فعال بودن هر کدام، از روش‌های احراز هویت Negotiate، NTLM، Digest و Basic به همین ترتیب استفاده خواهد کرد، صرف‌نظر از ترتیبی که در رشته METHODS مشخص شده است.
تنظیم BROWSER به عنوان فایل اجرایی مورد استفاده OpenConnect برای مدیریت فرایند احراز هویت با درگاه‌هایی که از روش احراز هویت single-sign-on-external-browser پشتیبانی می‌کنند.
استفاده از IFNAME برای رابط تونل
پس از بالا آمدن تونل، استفاده از syslog برای پیام‌های بعدی پیشرفت
افزودن برچسب زمانی به ابتدای هر پیام پیشرفت
کپی کردن TOS / TCLASS بسته داده در بسته‌های DTLS و ESP. این گزینه به طور پیش‌فرض تنظیم نشده است زیرا ممکن است اطلاعاتی درباره بار داده نشت دهد (به عنوان مثال، با متمایز کردن ترافیک صوتی/تصویری).
کاهش اختیارات پس از اتصال، برای تبدیل شدن به کاربر USER
کاهش اختیارات در حین اجرای فایل باینری یا اسکریپت تروجان (CSD، TNCC یا HIP).
اجرای SCRIPT به جای باینری یا اسکریپت تروجان.
استفاده از INTERVAL به عنوان بازه زمانی (به ثانیه) برای اجرای مکرر باینری یا اسکریپت تروجان، با نادیده گرفتن بازه زمانی پیش‌فرض و/یا تعیین‌شده توسط سرور.
درخواست MTU از سرور به عنوان MTU تونل.
مشخص کردن MTU به عنوان MTU مسیر میان کلاینت و سرور در شبکه رمزگذاری‌نشده. سرورهای جدیدتر به طور خودکار MTU مورد استفاده در تونل را از این مقدار محاسبه می‌کنند.
ارائه عبارت عبور برای فایل گواهی، یا پین SRK (کلید ریشه سیستم) برای TPM

گزینه --mca-key-password عبارت عبور را برای گواهی ثانویه ارائه می‌دهد (به --mca-certificate مراجعه کنید).

استفاده از پراکسی HTTP یا SOCKS برای اتصال. نام کاربری و رمز عبور می‌توانند در URL ارائه‌شده قید شوند و برای احراز هویت استفاده خواهند شد. اگر احراز هویت لازم باشد اما اطلاعات اعتبارسنجی ارائه نشده باشد، ممکن است احراز هویت خودکار NTLM با ابزار کمکی ntlm_auth متعلق به سامبا و همچنین GSSAPI امتحان شود.
استفاده تنها از روش‌های مشخص‌شده برای احراز هویت HTTP در یک پراکسی. به طور پیش‌فرض، فقط احراز هویت‌های Negotiate، NTLM و Digest فعال هستند. احراز هویت Basic نیز پشتیبانی می‌شود اما به دلیل ناامن بودن باید به صراحت فعال شود. آرگومان یک لیست جداشده با ویرگول از روش‌هایی است که باید فعال شوند. توجه داشته باشید که ترتیب آن‌ها اهمیتی ندارد: OpenConnect در صورت فعال بودن هر کدام، از احراز هویت‌های Negotiate، NTLM، Digest و Basic به همین ترتیب استفاده خواهد کرد، صرف‌نظر از ترتیبی که در رشته METHODS مشخص شده است.
غیرفعال کردن استفاده از پراکسی
استفاده از libproxy برای پیکربندی خودکار پراکسی (در صورت ساخت با پشتیبانی از libproxy)
تولید خودکار عبارت عبور فایل گواهی از fsid سیستم‌فایلی که گواهی روی آن ذخیره شده است. مقدار fsid بسته به سیستم‌عامل، از فراخوان سیستمی statvfs(2) یا statfs(2) به دست می‌آید. در لینوکس یا سیستم‌های مشابه با GNU coreutils، مقدار fsid مورد استفاده توسط این گزینه باید برابر با خروجی دستور زیر باشد:
stat --file-system --printf=%i\\n $CERTIFICATE
این مقدار با UUID ۱۲۸ بیتی سیستم‌فایل یکسان نیست.
خروجی کمتر
تنظیم محدودیت صف بسته‌ها به LEN بسته. مقدار پیش‌فرض ۳۲ است. یک مقدار بالا ممکن است پهنای باند کلی بهتری را فراهم کند اما به بهای افزایش تاخیر (latency) تمام می‌شود. اگر از Voice over IP یا دیگر ترافیک‌های تعاملی روی VPN استفاده می‌کنید، نمی‌خواهید آن بسته‌ها پشت هزاران بسته بزرگ دیگر که بخشی از یک انتقال انبوه داده هستند در صف بمانند.

این گزینه حداکثر اندازه صف بسته‌های ورودی و خروجی را در خود OpenConnect تنظیم می‌کند، که تعیین می‌نماید چه تعداد بسته در یک دسته ارسال و دریافت می‌شوند، و همچنین بر سایر بافرها مانند بافر ارسال سوکت (SO_SNDBUF) برای اتصالات شبکه و دستگاه تونل سیستم‌عامل تاثیر می‌گذارد.

در نهایت، اندازه مناسب برای یک صف "فقط به تعداد کافی بسته است که پیش از رسیدن بسته‌های بیشتر، هرگز کاملا خالی نشود". هر مقداری بیش از آن، صرفا باعث ایجاد اتساع بافر (bufferbloat) و تاخیر اضافی بدون هیچ مزیتی می‌شود. با مقدار پیش‌فرض ۳۲، ما قادریم یک اترنت گیگابیتی را حتی با سخت‌افزاری معمولی اشباع کنیم، که برای بیشتر کاربران VPN بیش از حد کافی است.

اگر OpenConnect با پشتیبانی از vhost-net ساخته شده باشد، تنها در صورتی از آن استفاده می‌شود که طول صف روی ۱۶ یا بیشتر تنظیم شده باشد. دلیل این امر آن است که vhost-net مقدار کمی تاخیر اضافی ایجاد می‌کند، اما پهنای باند کلی را برای کسانی که با نرخ ترافیک بالا کار می‌کنند به طور قابل توجهی بهبود می‌بخشد. بنابراین استفاده از آن زمانی منطقی است که کاربر با افزایش اندازه صف، ترجیح خود را برای پهنای باند نسبت به تاخیر نشان داده باشد.

فراخوانی SCRIPT برای پیکربندی شبکه پس از اتصال. بدون این اسکریپت، بعید است مسیریابی و سرویس نام دامنه به درستی کار کنند. انتظار می‌رود این اسکریپت با vpnc-script که همراه با کلاینت VPN "vpnc" ارائه می‌شود سازگار باشد. برای اطلاعات بیشتر به https://www.infradead.org/openconnect/vpnc-script.html مراجعه کنید. این نسخه از OpenConnect به طور پیش‌فرض برای استفاده از /etc/vpnc/vpnc-script پیکربندی شده است.

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

انتقال ترافیک به برنامه 'script' از طریق یک سوکت UNIX، به جای ارسال به یک دستگاه tun/tap در هسته. این کار اجازه می‌دهد ترافیک IP مربوط به VPN کاملا در فضای کاربری مدیریت شود، برای مثال توسط برنامه‌ای که از lwIP برای ارائه دسترسی SOCKS به داخل VPN استفاده می‌کند.
تعریف سرور VPN به عنوان یک HOST ساده یا به عنوان یک URL شامل HOST و در صورت تمایل شماره PORT و PATH؛ در برخی پروتکل‌ها، این مسیر ممکن است به عنوان گروه ورود به سیستم یا realm عمل کند، و می‌توان آن را به طور معادل با --usergroup نیز مشخص کرد.

به عنوان جایگزین، سرور VPN را به عنوان یک آرگومان غیرگزینه‌ای در خط فرمان تعریف کنید.

تنظیم نام کاربری ورود به سیستم به NAME
گزارش شماره نسخه
خروجی بیشتر (می‌تواند چندین بار برای خروجی‌های اضافی مشخص شود)
فایل پیکربندی XML
انتخاب GROUP از منوی کشویی یا ورودی لیست احراز هویت.

بسیاری از VPNها نیازمند انتخابی از یک منوی کشویی یا لیست در طول فرایند احراز هویت هستند. این انتخاب ممکن است با نام‌های authgroup (در VPNهای سیسکو)، realm (جونیپر، پالس، فورتی‌نت)، domain (اف۵)، و gateway (گلوبال‌پروتکت) شناخته شود. این گزینه تلاش می‌کند فیلد مناسب و مختص هر پروتکل را به طور خودکار با مقدار دلخواه پر کند.

احراز هویت در VPN، نمایش اطلاعات مورد نیاز برای برقراری اتصال در قالبی که بتواند برای تنظیم متغیرهای محیطی پوسته استفاده شود، و سپس خروج.

هنگامی که OpenConnect با این گزینه فراخوانی شود، اتصال واقعی VPN را ایجاد نمی‌کند و رابط تونل را نیز پیکربندی نخواهد کرد، بلکه در صورت موفقیت، خروجی مشابه زیر را در stdout چاپ می‌کند:

COOKIE='3311180634@13561856@1339425499@B315A0E29D16C6FD92EE...'
HOST='10.0.0.1'
CONNECT_URL='https://vpnserver.example.com'
FINGERPRINT='469bb424ec8835944d30bc77c77e8fc1d8e23a42'
RESOLVE='vpnserver.example.com:10.0.0.1'
بنابراین، می‌توانید openconnect را به عنوان یک کاربر بدون امتیاز ویژه (با دسترسی به توکن‌های PKCS#11 کاربر و غیره) برای احراز هویت فراخوانی کنید، و سپس openconnect را به طور جداگانه برای برقراری اتصال واقعی به عنوان ریشه (root) اجرا نمایید:
eval `openconnect --authenticate https://vpnserver.example.com`;
[ -n ["$COOKIE"] ] && echo ["$COOKIE"] |
  sudo openconnect --cookie-on-stdin $CONNECT_URL --servercert $FINGERPRINT --resolve $RESOLVE

نسخه‌های پیشین OpenConnect فقط متغیر HOST (حاوی آدرس عددی سرور) را تولید می‌کردند، و نه متغیرهای CONNECT_URL یا RESOLVE. متعاقبا دریافتیم که سرورهای پشت پراکسی ممکن است به درستی پاسخ ندهند مگر اینکه نام صحیح DNS در فاز اتصال وجود داشته باشد، و پشتیبانی از پروتکل‌های VPN را اضافه کردیم که بخش path در URL سرور ممکن است در فاز اتصال مهم باشد، که این امر منجر به افزودن CONNECT_URL و RESOLVE و توصیه به استفاده از آن‌ها به شرح بالا شد. اگر مطمئن نیستید که در حال اجرای نسخه جدیدتری از OpenConnect هستید که این متغیرها را خروجی می‌دهد، از دستور زیر استفاده کنید (سازگار با بیشتر مشتقات پوسته Bourne) که هم با نسخه جدیدتر و هم با نسخه قدیمی‌تر کار می‌کند:

sudo openconnect --cookie-on-stdin ${CONNECT_URL:-$HOST} --servercert $FINGERPRINT ${RESOLVE:+--resolve=$RESOLVE}
تنها دریافت و چاپ کوکی؛ متصل نشدن (این گزینه در اصل زیرمجموعه‌ای از --authenticate است).
چاپ کوکی در stdout پیش از اتصال (برای مفهوم این کوکی به --authenticate مراجعه کنید)
فایل CA اضافی برای اعتبارسنجی سرور. به طور پیش‌فرض، این گزینه به سادگی باعث می‌شود OpenConnect گواهی(های) ریشه CA بیشتری را علاوه بر مواردی که مورد اعتماد سیستم هستند، مورد اعتماد قرار دهد. از گزینه --no-system-trust برای جلوگیری از اعتماد OpenConnect به مراجع صدور گواهی پیش‌فرض سیستم استفاده کنید.
به مراجع صدور گواهی پیش‌فرض سیستم اعتماد نشود. اگر این گزینه داده شود، فقط مراجع صدور گواهی ارائه‌شده با گزینه --cafile (در صورت وجود) به طور خودکار مورد اعتماد قرار خواهند گرفت.
قابلیت IPv6 به سرور اعلان نشود
تنظیم رمزهای OpenSSL مورد پشتیبانی برای DTLS
تنظیم رمزهای OpenSSL برای DTLS نسخه 1.2 سیسکو
استفاده از PORT به عنوان پورت محلی برای دیتاگرام‌های DTLS و UDP
فعال‌سازی خروجی تفصیلی تمام درخواست‌های HTTP و بدنه تمامی پاسخ‌های دریافت شده از سرور.
اعمال رازداری روبه‌جلو بی‌نقص (PFS). این امر تضمین می‌کند که در صورت به خطر افتادن کلید بلندمدت سرور، کلیدهای نشستی که پیش از افشای کلید ایجاد شده‌اند، مصون خواهند ماند. اگر این گزینه ارائه شود و سرور از PFS در کانال TLS پشتیبانی نکند، اتصال برقرار نخواهد شد.

قابلیت PFS در نسخه‌های سیسکو ASA نسخه 9.1(2) و بالاتر در دسترس است؛ ممکن است لازم باشد مجموعه رمز مناسب توسط مدیر سیستم به صورت دستی با استفاده از تنظیم ssl encryption فعال شود.

غیرفعال‌سازی DTLS و ESP
نسخه 8.2.2.5 نرم‌افزار Cisco ASA دارای باگی است که هنگام استفاده مجدد از اتصالات HTTP برای چندین درخواست، گواهی SSL کلاینت را فراموش می‌کند. تاکنون، این مشکل فقط در اتصال اولیه مشاهده شده است، جایی که سرور یک پاسخ تغییرمسیر HTTP/1.0 با دستور صریح Connection: Keep-Alive می‌دهد. OpenConnect از نسخه 2.22 یک راه‌حل بدون قید و شرط برای این موضوع دارد، که هرگز نباید از آن دستور پس از یک پاسخ HTTP/1.0 پیروی کرد.

با این حال، تیم پشتیبانی سیسکو نتوانست پاسخ مناسبی به گزارش باگ ارائه دهد و ما نمی‌دانیم این باگ تحت چه شرایط دیگری ممکن است بروز پیدا کند. بنابراین این گزینه برای غیرفعال کردن تمامی استفاده‌های مجدد از نشست‌های HTTP و برقراری یک اتصال جدید برای هر درخواست وجود دارد. اگر به نظر می‌رسد سرور شما گواهی‌تان را شناسایی نمی‌کند، این گزینه را امتحان کنید. اگر تغییری ایجاد کرد، لطفاً این اطلاعات را به لیست پستی openconnect-devel@lists.infradead.org گزارش دهید.

هرگز برای احراز هویت با رمز عبور (یا SecurID) تلاش نشود.
جلوگیری از اعلان پشتیبانی از هرگونه حالت احراز هویت که به مرورگر خارجی نیاز دارد توسط OpenConnect به سرور.

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

تلاش برای ارسال درخواست احراز هویت/پیکربندی با متد POST به صورت XML به سرور انجام نشود؛ در عوض از متد سنتی GET که توسط کلاینت‌ها و سرورهای قدیمی‌تر استفاده می‌شد، استفاده شود.

این گزینه یک راهکار موقت برای سازگاری است تا مشکلات احتمالی کدی که به طور خودکار به روش قدیمی بازمی‌گردد دور زده شود. این کار باعث می‌شود OpenConnect رفتاری شبیه به نسخه‌های قدیمی‌تر (4.08 و پایین‌تر) داشته باشد. اگر متوجه شدید که به استفاده از این گزینه نیاز دارید، باگی در OpenConnect یافته‌اید. لطفاً به https://www.infradead.org/openconnect/mail.html مراجعه کرده و این موضوع را به توسعه‌دهندگان گزارش دهید.

الگوریتم‌های رمزنگاری کهنه و شکسته 3DES و RC4 ناامن هستند؛ ما به صراحت آن‌ها را به طور پیش‌فرض غیرفعال کرده‌ایم. با این حال، برخی از سرورهای VPN که هنوز مورد استفاده هستند، توانایی استفاده از الگوریتم‌های بهتری را ندارند.

این گزینه استفاده از این الگوریتم‌های ناامن و همچنین استفاده از SHA1 را برای اعتبارسنجی گواهی سرور فعال می‌کند.

منتظر ورودی کاربر نماند؛ در صورت نیاز به ورودی، خارج شود.
خواندن رمز عبور از ورودی استاندارد
انتخاب پروتکل VPN PROTO برای استفاده در اتصال. پروتکل‌های پشتیبانی‌شده عبارتند از: anyconnect برای سیسکو AnyConnect (پیش‌فرض)، nc برای پشتیبانی آزمایشی از جونیپر Network Connect (همچنین توسط اکثر سرورهای Ivanti/Pulse Connect Secure پشتیبانی می‌شود)، pulse برای پشتیبانی آزمایشی از Ivanti/Pulse Connect Secure، gp برای پشتیبانی آزمایشی از پالو آلتو نتورکز GlobalProtect، f5 برای پشتیبانی آزمایشی از اف۵ Big-IP، fortinet برای پشتیبانی آزمایشی از فورتی‌نت Fortigate، و array برای پشتیبانی آزمایشی از SSL VPN ارِی نتورکز (Array Networks).

برای جزئیات بیشتر درباره ویژگی‌ها و کاستی‌های هر یک از پروتکل‌ها، به https://www.infradead.org/openconnect/protocols.html مراجعه کنید.

برنامه OpenConnect هنوز از تمام گزینه‌های احراز هویت مورد استفاده توسط Pulse پشتیبانی نمی‌کند، و همچنین از Host Checker/TNCC در Pulse پشتیبانی نمی‌نماید. اگر VPN مبتنی بر Junos/Ivanti Pulse شما هنوز با --protocol=pulse پشتیبانی نمی‌شود، ممکن است --protocol=nc یک گزینه جایگزین کاربردی باشد.

فعال‌سازی تولید رمز عبور یک‌بارمصرف با استفاده از الگوریتم MODE. گزینه --token-mode=rsa کتابخانه libstoken را برای تولید کد توکن RSA SecurID فراخوانی می‌کند، --token-mode=totp یک رمز عبور مبتنی بر زمان مطابق با RFC 6238 تولید می‌کند، و --token-mode=hotp یک رمز عبور مبتنی بر HMAC مطابق با RFC 4226 ایجاد خواهد کرد. توکن‌های Yubikey که کدهای OATH را در سخت‌افزار تولید می‌کنند، با --token-mode=yubioath پشتیبانی می‌شوند. گزینه --token-mode=oidc از توکن ارائه‌شده OpenIDConnect به عنوان یک توکن حامل (bearer token) مطابق با RFC 6750 استفاده خواهد کرد.
کلید محرمانه برای استفاده هنگام تولید رمزهای یک‌بارمصرف/کدهای تایید. کلیدهای TOTP/HOTP با کدگذاری Base 32 می‌توانند با مشخص کردن "base32:" در ابتدای کلید استفاده شوند، و برای کلیدهای HOTP شمارنده توکن می‌تواند پس از یک ویرگول مشخص شود.

کلیدهای محرمانه RSA SecurID می‌توانند به عنوان یک URI اندروید/آیفون یا یک رشته خام عددی CTF (با یا بدون خط تیره) مشخص شوند.

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

برای OIDC، کلید محرمانه همان توکن حامل (bearer token) است که باید استفاده شود.

پارامتر FILENAME، در صورت مشخص شدن، می‌تواند شامل هر یک از رشته‌های فوق باشد. یا می‌تواند حاوی یک بذر XML مربوط به SecurID (SDTID) باشد.

اگر این گزینه حذف شود و --token-mode برابر با "rsa" باشد، کتابخانه libstoken سعی خواهد کرد از بذر توکن نرم‌افزاری ذخیره‌شده در ~/.stokenrc توسط دستور "stoken import" استفاده کند.

پس از قطع ارتباط یا تشخیص همتای مرده (Dead Peer Detection)، تلاش برای اتصال مجدد را به مدت SECONDS ثانیه ادامه دهد. مقدار پیش‌فرض ۳۰۰ ثانیه است، به این معنی که openconnect می‌تواند یک اتصال VPN را پس از قطعی موقت شبکه که تا ۳۰۰ ثانیه طول بکشد، بازیابی کند.
تفکیک خودکار نام میزبان HOST به IP به جای استفاده از سرویس تفکیک‌کننده معمول شبکه برای جستجوی آن.
هنگام ایجاد اتصالات جدید TLS، همیشه نام میزبان HOST را به عنوان SNI (نشان‌گر نام سرور) به جای نام میزبان واقعی ارائه دهد، که نام واقعی همچنان در هدر 'Host:' پروتکل HTTP ارسال خواهد شد، و انتظار داشته باشد که گواهی همتا به جای نام میزبان واقعی با SNI مطابقت داشته باشد. این امر ممکن است برای تکنیک Domain Fronting مفید باشد، که از طریق آن می‌توان برخی اتصالات اینترنتی فیلترشده یا سانسورشده را دور زد.

توجه داشته باشید که ارسال مقادیر متفاوت برای SNI و هدر 'Host:' استانداردهای HTTP را نقض می‌کند و توسط بسیاری از ارائه‌دهندگان میزبانی ابری مسدود شده است.

پذیرش گواهی SSL سرور تنها در صورتی که با اثرانگشت (fingerprint) ارائه‌شده مطابقت داشته باشد. این گزینه متضمن --no-system-trust است، و ممکن است چندین بار به منظور پذیرش چندین اثرانگشت احتمالی مشخص شود.

انواع اثرانگشت مجاز عبارتند از SHA1، SHA256 و PIN-SHA256. آن‌ها با پیشوندهای 'sha1:'، 'sha256:' و 'pin-sha256:' در ابتدای هش کدگذاری‌شده متمایز می‌شوند. دو مورد اول شناسه‌های سفارشی هستند که کدگذاری هگزادسیمال کلید عمومی همتا را ارائه می‌دهند، در حالی که 'pin-sha256:' همان PIN کلید طبق RFC7469 است که از کدگذاری base64 استفاده می‌کند. برای تسهیل برخی موارد استفاده آزمایشی، تطابق جزئی هش نیز پذیرفته خواهد شد، مشروط بر اینکه حداقل ۴ نویسه پس از پیشوند باشد.

استفاده از STRING به عنوان مقدار فیلد 'User-Agent:' در هدر HTTP.

برخی از سرورهای VPN ممکن است به مقادیر خاصی مطابق با مقادیر ارسالی توسط کلاینت‌های اختصاصی VPN برای احراز هویت یا اتصال موفق نیاز داشته باشند. برای مثال، هنگام اتصال به سرور VPN سیسکو، --useragent 'AnyConnect Windows 4.10.06079' یا --useragent 'Cisco AnyConnect VPN Agent for Windows 2.2.0133' یا هنگام اتصال به سرور Pulse، --useragent 'Pulse-Secure/9.1.11.6725'.

استفاده از STRING به عنوان نسخه نرم‌افزار گزارش‌شده به سرور اصلی (head end). (مانند --version-string '2.2.0133')
استفاده از STRING به عنوان مقدار فیلد 'X-CSTP-Hostname:' در هدر HTTP. برای مثال --local-hostname 'mypc'، مقدار 'mypc' را به عنوان نام میزبان پیشنهادی برای اشاره به آدرس IP ارائه‌شده اعلان می‌کند.
نوع سیستم‌عامل برای گزارش به درگاه. مقادیر شناخته‌شده عبارتند از: linux، linux-64، win، mac-intel، android، apple-ios. گزارش یک سیستم‌عامل متفاوت ممکن است بر خط‌مشی دسترسی پویا (DAP) اعمال‌شده روی نشست VPN تاثیر بگذارد. اگر درگاه به CSD نیاز داشته باشد، همچنین باعث می‌شود باینری تروجان CSD مربوطه دانلود شود، بنابراین در صورتی که این کد روی ماشین محلی قابل اجرا نباشد، ممکن است نیاز به استفاده از --csd-wrapper داشته باشید.

در فاز داده اتصال، سیگنال‌های زیر مدیریت می‌شوند:

خاتمه تمیز ارتباط را با خروج از نشست (logout)، قطع ارتباط از درگاه، و اجرای vpnc-script برای بازیابی پیکربندی شبکه انجام می‌دهد.
ارتباط با درگاه را قطع کرده و vpnc-script را اجرا می‌کند، اما از نشست خارج نمی‌شود؛ این امر امکان اتصال مجدد در آینده را با استفاده از --cookie فراهم می‌سازد.
پیام پیشرفت را همراه با اطلاعات و آمار تفصیلی اتصال می‌نویسد.
قطع و اتصال مجدد فوری را اجبار می‌کند؛ این سیگنال می‌تواند برای بازیابی سریع پس از تغییرات آدرس IP شبکه محلی (LAN) استفاده شود.

برای ویژگی‌های مختلفی که مایل بودیم OpenConnect دارای آن‌ها باشد به https://www.infradead.org/openconnect/contribute.html و برای اطلاعات درباره رفتارها و محدودیت‌های خاص هر یک از پروتکل‌های VPN به https://www.infradead.org/openconnect/protocols.html مراجعه کنید.

ocserv(8)

David Woodhouse <dwmw2@infradead.org>