رفتن به محتوا

راهنماهاپیش‌نمایش

Subnet route

از طریق یک دستگاه که نردبون رویش نصب است، به کل یک شبکه، مثل شبکه‌ی محلی دفتر یا یک VPC ابری، دسترسی پیدا کنید.

با subnet route، یکی از دستگاه‌های شبکه‌ی نردبون شما دسترسی به زیرشبکه‌ی پشت خودش را هم فراهم می‌کند. به این دستگاه subnet router می‌گوییم. دستگاه‌های آن زیرشبکه به نردبون نیازی ندارند: پرینترها، NASها و سرورهایی که نمی‌توانید چیزی رویشان نصب کنید، از بقیه‌ی دستگاه‌هایتان با همان IP همیشگی‌شان در دسترس‌اند.

سه طرف در این کار نقش دارند: روتر routeهایش را اعلام می‌کند، یکی از مدیرها آن‌ها را تأیید می‌کند و هر کلاینت باید استفاده از آن‌ها را فعال کند.

راه‌اندازی subnet router

  1. IP forwarding را روی روتر فعال کنید

    روتر بسته‌ها را بین نردبون و زیرشبکه جابه‌جا می‌کند، پس Linux باید اجازه‌ی IP forwarding بدهد. در بیشتر توزیع‌ها:

    echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ip-forward.conf
    echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-ip-forward.conf
    sudo sysctl -p /etc/sysctl.d/99-ip-forward.conf

    نردبون هیچ‌وقت خودش این تنظیم را عوض نمی‌کند. اگر روتر routeهای تأییدشده را جابه‌جا کند و forwarding خاموش باشد، nardeboon status روی روتر این را می‌گوید.

    اگر روتر route نسخه‌ی IPv6 را از router advertisement می‌گیرد (خروجی ip -6 route show default به proto ra ختم می‌شود)، تا وقتی forwarding نسخه‌ی IPv6 روشن است Linux آن‌ها را نادیده می‌گیرد و روتر با تمام شدن عمر routeاش IPv6 را از دست می‌دهد. اگر زیرشبکه‌ی IPv6 جابه‌جا نمی‌کنید خط IPv6 را ننویسید، وگرنه اول دریافت آن‌ها را روی همان interface نگه دارید: net.ipv6.conf.eth0.accept_ra = 2، با اسم interface خودتان به‌جای eth0.

    اگر فایروالی مثل ufw یا firewalld روی روتر فعال است، مطمئن شوید که جلوی ترافیکی را که روتر forward می‌کند نمی‌گیرد.

  2. routeها را اعلام کنید

    روی روتر، زیرشبکه‌هایی را که به آن‌ها دسترسی دارد بنویسید و با کاما از هم جدا کنید:

    sudo nardeboon up --advertise-routes=10.0.0.0/24,192.168.50.0/24

    اجرای دوباره‌ی up فقط گزینه‌هایی را عوض می‌کند که به آن می‌دهید؛ پس بقیه‌ی تنظیمات روتر دست‌نخورده می‌ماند. دستور sudo nardeboon route advertise 10.0.0.0/24 192.168.50.0/24 همین را تنظیم می‌کند، بدون اینکه دستگاه را وصل یا قطع کند.

    هر دستگاه حداکثر ۶۴ رنج می‌تواند پیشنهاد کند. route پیش‌فرض (0.0.0.0/0) subnet route نیست: برای جابه‌جا کردن همه‌ی ترافیک اینترنت، از نود خروجی استفاده کنید. رنج‌هایی که با آدرس‌های خود شبکه هم‌پوشانی دارند کنار گذاشته می‌شوند؛ رنج‌های loopback، link-local و multicast هم همین‌طور.

  3. routeها را تأیید کنید

    یکی از مدیرها routeها را در صفحه‌ی روتر در داشبورد، در بخش مسیرهای subnet، تأیید می‌کند. تا آن موقع هیچ دستگاهی از آن‌ها استفاده نمی‌کند.

  4. روی هر کلاینت routeها را بپذیرید

    دستگاه‌ها تا خودشان نخواهند از subnet routeها استفاده نمی‌کنند. روی هر دستگاهی که به این زیرشبکه نیاز دارد:

    sudo nardeboon route accept

    دستور sudo nardeboon up --accept-routes هم همین کار را می‌کند و sudo nardeboon route accept off استفاده از آن‌ها را متوقف می‌کند. روی Windows گزینه‌ی استفاده از مسیرهای subnet را در تنظیمات اپ روشن کنید، یا همین دستورها را بدون sudo در هر ترمینالی اجرا کنید.

روتر ترافیک را چطور جابه‌جا می‌کند

روتر آدرس ترافیکی را که جابه‌جا می‌کند ترجمه می‌کند (masquerading)؛ پس دستگاه‌های زیرشبکه به هیچ route برگشتی به نردبون نیاز ندارند و اتصال‌ها را از طرف خود روتر می‌بینند. روتر این قاعده‌ها را در یک جدول nftables مخصوص خودش، nardeboon-snat، نگه می‌دارد و به بقیه‌ی قاعده‌های فایروال شما دست نمی‌زند؛ برای همین به nft (بسته‌ی nftables) نیاز دارد.

دستگاهی که خودش داخل همان زیرشبکه است، مثل لپ‌تاپی که در دفتر است، مستقیم به آن می‌رسد: نردبون هر routeی را که شبکه‌ای را که دستگاه همین حالا رویش است پوشش بدهد کنار می‌گذارد و وقتی دستگاه به شبکه‌ی دیگری رفت، دوباره از آن استفاده می‌کند.

دو روتر برای یک زیرشبکه

اگر یک route را روی دو دستگاه یا بیشتر تأیید کنید، با از کار افتادن یکی از آن‌ها زیرشبکه در دسترس می‌ماند. هر بار فقط یک روتر route را جابه‌جا می‌کند، که به آن روتر اصلی (primary) می‌گوییم، و همه‌ی دستگاه‌ها ترافیک زیرشبکه را به همان می‌فرستند. وقتی روتر اصلی ۱۰ ثانیه آفلاین بماند، route به یکی دیگر از روترهایش که آنلاین است منتقل می‌شود. وقتی روتر اول برگردد، route همان‌جا می‌ماند تا اتصال‌هایی که از روتر جدید می‌گذرند دوباره قطع نشوند. روتری که فقط یک لحظه اتصالش قطع شود و فوراً برگردد، route را نگه می‌دارد.

روترهایی که منتظر نوبت‌اند آماده می‌مانند: هر کدام از همین حالا برای آن route کار forward و masquerade را انجام می‌دهد، پس به محض اینکه دستگاه‌ها ترافیک را به آن بفرستند، جابه‌جایش می‌کند. اتصال‌هایی که از روتری می‌گذشتند که از کار افتاده، همراه با آن قطع می‌شوند، چون masquerade هر روتر مال خودش است؛ اتصال‌های تازه از روتر بعدی می‌گذرند.

روی روتری که منتظر است، nardeboon route list می‌گوید الان کدام روتر route را جابه‌جا می‌کند:

ROUTE        ROUTER     STATUS
10.0.0.0/24  gateway-2  approved; standby while gateway carries it
10.0.0.0/24  gateway    available (accept routes is off)

هر روتر جزو سقف subnet routerهای پلن شما حساب می‌شود.

بررسی routeها

nardeboon route list

روی روتر:

ROUTE            ROUTER   STATUS
10.0.0.0/24      gateway  approved
192.168.50.0/24  gateway  waiting for approval

روی یک کلاینت:

ROUTE        ROUTER   STATUS
10.0.0.0/24  gateway  in use
وضعیتمعنی
approvedاین دستگاه route را پیشنهاد کرده و یکی از مدیرها تأییدش کرده است.
approved; standby while … carries itاین دستگاه route را پیشنهاد کرده و تأیید هم شده، ولی الان روتر دیگری جابه‌جایش می‌کند. اگر آن روتر آفلاین شود، این یکی جایش را می‌گیرد.
waiting for approvalاین دستگاه route را پیشنهاد کرده، ولی هنوز هیچ مدیری تأییدش نکرده است.
in useدستگاه دیگری route را جابه‌جا می‌کند و این دستگاه ترافیکش را به آن می‌فرستد.
available (accept routes is off)دستگاه دیگری route را جابه‌جا می‌کند؛ nardeboon route accept استفاده از آن را شروع می‌کند.
not used: this device is on that networkاین دستگاه خودش داخل همان زیرشبکه است و مستقیم به آن می‌رسد.

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

ping 10.0.0.20
ssh admin@10.0.0.20

nardeboon ping هم برای این آدرس‌ها کار می‌کند و می‌گوید کدام روتر echo را جابه‌جا کرده است:

pong from 10.0.0.20 (10.0.0.20): via gateway (subnet router), direct 203.0.113.7:41641, nb-udp, 12.3 ms

چه کسی می‌تواند از routeها استفاده کند

subnet routeها از سیاست دسترسی شما پیروی می‌کنند و هم کلاینت و هم روتر آن را اعمال می‌کنند. grantی که به همه‌چیز (*) دسترسی می‌دهد، مثل همانی که هر شبکه با آن شروع می‌شود، routeهای تأییدشده را هم شامل می‌شود. برای محدود کردنش، به‌جای آن به یک رنج آدرس دسترسی بدهید، مثلاً cidr:10.0.0.0/24: فقط مبدأهای همان grant از طریق روتر به آن رنج می‌رسند.

دستور route

دستورکاری که می‌کند
nardeboon route listفهرست subnet routeها و وضعیتشان را نشان می‌دهد.
nardeboon route advertise <ranges…>subnet routeهایی را که این دستگاه پیشنهاد می‌کند تنظیم می‌کند؛ بدون رنج، دیگر هیچ routeی پیشنهاد نمی‌کند.
nardeboon route accept [on|off]routeهای تأییدشده‌ی دستگاه‌های دیگر را به کار می‌گیرد یا استفاده از آن‌ها را متوقف می‌کند.

route advertise و route accept فقط همان تنظیم را عوض می‌کنند: دستگاهی که وصل است وصل می‌ماند و دستگاهی که قطع است قطع می‌ماند. این دستورها هم مثل همه‌ی دستورهای دیگر --json را می‌پذیرند. مرجع CLI را ببینید.

نکته‌ها

  • فقط همان چیزی را اعلام کنید که لازم است. زیرشبکه‌های کوچک‌تر را راحت‌تر می‌شود بررسی و تأیید کرد.
  • پس گرفتن پیشنهاد، تأیید را هم پس می‌گیرد. routeی که روتر دیگر پیشنهادش نکند، تأییدش را هم از دست می‌دهد؛ پیشنهاد دوباره‌اش به تأیید تازه نیاز دارد.
  • نام‌های داخلی. اگر زیرشبکه سرور DNS خودش را دارد، با split DNS دامنه‌هایش را به همان سرور بفرستید؛ مثلاً corp.example.com را به 10.0.0.53.
  • تأیید بخشی از کنترل دسترسی است. subnet routeها و نودهای خروجی همیشه به تأیید مدیر نیاز دارند. کنترل دسترسی را ببینید.