← شروع آموزش

WIUNIX ACADEMY

شبکهٔ hub-and-spoke با WireGuard و BGP فیلترشده در FRR

صفحهٔ 4 از 6؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Debian 13بررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من19 مقدار قابل‌تغییر
16

قدم بعدی

پس از کنترل، BGP را روشن کنید

روی هر نود مالکیت فایل و نحو bgpd را کنترل کنید. موفقیت parse شاهد عبور ترافیک نیست. سپس سرویس تازهٔ آزمایش را روشن و جلسه و مسیر zebra را بررسی کنید. از گزینهٔ listenon برای محدودکردن listener استفاده نکنید؛ اثر ضمنی no-kernel دارد. مرز دسترسی در این مثال فایروال است. timerهای ۳/۹ برای آزمایش کنترل‌شده‌اند و روی اینترنت پرتلفات یا CPU تحت فشار می‌توانند flap بسازند. timer تولید را از اندازه‌گیری انتخاب کنید. graceful restart فعال نشده است؛ نگه‌داشتن مسیر stale هاب دوم نمی‌سازد.

bash

دروازه‌های تازهٔ آزمایش؛ Bash

sudo chown frr:frr /etc/frr/frr.conf
sudo chmod 0640 /etc/frr/frr.conf
sudo /usr/lib/frr/bgpd -C -f /etc/frr/frr.conf
sudo systemctl start frr
sudo vtysh -c 'show bgp ipv4 unicast summary' -c 'show ip route bgp'
ip route show proto bgp
از کجا بدانم درست انجام شد؟

هاب دو همتای Established و دو LAN پذیرفته‌شده دارد؛ هر شعبه یک همتای Established و فقط LAN مقابل را با next-hop هاب در کرنل می‌بیند.

17

قدم بعدی

دریافت‌کنندهٔ موقت را روی B روشن کنید

در ترمینال دوم روی B، پردازه را در پیش‌زمینه نگه دارید و پس از درخواست A با Ctrl-C ببندید. فقط روی آدرس LAN دروازه گوش می‌دهد؛ پورت را تنها برای مبدأ دقیق آزمایش مجاز کنید.

bash

B؛ ترمینال جدا

python3 -m http.server 8087 --bind '10.72.20.1' --directory /usr/share/doc/wireguard-tools
از کجا بدانم درست انجام شد؟

دریافت‌کننده روی آدرس و پورت منتخب B گوش می‌دهد.

18

قدم بعدی

کنترل دو جدول و ترافیک واقعی

این پنل روی A اجرا می‌شود؛ از B هم با جابه‌جایی مبدأ و مقصد بررسی کنید. مسیر B باید از 10.254.1.1 روی wg-ac-a بگذرد و AS path پس از ASN هاب، ASN شعبهٔ B را داشته باشد. LAN متصل A محلی می‌ماند و BGP نباید default تازه بسازد. سپس receiver موقت را در ترمینال جدا روی B روشن کنید، از A بخوانید و با Ctrl-C ببندید. پاسخ تازه رسیدن ترافیک به receiver را نشان می‌دهد؛ بررسی جلسه و مسیر شاهد BGP است. این دو مکمل‌اند. آدرس‌های آزمایش متعلق به دروازه‌اند، نه کلاینت جداگانهٔ LAN.

bash

دروازه‌های تازهٔ آزمایش؛ Bash

test "$ROLE" = a
sudo vtysh -c 'show bgp ipv4 unicast 10.72.20.0/24' -c 'show ip route 10.72.20.0/24'
ip route get '10.72.20.1' from '10.71.10.1'
ip route show proto bgp
ping -c 3 -I '10.71.10.1' '10.72.20.1'
curl --fail --noproxy '*' --interface '10.71.10.1' --connect-timeout 3 'http://10.72.20.1:8087/'
از کجا بدانم درست انجام شد؟

A مسیر B را از 10.254.1.1 با AS path برابر 65000 65020 می‌بیند؛ default BGP ندارد و ping با مبدأ مشخص و پاسخ تازهٔ HTTP از B موفق‌اند.

19

قدم بعدی

مسیر برگشت کلاینت LAN را آگاهانه تعیین کنید

اگر همین دروازه، روتر پیش‌فرض کلاینت‌هاست، ترافیک شعبهٔ مقابل به آن می‌رسد. اگر روتر دیگری default است، فقط CIDR شعبهٔ دور را از طریق دروازهٔ WireGuard محلی روی همان روتر اضافه کنید و تنظیم قبلی را نگه دارید. next-hop باید روی LAN روتر قابل‌دسترسی باشد. default را عوض نکنید و کمبود مسیر برگشت را با NAT نپوشانید. سرویس موردنیاز باید در همهٔ فایروال‌های مسیر مجاز باشد. این شاخه را از کلاینت واقعی در دو جهت جدا امتحان کنید؛ ping دروازه به‌تنهایی آن را ثابت نمی‌کند.

bash

دروازه‌های تازهٔ آزمایش؛ Bash

# Run only the matching branch on the existing Linux LAN router.
read -r -p 'LAN router (a/b): ' LAN_ROLE
case "$LAN_ROLE" in
 a) sudo ip route add '10.72.20.0/24' via '10.71.10.1' ;;
 b) sudo ip route add '10.71.10.0/24' via '10.72.20.1' ;;
 *) exit 1 ;;
esac
از کجا بدانم درست انجام شد؟

هر کلاینت واقعی مسیر رفت و برگشت بررسی‌شده دارد؛ ماندگاری فقط از مدیر شبکهٔ همان روتر تنظیم می‌شود.

20

قدم بعدی

یک prefix را بدون توقف WireGuard پس بگیرید

فقط آزمایش کنترل‌شده: اعلان شبکهٔ B را بردارید. با زمان‌سنج، هر ثانیه RIB و کرنل A را ببینید؛ prefix باید از هر دو حذف شود، درحالی‌که آدرس تونل هنوز در دسترس است. این withdrawal عمدی منتظر hold timer نمی‌ماند. همان network را برگردانید و مسیر و receiver را دوباره بررسی کنید. حذف موقت را ذخیره نکنید. زمان واقعی convergence را اندازه بگیرید؛ ۹ ثانیه حد hold timer همتای خاموش در شرایط مناسب است و تضمین RTO برنامه نیست.

bash

دروازه‌های تازهٔ آزمایش؛ Bash

test "$ROLE" = b
sudo vtysh -c 'configure terminal' -c 'router bgp 65020' -c 'address-family ipv4 unicast' -c 'no network 10.72.20.0/24'
از کجا بدانم درست انجام شد؟

تنظیم جاری BGP در B فقط اعلان 10.72.20.0/24 را موقتاً ندارد؛ تونل و مدیریت فعال می‌مانند.

21

قدم بعدی

حذف مسیر را روی A ببینید

روی A این پنل را با زمان‌سنج تکرار کنید تا مسیر دوردست حذف شود. آدرس متصل هاب باید در دسترس بماند؛ مسیر مستقل مدیریت را حفظ کنید.

bash

A

test "$ROLE" = a
date -Ins
sudo vtysh -c 'show bgp ipv4 unicast 10.72.20.0/24'
ip route show '10.72.20.0/24'
ping -c 2 '10.254.1.1'
از کجا بدانم درست انجام شد؟

prefix شبکهٔ B در BGP و کرنل نیست؛ همتای متصل هاب پاسخ می‌دهد.

همهٔ آموزش‌های آکادمی ↗