WIUNIX ACADEMY
شبکهٔ hub-and-spoke با WireGuard و BGP فیلترشده در FRR
صفحهٔ 5 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من19 مقدار قابلتغییر
قدم بعدی
اعلان B را برگردانید و دریافتکننده را دوباره بررسی کنید
روی B اجرا کنید و سپس کنترل مسیر و دریافتکننده را روی A تکرار کنید. بدون کنسول مستقل تمرین اختلال را عقب بیندازید. وضعیت موقت خراب را ذخیره نکنید.
B
test "$ROLE" = b
sudo vtysh -c 'configure terminal' -c 'router bgp 65020' -c 'address-family ipv4 unicast' -c 'network 10.72.20.0/24'
همان prefix برمیگردد و دریافتکننده از مسیر هاب پاسخ میدهد.
قدم بعدی
فیلتر اعلان را در نسخهٔ قابلحذف امتحان کنید
در آزمون ایزوله، B تلاش میکند default و یک prefix نامرتبط را اعلان کند؛ فیلتر دقیق خروجی و ورودی باید هر دو را از هاب و A دور نگه دارد. مسیر آزمایشی وارد تولید نکنید. اینجا اعلانهای خروجی و prefix-list را بازبینی کنید. نمایش (Policy) بهجای شمار مسیر، یعنی سیاست ورودی یا خروجی کامل نیست؛ همان فیلتر را اصلاح کنید و ebgp-requires-policy را خاموش نکنید. شمار بیش از حد مسیر پذیرفتهشده میتواند همتا را متوقف کند؛ پیش از clear علت را پیدا کنید. آزمون نشت مسیر و زمان قطع جلسه با ping یکی نیستند.
دروازههای تازهٔ آزمایش؛ Bash
# Hub
sudo vtysh -c 'show ip prefix-list' -c 'show bgp ipv4 unicast neighbors 10.254.1.2 advertised-routes' -c 'show bgp ipv4 unicast neighbors 10.254.2.2 advertised-routes'
ip route show default
هاب به A فقط 10.72.20.0/24 و به B فقط 10.71.10.0/24 را اعلان میکند؛ default یا prefix نامرتبط دیده نمیشود.
قدم بعدی
پیش از تغییر مسیر، لایهٔ خراب را پیدا کنید
بدون handshake ابتدا endpoint، UDP، NAT و هویت کلید را بررسی کنید. handshake همراه Idle/Active نیازمند بررسی /30 متصل، TCP179، مبدأ و ASN است. جلسهٔ Established بدون مسیر معمولاً به مسیر متصل LAN، import-check، فعالبودن AF یا دو فیلتر مربوط است. وجود مسیر در RIB و نبود آن در کرنل، بررسی zebra، next-hop و مسیر رقیب را میخواهد. اگر ping کوچک کار میکند ولی HTTP میایستد، PMTUD و MTU مؤثر را ببینید؛ ICMP خطا را مجاز کنید و PMTUD را سراسری خاموش نکنید. showconf یا کلید خصوصی وارد گزارش نشود.
دروازههای تازهٔ آزمایش؛ Bash
sudo wg show
ip -d link show 'wg-ac-a'
sudo ss -lntp '( sport = :179 )'
sudo vtysh -c 'show bgp ipv4 unicast summary' -c 'show ip route'
sudo journalctl -u frr --since '-10 minutes' --no-pager
sysctl net.ipv4.ip_forward net.ipv4.conf.all.rp_filter
sudo nft list ruleset
# A only: one bounded PMTU probe; reduce size if the real path is smaller
ping -c 2 -M do -s 1200 -I '10.71.10.1' '10.72.20.1'
پیش از تغییر مسیر، نخستین لایهٔ خراب با شاهد handshake، جلسه، policy، zebra، FIB یا دریافتکننده مشخص شده است.
فقط تنظیم سالم را ماندگار کنید
تا اینجا boot تونل و ماندگاری sysctl و فایروال عمداً فعال نشدهاند. بعد از بررسی موجودی مسیرها، فقط مقدارهای بررسیشده را از مسیر مدیر سیستم و فایروال موجود ماندگار کنید؛ ruleset کلی را بازنویسی و sysctl --system را بیبررسی اجرا نکنید. unitهای متناسب wg-quick و FRR را فقط روی VM تازه فعال کنید و آزمون reboot با کنسول مستقل را جدا انجام دهید. FRR با برگشت آدرس تونل دوباره وصل میشود؛ ترتیب سرویس بهتنهایی تضمین آمادگی نیست. آزمایش namespace تکمیزبانی reboot، roaming NAT یا خرابی میزبان مستقل را اثبات نمیکند.
قدم بعدی
فقط تغییرهای متعلق به آزمایش را برگردانید
با کنسول مستقل ابتدا FRR تازهٔ آزمایش را متوقف و حذف مسیرهای یادگرفتهشده و حفظ مدیریت را بررسی کنید. در مهاجرت واقعی باید مسیر ثابت قبلیِ مصوب پیش از shutdown همتا آماده و کنترل شود؛ این تمرین روی دروازه مسیر ثابت دوردست نساخته است. تا پایان بازیابی مسیریابی WireGuard را نگه دارید؛ سپس فقط تونل همین آزمایش را پایین بیاورید. در شاخهٔ روتر LAN فقط همان مسیر دقیق افزودهشده حذف میشود. مقدارهای sysctl ذخیرهشده را پس از بررسی نیاز سایر workloadها تکبهتک برگردانید. کلید و شواهد را برای بازبینی نگه دارید. محافظ نامبرده را فقط پس از توقف BGP بردارید؛ جدول مسیر یا فایروال را flush نکنید.
دروازههای تازهٔ آزمایش؛ Bash
# Fresh lab gateways only, in the original ROLE shell
sudo systemctl stop frr
ip route show proto bgp
# Check management before this step
case "$ROLE" in
h) sudo wg-quick down 'wg-ac-a'; sudo wg-quick down 'wg-ac-b' ;;
a) sudo wg-quick down 'wg-ac-a' ;;
b) sudo wg-quick down 'wg-ac-b' ;;
*) exit 1 ;;
esac
sudo nft delete table inet academy_bgp
sudo cat '/srv/academy-wgbgp/sysctl-before.txt'
فقط مسیر و سرویس آزمایش برداشته شده؛ مدیریت، مسیرهای نامرتبط، جدولهای فایروال و ورودیهای حفاظتشدهٔ بازیابی باقیاند.
قدم بعدی
فقط مسیر اختیاری روتر LAN را حذف کنید
فقط روی روتر لینوکسی LAN که همین آزمایش مسیر دقیق را افزوده اجرا کنید؛ در غیر این صورت رد شوید. مسیرهای قبلی حفظ میشوند. بازیابی دروازه در بخش قبل به اجرای این پنل نیاز ندارد.
روتر لینوکسی LAN؛ اختیاری
read -r -p 'LAN router (a/b): ' LAN_ROLE
case "$LAN_ROLE" in
a) sudo ip route del '10.72.20.0/24' via '10.71.10.1' ;;
b) sudo ip route del '10.71.10.0/24' via '10.72.20.1' ;;
*) exit 1 ;;
esac
فقط همان مسیر دقیق اختیاری حذف شده است.