WIUNIX ACADEMY
شبکهٔ hub-and-spoke با WireGuard و BGP فیلترشده در FRR
صفحهٔ 2 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من19 مقدار قابلتغییر
قدم بعدی
کلید را بدون نمایش بخش خصوصی بسازید
روی هر دروازه ریشه و کلید مستقل بسازید. کلید عمومی را فقط پس از احراز هویت مدیر مقابل مبادله کنید. کلید خصوصی وارد تب تنظیمات، چت، Git یا نود دیگر نمیشود. هاب میتواند کلید خودش را روی دو رابط جدا به کار ببرد؛ هر شعبه کلید خودش را دارد. فایل حامل PrivateKey پیش از ویرایش باید 0600 باشد و نسخهٔ پشتیبان هم در فضای حفاظتشده بماند.
دروازههای تازهٔ آزمایش؛ Bash
set -eu
sudo install -d -m 0700 '/srv/academy-wgbgp'
sudo sh -c 'umask 077; wg genkey > "/srv/academy-wgbgp/private.key"; wg pubkey < "/srv/academy-wgbgp/private.key" > "/srv/academy-wgbgp/public.key"'
sudo cat '/srv/academy-wgbgp/public.key'
sudo install -d -m 0700 /etc/wireguard
sudo cp -a /etc/frr '/srv/academy-wgbgp/frr-before'
sudo sh -c 'ip route show table all > "/srv/academy-wgbgp/routes-before.txt"; sysctl net.ipv4.ip_forward net.ipv4.conf.all.rp_filter net.ipv4.conf.default.rp_filter > "/srv/academy-wgbgp/sysctl-before.txt"'
فقط کلید عمومی روی صفحه است؛ private.key با مجوز0600 در ریشهٔ تازهٔ0700 قرار دارد و تنظیم اولیهٔ FRR، مسیر و sysctl حفظ شده است.
قدم بعدی
دو فایل حفاظتشدهٔ تونل هاب را باز کنید
فقط هاب: محتوای دو بخش بعد را در فایل نامبرده قرار دهید. در ویرایشگر حفاظتشده REPLACE_PRIVATE_KEY را از فایل خصوصی همین نود و جاینگهدارهای عمومی را از همتاهای احرازشده پر کنید. این متن اسکریپت shell نیست. پیش از روشنکردن تونل ویرایشگر را ببندید. هاب endpoint شعبه را از بستهٔ احرازشده یاد میگیرد؛ SaveConfig را فعال نکنید تا فایل بررسیشده بازنویسی نشود.
دروازههای تازهٔ آزمایش؛ Bash
test "$ROLE" = h
sudo install -m 0600 /dev/null '/etc/wireguard/wg-ac-a.conf'
sudo install -m 0600 /dev/null '/etc/wireguard/wg-ac-b.conf'
sudo nano '/etc/wireguard/wg-ac-a.conf' '/etc/wireguard/wg-ac-b.conf'
هر دو فایل هاب0600 هستند؛ کلیدهای عمومی به A و B و کلید خصوصی فقط به همین هاب تعلق دارد. پیش از فعالسازی جاینگهدار باقی نمانده است.
قدم بعدی
فایل لینک هاب به A
این peer فقط آدرس داخلی و مبدأ LAN شعبهٔ A را میپذیرد.
دروازههای تازهٔ آزمایش؛ Bash
[Interface]
Address = 10.254.1.1/30
ListenPort = 51871
PrivateKey = REPLACE_PRIVATE_KEY
Table = off
MTU = 1380
[Peer]
PublicKey = REPLACE_PEER_PUBLIC_KEY
AllowedIPs = 10.254.1.2/32, 10.71.10.0/24
فایل لینک A شامل 10.254.1.1/30، UDP51871 و Table=off است و peer احرازشده فقط 10.254.1.2/32 و 10.71.10.0/24 دارد.
قدم بعدی
فایل لینک هاب به B
این رابط مستقل، /30 متصل و listener UDP خودش را دارد.
دروازههای تازهٔ آزمایش؛ Bash
[Interface]
Address = 10.254.2.1/30
ListenPort = 51872
PrivateKey = REPLACE_PRIVATE_KEY
Table = off
MTU = 1380
[Peer]
PublicKey = REPLACE_PEER_PUBLIC_KEY
AllowedIPs = 10.254.2.2/32, 10.72.20.0/24
فایل لینک B شامل 10.254.2.1/30، UDP51872 و Table=off است و peer احرازشده فقط 10.254.2.2/32 و 10.72.20.0/24 دارد.
قدم بعدی
فایل حفاظتشدهٔ شعبه را باز کنید
روی هر شعبه فقط خط مربوط به خودش را اجرا و فایل همان شعبه را از بخش بعد بردارید. کلید عمومی peer متعلق به هاب است و کلید خصوصی باید از همین شعبه در ویرایشگر حفاظتشده وارد شود. keepalive برابر ۲۵ برای نگهداشتن mapping در NAT مفید است؛ اگر نیازی ندارید حذفش کنید. endpoint نمونه آدرس مستنداتی است؛ در تنظیمات آدرس واقعی هاب را بگذارید.
دروازههای تازهٔ آزمایش؛ Bash
case "$ROLE" in
a) sudo install -m 0600 /dev/null '/etc/wireguard/wg-ac-a.conf'
sudo nano '/etc/wireguard/wg-ac-a.conf' ;;
b) sudo install -m 0600 /dev/null '/etc/wireguard/wg-ac-b.conf'
sudo nano '/etc/wireguard/wg-ac-b.conf' ;;
*) printf '%s
' 'Spokes only'; exit 1 ;;
esac
فقط فایل همان شعبه با مجوز0600، کلید خصوصی محلی و کلید عمومی احرازشدهٔ هاب ساخته شده است.
قدم بعدی
فایل A به هاب
peer هاب، LAN شعبهٔ B را حمل میکند؛ مسیر پیشفرض اینترنت ندارد.
دروازههای تازهٔ آزمایش؛ Bash
[Interface]
Address = 10.254.1.2/30
ListenPort = 51871
PrivateKey = REPLACE_PRIVATE_KEY
Table = off
MTU = 1380
[Peer]
PublicKey = REPLACE_PEER_PUBLIC_KEY
AllowedIPs = 10.254.1.1/32, 10.72.20.0/24
Endpoint = 198.51.100.10:51871
PersistentKeepalive = 25
A آدرس 10.254.1.2/30 دارد و فقط 10.254.1.1/32 و 10.72.20.0/24 را به endpoint هاب 198.51.100.10:51871 میفرستد؛ AllowedIPs پیشفرض ندارد.
قدم بعدی
فایل B به هاب
peer هاب حامل LAN شعبهٔ A است. AllowedIPs رقیب و یکسان برای دو peer روی یک رابط تعریف نکنید.
دروازههای تازهٔ آزمایش؛ Bash
[Interface]
Address = 10.254.2.2/30
ListenPort = 51872
PrivateKey = REPLACE_PRIVATE_KEY
Table = off
MTU = 1380
[Peer]
PublicKey = REPLACE_PEER_PUBLIC_KEY
AllowedIPs = 10.254.2.1/32, 10.71.10.0/24
Endpoint = 198.51.100.10:51872
PersistentKeepalive = 25
B آدرس 10.254.2.2/30 دارد و فقط 10.254.2.1/32 و 10.71.10.0/24 را به endpoint هاب 198.51.100.10:51872 میفرستد؛ AllowedIPs پیشفرض ندارد.