یک پیکربندی WireGuard را خط به خط بخوانید، از Interface تا Peer
کلیدهای Interface از این نقطه انتهایی هستند و کلیدهای peer از طرف دیگر. هر خط را یک جهت بخوانید، سپس بررسی کنید wg-quick چه چیزی دور پروتکل اضافه کرده است.
بیشتر پیکربندیهای خراب WireGuard در مقدار اشتباه نمیکنند؛ مقدار درست را در طرف نادرست میگذارند. کلید خصوصی از این ماشین است، peer کلید عمومی ماشین دیگر را حمل میکند، و آدرس در بلوک interface مینشیند هرچند توضیح میدهد تونل کجا زندگی میکند. فایل را مانند دو جهتی که به هم میرسند بخوانید، سپس بررسی کنید اسکریپت کمکی چه چیزی روی آن اضافه کرده است. خود پروتکل فیلدهای کمتری از فایل دارد و فیلدهای اضافی ارزش دانستن جداگانه را دارند.
کلیدهای interface این ماشین را توصیف میکنند
بلوک interface هویت خود این نقطه انتهایی را نگه میدارد. PrivateKey همان هویت است و هرگز میزبان را ترک نمیکند؛ کلید عمومی متناظر از آن مشتق میشود و همان است که peerهای دیگر فهرست میکنند. ListenPort جایی است که این طرف دستدهیها را دریافت میکند، پس دو کارخواه پشت یک آدرس به درگاههای متفاوت نیاز دارند.
Address آدرس تونلی است که این میزبان به آن پاسخ میدهد، با طول پیشوند نوشته شده چون خودش هم منبعی است که استفاده خواهد کرد. اشتباه در پیشوند اینجا تغییر میدهد میزبان کدام مقصدها را مستقیماً متصل میداند و این خرابیهایی میسازد که شبیه مسیریابیاند نه پیکربندی.
بقیه چیزها در یک [Interface] بلوک با یک کارخواه واقعی معمولاً توسط wg-quick اضافه میشود: DNS، MTU، Table، و خطوط قلاب. اینها فیلدهای پروتکل نیستند و یک wg نصب خالی کاملاً نادیدهشان میگیرد.
هر ورودی peer یک طرف دیگر را توصیف میکند
یک [Peer] بلوک طرف دور است. PublicKey کلید مشتقشده آن طرف است، هرگز کلید خصوصیشان نیست، و PresharedKey یک راز اضافی اختیاری است که هر دو طرف باید یکسان نگه دارند. Endpoint مقصد ارسال است، و PersistentKeepalive از این میزبان میخواهد پس از فاصله زمانی بستهای بفرستد وقتی چیز دیگری بیرون نمیرود.
دو اشتباه بیشتر سردرگمی اینجا را توضیح میدهد. کپی کردن کلید خصوصی خودتان در بلوک peer باعث میشود دو سر یک هویت را شریک شوند و دستدهی به شکلی شکست میخورد که بد ثبت میشود. بیرون گذاشتن Endpoint روی یک کارخواه معمولاً عمدی است، چون سرور آدرس را از دستدهی ورودی یاد میگیرد؛ بیرون گذاشتنش روی سروری که باید آغاز کند عمدی نیست. همچنین به یاد داشته باشید keepalive یک نگاشت NAT را باز نگه میدارد و توان عبور را بهتر نمیکند و تأخیر را کم نمیکند، پس سی ثانیه بسته اضافی وقتی ترافیک از قبل جریان دارد چیزی نمیخرد.
AllowedIPs مسیریابی است، نه فهرست مجوز
AllowedIPs مسیریابی رمزکلیدی WireGuard است. در خروج، بر اساس مقصد تصمیم میگیرد کدام peer بسته را دریافت میکند. در ورود، بر اساس منبع تصمیم میگیرد بستهای که از آن peer میرسد پذیرفته میشود یا نه. همان فیلد هر دو کار را انجام میدهد، به همین دلیل فهرست کنترل دسترسی نیست و فهرست وبسایتهای مجاز هم نیست.
یک AllowedIPs باریک روی سرور برای یک کارخواه یعنی سرور فقط بستههایی را میپذیرد که آن منابع را ادعا کنند و فقط همان مقصدها را به آن کارخواه میفرستد. یک طرف را بدون طرف دیگر گسترده کنید و تونلی میگیرید که بالا میآید و چیزی عبور نمیدهد.
wg-quick چه چیزی دور پروتکل اضافه میکند
wg-quick همان فایل را میخواند و گامهای شبکهای را انجام میدهد که پروتکل به سیستم عامل واگذار میکند. آدرس interface را تخصیص میدهد، مسیرهای مشتق از AllowedIPs را اضافه میکند، تنظیمات resolver را مینویسد و فرمانهای قلاب را به ترتیب اجرا میکند.
آن لایه عدم تقارن کلاسیک را توضیح میدهد. فایلی با 0.0.0.0/0 و یک خط DNS به کارخواه مسیر پیشفرض و resolver میدهد و به قواعد ارسال یا NAT سرور اصلاً کاری ندارد. آنها به پیکربندی خود سرور تعلق دارند و هیچ فایل کارخواهی نمیتواند تأمینشان کند.
یک مالک برای فایل نگه دارید. ویرایش دستی آن وقتی SaveConfig فعال است یعنی ویرایش شما دفعه بعد که interface پایین بیاید ناپدید میشود، و interface به شما نخواهد گفت که این اتفاق افتاده است.
وضعیت اعمالشده را بررسی کنید، نه فایل را
فایل یک قصد است. وضعیت اعمالشده چیزی است که هسته نگه میدارد و هر وقت یک کمککننده، یک drop-in یا یک قلاب بعد از فعالسازی چیزی را ویرایش کند از هم جدا میشوند.
وضعیت زنده و آدرسدهی را با هم بخوانید، سپس هر دو را با آنچه نوشتهاید مقایسه کنید:
sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.confاگر فهرست peer خالی است، interface بدون اعمال پیکربندیاش ساخته شده است. اگر آدرسها و مسیرها وجود دارند اما شمارندهها صفر میمانند، فایل بارگذاری شده و دستدهی شکست میخورد، که مشکلی مربوط به کلید یا نقطه انتهایی است نه ترتیب بخشها. پیش از ویرایش دو نما را مقایسه کنید، چون فاصله بین آنها معمولاً همان نقص واقعی است.