لینوکس ۳۰۳؛ شب ۳۵: WireGuard؛ کلید ساده، مسیریابی جدی
فهرست نوشته
پیکربندی WireGuard کوتاه است، اما کوتاه بودن فایل به معنی ساده بودن تمام شبکه نیست. امشب دو peer را وصل میکنیم و نقش دوگانهٔ AllowedIPs در انتخاب مسیر و پذیرش مبدأ را میبینیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.
محیط تمرین: srv و client Ubuntu 24.04؛ wireguard-tools؛ کرنل سازگار؛ Snapshot پایه؛ UDP/51820 از client مجاز.
جایگاه در دوره: هدفهای 334.4 آزمون 303-300.
هویت peer با کلید عمومی#
WireGuard گواهی X.509 و CA داخلی OpenVPN را استفاده نمیکند؛ peerها با کلید عمومی شناخته میشوند. مدیریت صدور، تعویض و حذف کلید در طراحی توست. تونل میتواند IP را حمل کند، ولی خودش مجوز خواندن پروندهٔ حسابداری را تعریف نمیکند.
روی هر دو ماشین، جداگانه:
sudo apt install wireguard-tools
umask 077
mkdir -p ~/lpic303/wireguard
cd ~/lpic303/wireguard
wg genkey > private.key
wg pubkey < private.key > public.key
فقط public.key را تبادل کن. از خصوصی هر ماشین، مقدار همان ماشین را برای فایل config استفاده کن؛ کلید خصوصی سرور روی client لازم نیست.
دو فایل wg0.conf#
روی srv، /etc/wireguard/wg0.conf با مالک root و مجوز 600:
[Interface]
Address = 10.32.0.1/30
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.32.0.2/32
روی client:
[Interface]
Address = 10.32.0.2/30
PrivateKey = CLIENT_PRIVATE_KEY
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 192.168.56.10:51820
AllowedIPs = 10.32.0.1/32
تمام مقدارهای بزرگنویسیشده باید با کلیدهای تولیدشدهٔ واقعی lab جایگزین شوند. در این topology دو دستگاه روی شبکهٔ مشترکاند؛ keepalive اجباری نیست. برای peer پشت NAT که باید mapping را زنده نگه دارد، PersistentKeepalive با مقدار مناسب، مثلاً ۲۵ ثانیه، میتواند لازم باشد.
sudo wg-quick up wg0
ip address show wg0
sudo wg show wg0
از client، ping 10.32.0.1 بزن و دوباره wg show را بخوان. انتظار handshake تازه و افزایش transfer داریم. wg show معمولی کلید خصوصی را پنهان میکند؛ showconf و فایل config را عمومی نکن.
AllowedIPs چه نمیکند؟#
در ارسال، peer مناسب مقصد را انتخاب میکند؛ در دریافت، آدرس مبدأ مجاز peer را محدود میکند. جای packet filter برنامه یا قواعد دسترسی کاربر نیست. افزودن 0.0.0.0/0 میتواند مسیر پیشفرض را به تونل ببرد؛ full tunnel به route، DNS، forwarding و policy سمت خروج هم نیاز دارد. برای subnet پشت peer، route برگشت را هم باید طراحی کنی.
اگر interface بالا است ولی handshake نیست، Endpoint، UDP و کلید عمومی طرفین را بررسی کن. اگر handshake هست ولی ping نیست، AllowedIPs، آدرس و policy مسیر داده را بررسی کن. MTU نامناسب ممکن است فقط بعضی درخواستهای بزرگ را خراب کند؛ موفقیت ping کوچک تمام کاربرد را اثبات نمیکند.
تمرین و پایان#
AllowedIPs یکی از طرفین را موقتاً به /32 اشتباه تغییر بده و تفاوت handshake و انتقال قابل استفاده را ثبت کن. سپس مقدار درست را برگردان. برای پایان روی هر دو طرف sudo wg-quick down wg0 را اجرا کن؛ این تمرین enable در بوت انجام نمیدهد.
پرسش: حذف یک کارمند با تغییر رمز Linux تمام peerهای WireGuard او را باطل میکند؟ پاسخ: خیر، کلید peer و دسترسیهای مرتبط باید جدا حذف شوند. منابع: WireGuard Quick Start و wg-quick در سورس رسمی .