WIUNIX ACADEMY
آموزش نصب WireGuard و اتصال دو شبکه در اوبونتو و دبیان
صفحهٔ 3 از 8؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من24 مقدار قابلتغییر
NAT و زمان نیاز به keepalive
اگر B پشت NAT است، حداقل A باید ورودی UDP قابلدسترسی داشته باشد و در صورت لزوم روتر لبه پورت51820 را به آن برساند. B اتصال را آغاز میکند و فقط برای حفظ نگاشت در بیکاری به خط اختیاری بعدی نیاز دارد. اگر آدرس یا پورت عمومی B ثابت نیست، Endpoint آن در فایل A با ویرایشگر حذف شود تا پس از احراز هویت یاد گرفته شود. مبدأ مجاز UDP در A نیز باید آدرس خروجی واقعی B یا مجموعهٔ آگاهانهٔ مصوب برای همتای متغیر باشد. دو طرف پشت CGNAT بدون ورودی، صرفاً با keepalive وصل نمیشوند؛ هاب یا آدرس قابلدسترسی لازم است. NAT اینترنت با پنهانکردن آدرس LAN فرق دارد؛ داخل تونل masquerade نداریم.
خط اختیاری در Peer موجودِ B
محتوای فایل، فقط هنگام نیاز واقعی NAT؛ در طرح دو آدرس عمومی حذف میشود.
PersistentKeepalive = 25
قدم بعدی
فعالسازی forwarding در دو دروازه
فایل تازه فقط همین مقدار را اعمال میکند و مجوز فایروال نمیدهد. تنظیمات مالک دیگر نباید بازنویسی شوند.
sudo bash -eu <<'FORWARD'
test ! -e /etc/sysctl.d/70-academy-wireguard.conf
printf 'net.ipv4.ip_forward = 1\n' > /etc/sysctl.d/70-academy-wireguard.conf
sysctl -p /etc/sysctl.d/70-academy-wireguard.conf
FORWARD
forwarding در هر دو سمت۱ است.
قدم بعدی
آمادهسازی فایروال هر شعبه
فایل مستقل A یا B از پنلهای بعد روی همان دروازه ذخیره شود. نام رابط و آدرس همتا از ورودیهای فرم میآیند. مبدأ مدیریت و SSH22 پیش از فعالسازی باید با مسیر مستقل IPv4 هماهنگ باشند. جدول inet اختصاصی ورودی و عبور را پیشفرض میبندد و flush ندارد. از SSH صرفاً IPv6 فعال نشود؛ ICMPv6 فقط برای کنترل شبکهٔ زیرساخت است.
sudo install -o root -g root -m 0600 /dev/null /etc/wireguard/academy-filter.nft
sudo nano /etc/wireguard/academy-filter.nft
قوانین، مدیریت واقعی را حفظ و ترافیک دو شعبه را محدود میکنند.
قوانین A و جایگزینیهای B
محتوای فایل، فقط روی A. فایروال خود میزبانها نیز باید ICMP و TCP 8080 را از میزبان مقابل بپذیرد؛ پورت دلخواه تولید باز نشود.
define wan = "ens18"
define lan = "ens19"
define local_net = 10.10.10.0/24
define remote_net = 10.20.20.0/24
define local_host = 10.10.10.100
define remote_host = 10.20.20.100
define peer_wan = 203.0.113.20
define management = 192.0.2.0/24
table inet academy_wg {
chain input {
type filter hook input priority 0; policy drop;
iifname "lo" accept
ct state invalid drop
ct state established,related accept
ip saddr $management tcp dport 22 counter accept
iifname $wan ip saddr $peer_wan udp dport 51820 counter accept
ip protocol icmp counter accept
meta l4proto ipv6-icmp accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state invalid drop
ct state established,related counter accept
iifname $lan oifname "wg0" ip saddr $local_net ip daddr $remote_net ip protocol icmp counter accept
iifname "wg0" oifname $lan ip saddr $remote_net ip daddr $local_net ip protocol icmp counter accept
iifname $lan oifname "wg0" ip saddr $local_host ip daddr $remote_host tcp dport 8080 counter accept
iifname "wg0" oifname $lan ip saddr $remote_host ip daddr $local_host tcp dport 8080 counter accept
}
}
محتوای مستقل فایروال B
محتوای فایل، فقط روی B؛ مقدارها مستقیماً از ورودیهای دروازهٔ B میآیند و به جایگزینی دستی تنظیمات A نیاز نیست.
define wan = "ens18"
define lan = "ens19"
define local_net = 10.20.20.0/24
define remote_net = 10.10.10.0/24
define local_host = 10.20.20.100
define remote_host = 10.10.10.100
define peer_wan = 198.51.100.10
define management = 192.0.2.0/24
table inet academy_wg {
chain input {
type filter hook input priority 0; policy drop;
iifname "lo" accept
ct state invalid drop
ct state established,related accept
ip saddr $management tcp dport 22 counter accept
iifname $wan ip saddr $peer_wan udp dport 51820 counter accept
ip protocol icmp counter accept
meta l4proto ipv6-icmp accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state invalid drop
ct state established,related counter accept
iifname $lan oifname "wg0" ip saddr $local_net ip daddr $remote_net ip protocol icmp counter accept
iifname "wg0" oifname $lan ip saddr $remote_net ip daddr $local_net ip protocol icmp counter accept
iifname $lan oifname "wg0" ip saddr $local_host ip daddr $remote_host tcp dport 8080 counter accept
iifname "wg0" oifname $lan ip saddr $remote_host ip daddr $local_host tcp dport 8080 counter accept
}
}