WG(8) WireGuard WG(8)

wg - تنظیم و بازیابی پیکربندی رابط‌های WireGuard

wg [ COMMAND ] [ OPTIONS ]... [ ARGS ]...

ابزار wg برنامهٔ پیکربندی برای دریافت و تنظیم پیکربندی رابط‌های تونل WireGuard است. خود رابط‌ها را می‌توان با استفاده از ip-link(8) اضافه و حذف کرد، و آدرس‌های IP و جدول‌های مسیریابی آن‌ها را می‌توان با استفاده از ip-address(8) و ip-route(8) تنظیم نمود. ابزار wg مجموعه‌ای از زیردستورها را برای تغییر جنبه‌های اختصاصی رابط‌های WireGuard فراهم می‌کند.

اگر هیچ دستور مشخصی داده نشود، به طور پیش‌فرض از show استفاده می‌شود. به زیردستورهایی که آرگومان INTERFACE می‌گیرند، باید یک رابط WireGuard داده شود.

پیکربندی جاری WireGuard و اطلاعات زمان اجرای رابط مشخص‌شدهٔ <interface> را نمایش می‌دهد. اگر هیچ <interface> مشخص نشود، مقدار پیش‌فرض آن all خواهد بود. اگر interfaces مشخص شود، فهرستی از تمامی رابط‌های WireGuard را خط‌به‌خط چاپ کرده و خارج می‌شود. اگر پس از مشخص کردن رابط هیچ گزینه‌ای داده نشود، فهرستی از تمام مشخصه‌ها را به شکلی خوانا و مناسب ترمینال چاپ می‌کند. در غیر این صورت، اطلاعات خواسته‌شده را تفکیک‌شده با خط جدید و تب چاپ می‌کند که برای استفاده در اسکریپت‌ها مناسب است. برای این حالت نمایش اسکریپتی، اگر all مشخص شده باشد، فیلد نخست برای تمام دسته‌بندی‌های اطلاعات نام رابط خواهد بود. اگر dump مشخص شود، چندین خط چاپ می‌شود؛ خط نخست به ترتیب و با جداکننده تب شامل: private-key، public-key، listen-port و fwmark است. خطوط بعدی برای هر یک از همتایان (peers) چاپ می‌شوند و به ترتیب با تب شامل: public-key، preshared-key، endpoint، allowed-ips، latest-handshake، transfer-rx، transfer-tx و persistent-keepalive خواهند بود.
پیکربندی جاری <interface> را در قالبی که در بخش قالب فایل پیکربندی (CONFIGURATION FILE FORMAT) در ادامه توضیح داده شده است، نمایش می‌دهد.
مقادیر پیکربندی را برای <interface> مشخص‌شده تنظیم می‌کند. می‌توان چندین peer تعیین کرد، و اگر آرگومان remove برای یک همتا داده شود، آن همتا حذف می‌شود نه پیکربندی. اگر listen-port مشخص نشود یا برابر با 0 قرار گیرد، هنگام بالا آمدن رابط یک درگاه به طور تصادفی انتخاب خواهد شد. هر دو مقدار private-key و preshared-key باید فایل باشند، چرا که آرگومان‌های خط فرمان در بیشتر سیستم‌ها امن و محرمانه تلقی نمی‌شوند؛ اما اگر از bash(1) استفاده می‌کنید، می‌توانید با تعیین عبارت: <(echo PRIVATEKEYSTRING) به عنوان private-key یا preshared-key، یک رشته را به شکل امن ارسال کنید. اگر /dev/null یا فایل خالی دیگری به عنوان نام فایل برای private-key یا preshared-key مشخص شود، کلید از دستگاه حذف می‌گردد. استفاده از preshared-key اختیاری است و می‌توان از آن صرف‌نظر کرد؛ این گزینه یک لایه اضافی از رمزنگاری کلید متقارن را برای ترکیب با رمزنگاری کلید عمومی موجود اضافه می‌کند تا مقاومت پساکوانتومی فراهم شود. اگر allowed-ips مشخص شود اما مقدار آن یک رشته خالی باشد، تمام IPهای مجاز از همتا حذف می‌شوند. به طور پیش‌فرض، allowed-ips جایگزین IPهای مجاز قبلی همتا می‌شود. اگر قبل از هر یک از IPها کاراکتر + یا - قرار گیرد، به‌روزرسانی به صورت افزایشی خواهد بود؛ IPهایی با پیشوند '+' به IPهای مجاز همتا اضافه می‌شوند (در صورتی که موجود نباشند) و IPهایی با پیشوند '-' حذف می‌گردند (در صورتی که وجود داشته باشند). استفاده از persistent-keepalive اختیاری است و به طور پیش‌فرض غیرفعال است؛ تنظیم آن روی 0 یا "off" آن را غیرفعال می‌کند. در غیر این صورت، این مقدار نشان‌دهندهٔ فاصله‌ای بر حسب ثانیه (بین ۱ تا ۶۵۵۳۵) است که در آن بازه، بسته‌های خالی احرازهویت‌شده برای همتا ارسال می‌شود تا نگاشت NAT یا فایروال با حفظ وضعیت (stateful) به طور مداوم معتبر باقی بماند. برای مثال، اگر رابط به ندرت ترافیک ارسال می‌کند اما ممکن است هر لحظه ترافیکی از همتا دریافت کند و پشت NAT قرار دارد، تنظیم بازه persistent keepalive روی ۲۵ ثانیه برای آن مفید خواهد بود؛ با این حال، بیشتر کاربران به این گزینه نیازی نخواهند داشت. استفاده از fwmark اختیاری است و به طور پیش‌فرض خاموش است؛ تنظیم آن روی 0 یا "off" آن را غیرفعال می‌کند. در غیر این صورت، این مقدار یک علامت فایروال ۳۲ بیتی برای بسته‌های خروجی است و می‌توان آن را با پیشوند "0x" به صورت هگزادسیمال مشخص کرد.
پیکربندی جاری <interface> را برابر با محتوای <configuration-filename> قرار می‌دهد، که باید در قالبی باشد که در بخش قالب فایل پیکربندی (CONFIGURATION FILE FORMAT) در ادامه توضیح داده شده است.
محتوای <configuration-filename> را (که باید در قالبی باشد که در بخش قالب فایل پیکربندی (CONFIGURATION FILE FORMAT) در ادامه شرح داده شده است) به پیکربندی جاری <interface> الحاق می‌کند.
مانند setconf است، اما ابتدا پیکربندی موجود را بازخوانی کرده و تنها تغییراتی را اعمال می‌کند که صریحاً بین فایل پیکربندی و رابط تفاوت داشته باشند. این کار بسیار کم‌بازده‌تر از setconf است، اما این مزیت را دارد که نشست‌های جاری همتایان را مختل نمی‌کند. محتوای <configuration-filename> باید در قالبی باشد که در بخش قالب فایل پیکربندی (CONFIGURATION FILE FORMAT) در ادامه شرح داده شده است.
یک کلید خصوصی تصادفی در قالب بیس۶۴ (base64) تولید کرده و آن را در خروجی استاندارد چاپ می‌کند.
یک کلید پیش‌اشتراکی تصادفی در قالب بیس۶۴ تولید کرده و آن را در خروجی استاندارد چاپ می‌کند.
یک کلید عمومی را از کلید خصوصی متناظر (تولیدشده با genkey) که به صورت بیس۶۴ در ورودی استاندارد داده شده محاسبه کرده و آن را به صورت بیس۶۴ در خروجی استاندارد چاپ می‌کند.

می‌توان یک کلید خصوصی و کلید عمومی متناظر آن را به طور هم‌زمان با اجرای دستور زیر تولید کرد:
$ umask 077
$ wg genkey | tee private.key | wg pubkey > public.key

پیام راهنمای نحوهٔ استفاده را نمایش می‌دهد.

قالب فایل پیکربندی بر پایهٔ INI است. دو بخش سطح بالا وجود دارد: Interface و Peer. می‌توان چندین بخش Peer تعیین کرد، اما تنها یک بخش Interface مجاز است.

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

  • PrivateKey — یک کلید خصوصی در قالب بیس۶۴ که با wg genkey تولید شده است. اجباری.
  • ListenPort — یک درگاه ۱۶ بیتی برای شنود. اختیاری؛ اگر مشخص نشود، به صورت تصادفی انتخاب می‌شود.
  • FwMark — یک مقدار ۳۲ بیتی علامت فایروال (fwmark) برای بسته‌های خروجی. اگر روی 0 یا "off" تنظیم شود، این گزینه غیرفعال است. می‌تواند با پیشوند "0x" به صورت هگزادسیمال مشخص شود. اختیاری.

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

  • PublicKey — یک کلید عمومی در قالب بیس۶۴ که توسط wg pubkey از روی کلید خصوصی محاسبه شده و معمولاً خارج از کانال اصلی (out of band) به ایجادکنندهٔ فایل پیکربندی تحویل داده می‌شود. اجباری.
  • PresharedKey — یک کلید پیش‌اشتراکی در قالب بیس۶۴ که با wg genpsk تولید شده است. اختیاری است و می‌توان از آن صرف‌نظر کرد. این گزینه یک لایهٔ اضافی از رمزنگاری کلید متقارن را به رمزنگاری کلید عمومی موجود اضافه می‌کند تا مقاومت پساکوانتومی فراهم شود.
  • AllowedIPs — فهرستی جداشده با کاما از آدرس‌های IP (نسخه ۴ یا ۶) به همراه ماسک‌های CIDR، که ترافیک ورودی از این آدرس‌ها برای این همتا مجاز بوده و ترافیک خروجی برای این همتا به سمت آن‌ها هدایت می‌شود. مقدار همه‌گیر 0.0.0.0/0 می‌تواند برای تطابق با تمام آدرس‌های IPv4، و ::/0 برای تطابق با تمام آدرس‌های IPv6 مشخص شود. این گزینه می‌تواند چندین بار مشخص گردد.
  • Endpoint — آدرس IP یا نام میزبان نقطه پایانی، به همراه دونقطه و سپس شماره درگاه. این نقطه پایانی به طور خودکار به جدیدترین آدرس IP مبدأ و درگاه بسته‌های به درستی احرازهویت‌شده از سمت همتا به‌روزرسانی می‌شود. اختیاری.
  • PersistentKeepalive — بازه‌ای بر حسب ثانیه (بین ۱ تا ۶۵۵۳۵) که مشخص می‌کند چند وقت یک‌بار یک بسته خالی احرازهویت‌شده به همتا ارسال شود تا نگاشت فایروال با حفظ وضعیت یا NAT به طور مداوم معتبر بماند. برای مثال، اگر رابط به ندرت ترافیک ارسال می‌کند اما ممکن است در هر لحظه ترافیکی از همتا دریافت کند و پشت NAT قرار دارد، تنظیم بازه ۲۵ ثانیه‌ای persistent keepalive برای آن مفید خواهد بود. در صورت تنظیم روی 0 یا "off"، این گزینه غیرفعال می‌شود. به طور پیش‌فرض یا در صورت عدم تعیین، این گزینه غیرفعال است. بیشتر کاربران به این گزینه نیازی نخواهند داشت. اختیاری.

این مثال می‌تواند به عنوان الگویی برای نگارش فایل‌های پیکربندی با پیروی از ساختار شبیه INI استفاده شود. نویسه‌های پس از '#' (شامل خود آن) به عنوان توضیح (comment) در نظر گرفته شده و نادیده گرفته می‌شوند.


[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820


[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
Endpoint = 192.95.5.67:1234
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24


[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
Endpoint = [2607:5300:60:6b0::c05f:543]:2468
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16


[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
Endpoint = test.wireguard.com:18981
AllowedIPs = 10.10.10.230/32

گاهی داشتن اطلاعات درباره وضعیت زمان اجرای یک تونل مفید است. هنگام استفاده از ماژول هسته لینوکس روی هسته‌ای که از اشکال‌زدایی پویا (dynamic debugging) پشتیبانی می‌کند، می‌توان اطلاعات اشکال‌زدایی را با اجرای دستور زیر با دسترسی کاربر ریشه در dmesg(1) ثبت کرد:

# modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

در OpenBSD و FreeBSD، اطلاعات اشکال‌زدایی را می‌توان برای هر رابط به صورت جداگانه با استفاده از ifconfig(1) در dmesg(1) ثبت نمود:

# ifconfig wg0 debug

در پیاده‌سازی‌های فضای کاربری (userspace)، معمولاً متغیر محیطی LOG_LEVEL روی verbose تنظیم می‌شود.

اگر روی always تنظیم شود، خروجی همیشه با رنگ‌های ANSI چاپ می‌شود. اگر روی never تنظیم شود، خروجی رنگی ANSI هرگز چاپ نخواهد شد. اگر روی auto یا یک مقدار نامعتبر تنظیم شود یا تنظیم نشده باشد، خروجی رنگی ANSI تنها در زمان ارسال به TTY چاپ خواهد شد.
اگر روی never تنظیم شود، زیردستور خوانای show کلیدهای خصوصی و پیش‌اشتراکی را در خروجی نمایش می‌دهد. اگر روی always یا یک مقدار نامعتبر تنظیم شود یا تنظیم نشده باشد، کلیدهای خصوصی و پیش‌اشتراکی به صورت "(hidden)" چاپ خواهند شد.
اگر روی یک عدد صحیح یا infinity تنظیم شود، تحلیل DNS برای نقطه پایانی هر همتا در خطاهای موقت تا آن تعداد دفعات با افزایش تاخیر بین تلاش‌ها مجدداً امتحان خواهد شد. در صورت عدم تنظیم، مقدار پیش‌فرض ۱۵ بار تلاش مجدد است.

wg-quick(8), ip(8), ip-link(8), ip-address(8), ip-route(8).

wg توسط Jason A. Donenfeld نوشته شده است. برای دریافت به‌روزرسانی‌ها و اطلاعات بیشتر، صفحهٔ پروژه در وب در دسترس است: وب جهانی (World Wide Web).

2015 August 13 ZX2C4