رفتن به محتوا

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

نود خروجی

ترافیک اینترنت یک دستگاه را از دستگاه دیگری در شبکه‌تان عبور دهید؛ مثلاً از سروری مطمئن در خارج از کشور.

نود خروجی دستگاهی در شبکه‌ی شماست که دستگاه‌های دیگر می‌توانند ترافیک اینترنتشان را از طریق آن بفرستند. وقتی از یک نود خروجی استفاده می‌کنید، وب‌سایت‌ها و سرویس‌ها به‌جای IP شما، IP عمومی نود خروجی را می‌بینند و کل مسیر بین دستگاه شما و نود خروجی داخل تونل رمزشده و پنهان‌شده‌ی نردبون طی می‌شود.

دستگاه خودش را به‌عنوان نود خروجی اعلام می‌کند، یکی از مدیرها تأییدش می‌کند و بعد دستگاه‌های دیگر می‌توانند آن را انتخاب کنند.

کاربردهای رایج

  • سروری مطمئن در خارج از کشور. نردبون را روی سروری که در کشور دیگری در اختیار دارید نصب کنید، مثلاً hetzner در آلمان، و از همان‌جا به اینترنت وصل شوید. تونل تا این سرور حتی در شبکه‌هایی که ترافیک را فیلتر یا بازرسی می‌کنند هم برقرار می‌شود، چون همه‌ی اتصال‌های نردبون پنهان‌سازی می‌شوند.
  • وای‌فای نامطمئن. در شبکه‌ی هتل یا کافه، ترافیک شما فقط روی دستگاهی که به آن اعتماد دارید از تونل بیرون می‌آید.
  • آدرس ثابت. سرویس‌هایی که فقط به IPهای مشخص اجازه‌ی دسترسی می‌دهند، هر جا که باشید آدرس نود خروجی را می‌بینند.

راه‌اندازی نود خروجی

  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

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

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

    echo 'net.ipv6.conf.eth0.accept_ra = 2' | sudo tee -a /etc/sysctl.d/99-ip-forward.conf
  2. نود خروجی را اعلام کنید

    روی دستگاهی که ترافیک باید از آن خارج شود، مثلاً hetzner:

    sudo nardeboon up --advertise-exit-node

    اجرای دوباره‌ی up فقط گزینه‌هایی را عوض می‌کند که به آن می‌دهید؛ پس بقیه‌ی تنظیمات دستگاه دست‌نخورده می‌ماند. دستور sudo nardeboon set advertise-exit-node on هم همین کار را می‌کند، بدون اینکه دستگاه را وصل یا قطع کند.

  3. در داشبورد تأییدش کنید

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

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

استفاده از نود خروجی

روی دستگاه خودتان، فهرست نودهای خروجی قابل استفاده را ببینید:

nardeboon exit-node list
NAME     ADDRESS      STATUS
gateway  100.88.3.17  online
hetzner  100.83.20.5  online

یکی را انتخاب کنید:

sudo nardeboon exit-node set hetzner

یا همان موقع که اتصال را برقرار می‌کنید انتخابش کنید:

sudo nardeboon up --exit-node=hetzner

برای اینکه دوباره مستقیم از اینترنت خودتان استفاده کنید:

sudo nardeboon exit-node clear

بعد از انتخاب، exit-node list کنار نودی که انتخاب کرده‌اید in use می‌نویسد. این انتخاب فقط روی همان دستگاهی اثر دارد که آن را انجام داده‌اید. دستگاهی که خودش را به‌عنوان نود خروجی اعلام کرده، نمی‌تواند هم‌زمان از نود خروجی دیگری استفاده کند.

روی Windows آن را در اپ، در بخش نود خروجی، انتخاب کنید، یا همین دستورها را بدون sudo در هر ترمینالی اجرا کنید.

شبکه‌ی محلی شما

وقتی از نود خروجی استفاده می‌کنید، همه‌چیز از آن عبور می‌کند، حتی ترافیک شبکه‌ی محلی‌ای که رویش هستید: در شبکه‌ی هتل یا کافه، دستگاه‌های دیگرِ آن شبکه به شما نمی‌رسند و شما هم به آن‌ها نمی‌رسید. اگر می‌خواهید همچنان مستقیم به مودم، پرینتر یا NAS خودتان برسید، اجازه‌اش را بدهید:

sudo nardeboon set exit-node-allow-lan-access on

up --exit-node-allow-lan-access هم همین کار را می‌کند. ترافیک اینترنتتان همچنان از نود خروجی عبور می‌کند. روی Windows کلید دسترسی به شبکه‌ی محلی در اپ، زیر نود خروجی، هم همین کار را می‌کند.

DNS

وقتی از نود خروجی استفاده می‌کنید، نام‌هایی که نام دستگاه‌هایتان نیستند را resolver خود نود خروجی و از طریق تونل پیدا می‌کند؛ پس شبکه‌ی محلی و ارائه‌دهنده‌ی اینترنتتان نه کوئری‌هایتان را می‌بینند و نه می‌توانند جوابشان را عوض کنند. اگر شبکه‌تان در داشبورد سرورهای DNS خودش را دارد، به‌جای آن همان‌ها جواب می‌دهند، باز هم از طریق تونل. DNS و نام دستگاه‌ها را ببینید.

اگر نود خروجی قطع شود

ترافیک اینترنت دستگاه شما هیچ‌وقت بی‌صدا از اینترنت خودتان بیرون نمی‌رود. اگر نود خروجی دیگر جواب ندهد، یا دیگر نود خروجی تأییدشده نباشد، ترافیک اینترنت دستگاه شما متوقف می‌شود. اگر فقط اتصالش به سرور کنترل قطع شده باشد و هنوز جواب بدهد، ترافیک همچنان از طریق آن می‌رود. اتصال نردبون و دسترسی به بقیه‌ی دستگاه‌هایتان برقرار می‌ماند و nardeboon status می‌گوید چه اتفاقی افتاده:

Connected to network home as mypc (100.101.12.4)
  Exit node: hetzner (100.83.20.5), offline for the control plane
  ! The exit node hetzner is offline for the control plane: this device's internet traffic still goes only to it, and is blocked while it doesn't answer, or until you choose another (`nardeboon exit-node set <name>`) or none (`nardeboon exit-node clear`).

به محض اینکه نود خروجی دوباره جواب بدهد، ترافیک دوباره برقرار می‌شود. وقتی دستگاه شما ری‌استارت می‌شود هم همین‌طور است: با ترافیک اینترنتِ مسدود شروع می‌کند تا به نود خروجی برسد. nardeboon down تونل را خاموش می‌کند و نود خروجی را هم با آن؛ دستگاه تا nardeboon up بعدی از اینترنت خودش استفاده می‌کند.

بررسی کارکرد

nardeboon status نود خروجی فعلی را نشان می‌دهد:

nardeboon status
Connected to network home as mypc (100.101.12.4)
  Exit node: hetzner (100.83.20.5)

PEER     ADDRESS       OS     STATUS
gateway  100.88.3.17   linux  online
hetzner  100.83.20.5   linux  active, 2s ago
laptop   100.101.40.7  linux  online

nardeboon ping هم آدرس‌های اینترنت را از طریق نود خروجی ping می‌کند و همین را می‌گوید:

pong from 1.1.1.1 (1.1.1.1): via hetzner (exit node), direct 203.0.113.7:41641, nb-udp, 41.6 ms

بعد IP عمومی‌تان را در یکی از سایت‌های «IP من چیست» نگاه کنید؛ باید IP نود خروجی را ببینید.

تونل تا نود خروجی یک اتصال معمولی نردبون است؛ پس از بهترین مسیر موجود، مستقیم یا از طریق رله، و با بهترین ترنسپورتی که شبکه‌تان اجازه می‌دهد برقرار می‌شود. برای دیدن این مسیر nardeboon path status را اجرا کنید و برای دیدن دلیل کامل انتخابش، nardeboon path explain hetzner را. مسیرها و رله‌ها را هم ببینید.

چه کسی می‌تواند از نود خروجی استفاده کند

نودهای خروجی از سیاست دسترسی شما پیروی می‌کنند. grantی که به همه‌چیز (*) دسترسی می‌دهد، مثل همانی که هر شبکه با آن شروع می‌شود، به همه اجازه می‌دهد از نودهای خروجی تأییدشده استفاده کنند. برای محدود کردنش، به‌جای آن به internet دسترسی بدهید: فقط مبدأهای همان grant می‌توانند از طریق نودهای خروجی به اینترنت برسند. خود نود خروجی این را اعمال می‌کند؛ پس دستگاهی که سیاست کنارش گذاشته، حتی اگر تلاش کند هم نمی‌تواند از آن استفاده کند.

نود خروجی‌ای انتخاب کنید که به آن اعتماد دارید

ترافیک شما روی نود خروجی از تونل رمزشده بیرون می‌آید و از همان‌جا به اینترنت می‌رود؛ یعنی نود خروجی همان چیزهایی را می‌بیند که در حالت عادی ارائه‌دهنده‌ی اینترنتتان می‌بیند. HTTPS و هر رمزنگاری دیگری که بین شما و وب‌سایت‌هاست، مثل همیشه کار می‌کند.