WIUNIX ACADEMY
آموزش نصب WireGuard و اتصال دو شبکه در اوبونتو و دبیان
صفحهٔ 2 از 8؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من24 مقدار قابلتغییر
قدم بعدی
ثبت مقدار اولیهٔ forwarding
پس از بررسی تازگی میزبان، مقدار اولیه ذخیره میشود و فایل قبلی بازنویسی نمیشود. تغییر forwarding بعضی پیشفرضهای IPv4 را به حالت روتر میبرد؛ مقایسهٔ قبل و بعد برای تنظیمات اختصاصی لازم است. این روش میزبان تازه با پیشفرض توزیع را فرض میکند.
sudo bash -eu <<'BASELINE'
umask 077
install -d -m 0700 /etc/wireguard
for p in /etc/wireguard/private.key /etc/wireguard/wg0.conf /etc/wireguard/forwarding.before /etc/sysctl.d/70-academy-wireguard.conf /etc/systemd/system/academy-wg-filter.service; do
if test -e "$p"; then echo 'Existing tutorial state: STOP' >&2; exit 1; fi
done
rules=$(nft list ruleset)
if test -n "$rules"; then echo 'Existing ruleset: STOP' >&2; exit 1; fi
sysctl -n net.ipv4.ip_forward > /etc/wireguard/forwarding.before
sysctl -a 2>/dev/null > /etc/wireguard/sysctl.before
BASELINE
مقدار اولیه و فهرست تنظیمات در پوشهٔ محدود به root ذخیرهاند.
قدم بعدی
ساخت کلید محلی و تبادل فقط کلید عمومی
هر دروازه جفتکلید خودش را میسازد. ضبط ترمینال و shell tracing خاموش باشند و کلید خصوصی وارد آرگومان، لاگ، Git یا تیکت نشود. این نمونه PSK اختیاری ندارد؛ در صورت نیاز سازمان، آن راز مستقل و محافظتشده مدیریت شود. کلید عمومی مبادلهشده باید در کانال معتبر به هویت طرف مقابل تطبیق داده شود.
sudo bash -eu <<'KEYS'
umask 077
test ! -e /etc/wireguard/private.key
test ! -e /etc/wireguard/public.key
wg genkey > /etc/wireguard/private.key
wg pubkey < /etc/wireguard/private.key > /etc/wireguard/public.key
chmod 0600 /etc/wireguard/private.key /etc/wireguard/public.key
KEYS
sudo cat /etc/wireguard/public.key
کلیدهای A و B متفاوتاند و فقط کلید عمومی چاپ میشود.
قدم بعدی
آمادهسازی قالب امن هر شعبه
روی هر دروازه فقط محتوای فایل همان شعبه از پنل بعدی ذخیره شود. کلید عمومی همتا و آدرس عمومی واقعی جایگزین شوند؛ نشانگر کلید خصوصی محلی فعلاً باقی بماند تا مرحلهٔ درج امن. کلید خصوصی طرف مقابل هرگز کپی نشود.
sudo install -o root -g root -m 0600 /dev/null /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf
فایل امن، قالب همین شعبه و هویت عمومی طرف مقابل را دارد.
محتوای wg0.conf در A
محتوای فایل، فقط روی A؛ بخش Peer متعلق به B است و شبکهٔ محلی A در AllowedIPs آن قرار نمیگیرد. SaveConfig و تنظیم DNS یا مسیر پیشفرض نداریم.
[Interface]
Address = 10.255.255.1/30
ListenPort = 51820
PrivateKey = REPLACE_LOCAL_PRIVATE_KEY
[Peer]
PublicKey = REPLACE_B_PUBLIC_KEY
Endpoint = 203.0.113.20:51820
AllowedIPs = 10.255.255.2/32, 10.20.20.0/24
محتوای wg0.conf در B
محتوای فایل، فقط روی B؛ هویت عمومی و شبکههای A اینجا قرار میگیرند. در طرح پایه آدرس عمومی دو سمت ثابت و قابلدسترسی است.
[Interface]
Address = 10.255.255.2/30
ListenPort = 51820
PrivateKey = REPLACE_LOCAL_PRIVATE_KEY
[Peer]
PublicKey = REPLACE_A_PUBLIC_KEY
Endpoint = 198.51.100.10:51820
AllowedIPs = 10.255.255.1/32, 10.10.10.0/24
قدم بعدی
درج کلید خصوصی بدون نمایش
پس از اصلاح موارد عمومی روی A و B اجرا شود. نشانگر ناقص یا تکراری و مشخصات همتای جایگزیننشده باعث توقف میشود. خروجی showconf، dump، فایل تکمیلشده یا عکس ویرایشگر منتشر نشود؛ ممکن است راز داشته باشد.
sudo python3 - <<'CONFIG'
import os
from pathlib import Path
p = Path('/etc/wireguard/wg0.conf')
s = p.read_text()
marker = 'REPLACE_LOCAL_PRIVATE_KEY'
if s.count(marker) != 1 or 'REPLACE_' in s.replace(marker, ''):
raise SystemExit('Unedited or duplicate placeholders: STOP')
k = Path('/etc/wireguard/private.key').read_text().strip()
if len(k) != 44:
raise SystemExit('Invalid local key length: STOP')
p.write_text(s.replace(marker, k))
os.chmod(p, 0o600)
print('Local key inserted; configuration not displayed')
CONFIG
فقط پیام پایان دیده میشود و کلید خصوصی در فایل امن باقی است.