badvpn-client(8) System Manager's Manual badvpn-client(8)

badvpn-client - دیمن گره VPN برای سامانه شبکه خصوصی مجازی نظیر‌به‌نظیر BadVPN

badvpn-client

[--help]
[--version]
[--logger <stdout/syslog>]
(logger=syslog?

[--syslog-facility <string>]
[--syslog-ident <string>]
)
[--loglevel <0-5/none/error/warning/notice/info/debug>]
[--channel-loglevel <channel-name> <0-5/none/error/warning/notice/info/debug>] ...
[--threads <integer>]
[--ssl --nssdb <string> --client-cert-name <string>]
[--server-name <string>]
--server-addr <addr>
[--tapdev <name>]
[--scope <scope_name>] ...
[
--bind-addr <addr>
(transport-mode=udp? --num-ports <num>)
[--ext-addr <addr / {server_reported}:port> <scope_name>] ...
] ...
--transport-mode <udp/tcp>
(transport-mode=udp?
--encryption-mode <blowfish/aes/none>
--hash-mode <md5/sha1/none>
[--otp <blowfish/aes> <num> <num-warn>]
[--fragmentation-latency <milliseconds>]
)
(transport-mode=tcp?
(ssl? [--peer-ssl])
[--peer-tcp-socket-sndbuf <bytes / 0>]
)
[--send-buffer-size <num-packets>]
[--send-buffer-relay-size <num-packets>]
[--max-macs <num>]
[--max-groups <num>]
[--igmp-group-membership-interval <ms>]
[--igmp-last-member-query-time <ms>]
[--allow-peer-talk-without-ssl]

این صفحه راهنما به مستندسازی کلاینت BadVPN می‌پردازد که دیمنی برای یک گره در شبکه VPN با نام BadVPN است. برای توضیحات کلی درباره BadVPN، به badvpn(7) مراجعه کنید.

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

کلاینت BadVPN به‌طور کامل از طریق خط فرمان پیکربندی می‌شود.

نمایش نسخه و نحو خط فرمان و خروج.
نمایش نسخه و خروج.
انتخاب محل ثبت پیام‌های وقایع (لاگ). پیش‌فرض stdout است. قابلیت syslog در ویندوز در دسترس نیست.
هنگام ثبت وقایع در syslog، بخش تسهیلات (facility) را تنظیم می‌کند. نام facility باید با حروف کوچک باشد.
هنگام ثبت وقایع در syslog، شناسه (ident) را تعیین می‌کند.
تنظیم سطح پیش‌فرض ثبت وقایع.
تنظیم سطح ثبت وقایع برای یک کانال لاگ‌برداری مشخص.
تعداد پیشنهادی ریسمان‌های (threads) اضافی برای استفاده در محاسبات بالقوه طولانی (مانند رمزنگاری و تولید OTP). اگر صفر (0) باشد (پیش‌فرض)، ریسمان‌های اضافی غیرفعال شده و تمام محاسبات در حلقه رویدادها (event loop) انجام خواهند شد. اگر منفی (<0) باشد، حدسی احتمالاً بر اساس تعداد پردازنده‌ها زده می‌شود. اگر مثبت (>0) باشد، تعداد ریسمان‌های مشخص‌شده استفاده خواهد شد.
استفاده از TLS. نیازمند گزینه‌های --nssdb و --client-cert-name است.
هنگام استفاده از TLS، پایگاه‌داده NSS مورد استفاده را تعیین می‌کند؛ احتمالاً چیزی شبیه به sql:/some/folder.
هنگام استفاده از TLS، نام گواهی مورد استفاده را مشخص می‌کند. گواهی باید به‌راحتی در دسترس باشد.
نام سرور مورد استفاده جهت اعتبارسنجی گواهی سرور را تنظیم می‌کند. نام سرور به‌طور پیش‌فرض همان نام موجود در نشانی سرور (یا یک نشانی عددی) است.
نشانی سرور برای اتصال را تعیین می‌کند. برای قالب نشانی به توضیحات پایین مراجعه کنید.
دستگاه TAP مورد استفاده را مشخص می‌کند. برای نحوه پیکربندی دستگاه، توضیحات پایین را ببینید. دستگاه TAP یک کارت شبکه مجازی در سیستم‌عامل است، اما به جای دریافت و ارسال فریم‌ها به یک قطعه سخت‌افزاری، یک برنامه (این برنامه) آن را باز کرده تا فریم‌ها را از آن خوانده و در آن بنویسد. اگر شبکه VPN به‌درستی راه‌اندازی شده باشد، دستگاه‌های TAP روی گره‌های VPN به‌گونه‌ای عمل می‌کنند که گویی همگی به یک سوییچ شبکه متصل هستند.
یک محدوده نشانی (scope) مجاز برای اتصال به همتاها اضافه می‌کند. برای افزودن چندین محدوده، می‌توان این گزینه را چند بار مشخص کرد. ترتیب محدوده‌ها اهمیتی ندارد. توجه داشته باشید که باید عملاً امکان اتصال به نشانی‌ها در محدوده داده‌شده وجود داشته باشد؛ هنگامی که همتای دیگری جهت اتصال ما به آن اتصال محلی (bind) برقرار می‌کند، ما اولین نشانی خارجی را که محدوده‌اش برایمان شناخته‌شده است انتخاب می‌کنیم و حتی در صورت ناموفق بودن برقراری اتصال، نشانی‌های خارجی دیگر را امتحان نمی‌کنیم.
یک نشانی برای اتصال محلی (bind) اضافه می‌کند. برای قالب نشانی به توضیحات پایین مراجعه کنید. هنگام تلاش برای اتصال محلی تا همتایی بتواند به ما متصل شود، نشانی‌ها به ترتیبی که مشخص شده‌اند امتحان خواهند شد. اگر از انتقال داده UDP استفاده می‌شود، باید گزینه --num-ports به دنبال آن بیاید تا مشخص کند به چه تعداد درگاه متوالی اجازه اتصال محلی داده شود. برای این که نشانی کاربردی باشد، باید یک یا چند گزینه --ext-addr به دنبال آن بیاید. توجه داشته باشید هنگامی که دو همتا نیاز به برقراری اتصال داده دارند، اینکه کدام‌یک ابتدا تلاش برای اتصال محلی کند اختیاری و تصادفی است.
هنگام استفاده از انتقال UDP، تعداد درگاه‌های متوالی را برای یک نشانی اتصال محلیِ قبلاً مشخص‌شده تنظیم می‌کند. باید به دنبال گزینه --bind-addr قبلی بیاید.
یک نشانی خارجی برای یک نشانی اتصال محلیِ قبلاً مشخص‌شده اضافه می‌کند. باید به دنبال گزینه --bind-addr قبلی بیاید. برای افزودن چندین نشانی خارجی می‌توان این گزینه را چند بار مشخص کرد. برای قالب نشانی به توضیحات پایین مراجعه کنید. علاوه بر این، بخش نشانی IP می‌تواند {server_reported} باشد تا از نشانی IPv4 به همان شکلی که سرور ما را می‌بیند استفاده شود. نشانی‌های خارجی توسط همتای متصل‌شونده به ترتیبی که تعیین شده‌اند بررسی می‌شوند. توجه داشته باشید که همتای متصل‌شونده فقط تلاش می‌کند به اولین نشانی‌ای متصل شود که محدوده‌اش را می‌شناسد و نشانی‌های دیگر را امتحان نمی‌کند. این بدان معناست که همه نشانی‌ها برای برقراری ارتباط باید کار کنند.
پروتکل انتقال را برای اتصالات داده تعیین می‌کند. پروتکل UDP توصیه می‌شود و برای بیشتر شبکه‌ها به بهترین شکل کار می‌کند. در صورتی که شبکه زیرساخت افت بسته بالایی داشته باشد که شبکه مجازی شما قادر به تحمل آن نیست، می‌توان از TCP استفاده کرد. این گزینه باید در تمام همتاها یکسان باشد.
هنگام استفاده از انتقال UDP، حالت رمزنگاری را تنظیم می‌کند. مقدار none به معنای عدم رمزنگاری است و گزینه‌های دیگر یک الگوریتم رمزنگاری مشخص را تعیین می‌کنند. توجه داشته باشید که رمزنگاری تنها در صورتی سودمند است که کلاینت‌ها برای اتصال به سرور از TLS استفاده کنند. حالت رمزنگاری باید در تمام همتاها یکسان باشد.
هنگام استفاده از انتقال UDP، حالت درهم‌سازی (هش) را تعیین می‌کند. مقدار none به معنای عدم وجود هش است و گزینه‌های دیگر نوع خاصی از هش را مشخص می‌کنند. توجه داشته باشید که درهم‌سازی تنها در صورتی مفید است که رمزنگاری نیز استفاده شود. حالت هش باید در تمام همتاها مطابقت داشته باشد.
هنگام استفاده از انتقال UDP، رمزهای عبور یک‌بارمصرف (OTP) را فعال می‌کند. آرگومان اول یک الگوریتم رمز قالبی را مشخص می‌کند که برای تولید رمزهای عبور از یک بذر اولیه (seed) استفاده می‌شود. آرگومان دوم مشخص می‌کند چه تعداد رمز عبور از یک بذر واحد تولید شود. آرگومان سوم تعیین می‌کند پس از مصرف چه تعداد رمز عبور برای ارسال بسته‌ها، تلاشی برای مذاکره بر سر یک بذر جدید با همتای دیگر انجام گیرد. مقدار num باید بزرگ‌تر از صفر (>0) باشد و num-warn باید بزرگ‌تر از صفر (>0) و کوچک‌تر یا مساوی num باشد (<=num). اختلاف (num - num-warn) باید به اندازه کافی بزرگ باشد تا امکان مذاکره برای بذر جدید پیش از اتمام رمزهای عبور فرستنده فراهم شود. مذاکره برای بذر شامل ارسال آن توسط همتای فرستنده به همتای گیرنده از طریق سرور و تایید آن توسط همتای گیرنده از طریق سرور است. توجه داشته باشید که رمزهای عبور یک‌بارمصرف تنها در صورتی مفید هستند که کلاینت‌ها برای اتصال به سرور از TLS استفاده کنند. گزینه OTP به‌جز num-warn باید در تمام همتاها یکسان باشد.
هنگام استفاده از انتقال UDP، حداکثر تاخیر مجاز برای فدا کردن به منظور بسته‌بندی کارآمدتر فریم‌ها درون بسته‌های داده را تنظیم می‌کند. اگر مقدار بزرگ‌تر یا مساوی صفر (>=0) باشد، از یک زمان‌سنج به میزان این میلی‌ثانیه‌ها استفاده می‌شود تا پس از نوشتن اولین بخش بسته، برای رسیدن فریم‌های بیشتر جهت قرار گرفتن در یک بسته ناقص صبر کند. اگر کوچک‌تر از صفر (<0) باشد، بسته‌ها بلافاصله ارسال می‌شوند. مقدار پیش‌فرض 0 است که تنظیمات توصیه‌شده نیز می‌باشد.
هنگام استفاده از انتقال TCP، پروتکل TLS را برای اتصالات داده فعال می‌کند. نیازمند استفاده از TLS برای اتصال به سرور است. برای کارکرد این گزینه، همتاها باید به گواهی‌های یکدیگر اعتماد داشته باشند و گواهی‌ها باید مجوز کاربرد به عنوان سرور TLS را اعطا کنند. این گزینه باید در تمام همتاها یکسان باشد.
مقدار گزینه سوکت SO_SNDBUF را برای سوکت‌های TCP همتا تنظیم می‌کند (صفر برای تنظیم نکردن). مقادیر کمتر، انصاف را هنگام ارسال داده از چندین منبع (محلی و بازپخش) به یک همتای معین بهبود می‌بخشد، اما اگر حاصل‌ضرب پهنای باند در تاخیر (BDP) شبکه بسیار بزرگ باشد، ممکن است منجر به کاهش پهنای باند شود.
حداقل اندازه بافرهای ارسال همتاها را برای ارسال فریم‌های مبدا از این سیستم، بر حسب تعداد بسته‌ها تعیین می‌کند.
حداقل اندازه بافرهای ارسال همتاها را برای بازپخش فریم‌ها از سایر همتاها، بر حسب تعداد بسته‌ها مشخص می‌کند.
حداکثر تعداد نشانی‌های MAC قابل به‌خاطرسپاری برای یک همتا را تنظیم می‌کند. هنگامی که تعداد از این حد فراتر رود، شکافی که کمترین استفاده اخیر را داشته مجدداً استفاده خواهد شد.
حداکثر تعداد عضویت‌های گروه IGMP قابل به‌خاطرسپاری برای یک همتا را تنظیم می‌کند. هنگامی که تعداد از این حد فراتر رود، شکافی که کمترین استفاده اخیر را داشته مجدداً استفاده خواهد شد.
پارامتر Group Membership Interval را برای بررسی دقیق IGMP (ره‌گیری IGMP یا IGMP snooping) بر حسب میلی‌ثانیه تنظیم می‌کند.
پارامتر Last Member Query Time را برای بررسی دقیق IGMP (ره‌گیری IGMP یا IGMP snooping) بر حسب میلی‌ثانیه تنظیم می‌کند.
هنگامی که SSL فعال است، کلاینت‌ها نه‌تنها با استفاده از SSL به سرور متصل می‌شوند، بلکه پیام‌ها را نیز از طریق سرور و به وسیله لایه دیگری از SSL تبادل می‌کنند. این امر از پیام‌ها در برابر حملات علیه سرور محافظت می‌کند. با این حال، نسخه‌های قدیمی‌تر BadVPN (نسخه‌های کمتر از 1.999.109) از این قابلیت پشتیبانی نمی‌کنند. این گزینه به کلاینت‌های قدیمی و جدید اجازه می‌دهد در صورت عدم پشتیبانی همتای دیگر از SSL، بدون استفاده از SSL با یکدیگر تعامل داشته باشند. با این حال، این کار مزایای امنیتی استفاده از SSL را باطل می‌کند، زیرا سرور (که احتمالاً به خطر افتاده است) می‌تواند به همتاها دستور دهد از SSL استفاده نکنند.

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

نشانی‌ها دارای ساختار ipaddr:port هستند، که در آن ipaddr یا یک نشانی IPv4 (نام میزبان یا عددی) است، یا یک نشانی IPv6 که درون قلاب‌ها [] قرار گرفته است (مجدداً نام میزبان یا عددی).

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

توجه داشته باشید که برنامه کلاینت به هیچ وجه دستگاه TAP را پیکربندی نمی‌کند؛ این برنامه تنها فریم‌ها را از آن خوانده و در آن می‌نویسد. شما مسئول پیکربندی آن هستید (مانند بالا آوردن رابط شبکه و تنظیم نشانی IP آن).

لینوکس

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

سپس باید یک دستگاه TAP ماندگار برای باز کردن توسط برنامه کلاینت VPN ایجاد کنید. این کار می‌تواند با استفاده از برنامه tunctl یا openvpn انجام شود. دستگاه با یک حساب کاربری مرتبط خواهد شد که دسترسی استفاده از آن را خواهد داشت؛ این حساب کاربری باید همان کاربری باشد که برنامه کلاینت با آن اجرا می‌شود (نه کاربر ریشه!). برای ایجاد دستگاه با tunctl از دستور `tunctl -u <user> -t tapN` استفاده کنید، و برای ایجاد آن با openvpn از دستور `openvpn --mktun --user <user> --dev tapN` استفاده نمایید، که در آن N عددی است که دستگاه TAP را مشخص می‌کند.

پس از ایجاد دستگاه TAP، گزینه `--tapdev tapN` را به برنامه کلاینت بدهید تا از این دستگاه استفاده کند. توجه داشته باشید که دستگاه پس از خاموش شدن سیستم باقی نمی‌ماند؛ اگر می‌خواهید ایجاد یا پیکربندی دستگاه را خودکار کنید، به مستندات سیستم‌عامل خود مراجعه نمایید.

ویندوز

ویندوز فاقد درایور TAP به صورت پیش‌فرض است. برنامه کلاینت از درایور TAP-Win32 استفاده می‌کند که بخشی از OpenVPN است. لازم است نسخه متن‌باز (!) OpenVPN را نصب کرده و در نصاب حداقل گزینه‌های `TAP Virtual Ethernet Adapter` و `Add Shortcuts to Start Menu` را فعال کنید. می‌توانید نصاب را از نشانی زیر دریافت کنید:
http://openvpn.net/index.php/open-source/downloads.html

نصاب OpenVPN هنگام نخستین اجرا، به صورت خودکار یک دستگاه TAP روی سیستم شما ایجاد می‌کند. برای ایجاد دستگاهی دیگر، از مسیر `Programs -> OpenVPN -> Utilities -> Add a new TAP virtual ethernet adapter` استفاده کنید. ممکن است برای ظاهر شدن این میانبر، لازم باشد OpenVPN را یک بار دیگر نصب کنید.

هنگامی که یک دستگاه TAP دارید، می‌توانید آن را مانند یک کارت شبکه فیزیکی پیکربندی کنید. می‌توانید دستگاه‌های TAP را از روی فیلد `Device Name` آن‌ها شناسایی نمایید.

برای استفاده از دستگاه، گزینه `--tapdev <driver_name>:<interface_name> ` را به برنامه کلاینت بدهید، که در آن <driver_name> نام درایور TAP است (مانند tap0901 برای OpenVPN 2.1 و 2.2) (حساس به حروف کوچک و بزرگ)، و <interface_name> نام رابط شبکه TAP است (مانند `Local Area Connection 2`).

برای مثال‌های استفاده از BadVPN، به badvpn(7) مراجعه کنید.

badvpn-server(8), badvpn(7)

Ambroz Bizjak <ambrop7@gmail.com>

14 July 2011