پرش به مطلب اصلی

فهرست همه‌ی node‌ها

این صفحه فهرست node‌های عمومی WaterWall است که در نسخهٔ فعلی کد می‌توانید در config استفاده کنید. تنظیمات، رفتار lifecycle و مثال‌های هر node در صفحهٔ خودش توضیح داده شده‌اند.

راهنمای کوتاه​

  • node‌های listener و device معمولاً در لبه‌ی chain قرار می‌گیرند و ترافیک را ایجاد یا دریافت می‌کنند.
  • node‌های connector معمولاً در لبه‌ی خروجی chain هستند و به یک endpoint بیرونی متصل می‌شوند.
  • node‌های packet با packet‌های خام IP یا buffer‌های datagram سروکار دارند؛ مدل آن‌ها با stream معمولی TCP فرق دارد.
  • node‌های bridge مدل packet و stream را به هم وصل می‌کنند، یا دو شاخهٔ جداگانهٔ chain را به هم متصل می‌کنند.
  • بیشتر جفت‌های پروتکلی Client / Server باید در دو سمت مخالف مسیر تنظیم شوند.

node‌های عمومی و قابل تنظیم​

nodeکاربرد اصلیجایگاه رایج
APIServerدسترسی با احراز هویت مستقل به operationهای ثبت‌شده؛ ابتدا status در AuthenticationClient.node انتهایی پس از TcpListener، HttpServer یا TcpOverUdpServer.
AuthenticationClientsession کنترل authentication و جدول کاربران محلی را برای node‌هایی که از API آن استفاده می‌کنند نگه می‌دارد.ابتدای chain مسیر کنترل به سوی AuthenticationServer، اغلب از طریق TcpConnector.
AuthenticationServerbackend انتهایی کنترل authentication است که داده‌های کاربران را ارائه می‌کند و request‌های client را می‌پذیرد.انتهای chain کنترل AuthenticationClient؛ فیلد next ندارد.
Bgp4Clientسمت client از جفت تونل BGP4-style.در سمت مقابل Bgp4Server.
Bgp4Serverسمت server از جفت تونل BGP4-style.در سمت مقابل Bgp4Client.
BlackHoleadapter انتهایی‌ای که برای مسدودسازی یا آزمایش، payload را دور می‌ریزد یا ترافیک را رد می‌کند.انتهای یک chain policy یا آزمایش.
Bridgeدو شاخه‌ی مستقل chain را درون یک فایل config به هم متصل می‌کند.معمولاً به‌صورت یک جفت نام‌گذاری‌شده یا نقطه‌ی اتصال شاخه‌ها.
ConnectionFisherClientچند مسیر سمت client را باز می‌کند یا با هم به رقابت می‌اندازد و اتصال قابل‌استفاده را نگه می‌دارد.در سمت مقابل ConnectionFisherServer.
ConnectionFisherServerسمت server مسیرهای ConnectionFisher.در سمت مقابل ConnectionFisherClient.
ConnectionToPacketsیک connection line را به flow مربوط به TCP/UDP در lwIP داخل process تبدیل می‌کند و packet‌های خام IPv4 را می‌فرستد.bridge میان connection و packet پس از node‌ای که مقصد را تعیین می‌کند، مانند Socks5Server.
Disturberبرای آزمایش، packet loss، تأخیر یا خرابی داده را شبیه‌سازی می‌کند.chain‌های آزمایشی.
DomainResolvernode کمکی پیشرفته‌ای که پیش از فرستادن Init، دامنه‌های موجود در dest_ctx را resolve می‌کند.معمولاً به‌صورت داخلی توسط node‌های connector، ‏Router یا client ساخته می‌شود.
EncryptionClientframing و رمزنگاری AEAD در سمت client.در سمت مقابل EncryptionServer.
EncryptionServerframing و رمزگشایی AEAD در سمت server.در سمت مقابل EncryptionClient.
HalfDuplexClientرفتار half-duplex مربوط به upload و download را تقسیم یا هماهنگ می‌کند.در سمت مقابل HalfDuplexServer.
HalfDuplexServerسمت server از جفت تونل half-duplex.در سمت مقابل HalfDuplexClient.
HeaderClientheader یک‌باره‌ی پورت WaterWall یا header مربوط به IPv4 PROXY protocol را به ابتدای داده می‌افزاید.در سمت مقابل HeaderServer برای header‌های WaterWall، در حالت PROXY source مربوط به HeaderServer، یا پیش از backend سازگار با PROXY protocol.
HeaderServerheader پورت WaterWall را مصرف می‌کند، فیلدهای source در IPv4 PROXY را می‌خواند یا یک پورت مقصد ثابت اعمال می‌کند.در سمت مقابل HeaderClient یا پشت یک فرستنده‌ی قابل‌اعتماد PROXY.
HttpClientpayload را با framing سمت client مربوط به HTTP، ‏HTTP/2، ‏h2c، ‏Custom Upgrade، ‏Split HTTP یا WebSocket حمل می‌کند.برای HTTPS پیش از TlsClient، یا برای HTTP بدون رمزنگاری پیش از یک node انتقال.
HttpServerframing سمت server در HTTP/WebSocket را پردازش می‌کند و payload بدنه را عبور می‌دهد.برای HTTPS پس از TlsServer، یا برای HTTP بدون رمزنگاری پس از listener.
HttpProxyServerپراکسی HTTP/1.x و CONNECT را از chain خروجی تنظیم‌شده عبور می‌دهد.پس از TcpListener، با no-auth صریح یا AuthenticationClient.
IpManipulatorتغییرات ویژه‌ی TCP/TLS/SNI را در سطح packet اعمال می‌کند.chain‌های packet.
IpOverriderفیلدهای IP یا پورت مبدأ و مقصد را در ترافیک packet بازنویسی می‌کند.chain‌های packet.
JunkDatagramSenderبر اساس module‌ها و policy‌های تنظیم‌شده datagram‌های اضافه می‌فرستد.مسیرهای packet یا UDP-oriented برای evasion یا آزمایش.
KeepAliveClientبرای تشخیص مسیرهای قطع‌شده داده‌ی keepalive یا heartbeat می‌فرستد.در سمت مقابل KeepAliveServer.
KeepAliveServerسمت server برای مدیریت keepalive یا heartbeat.در سمت مقابل KeepAliveClient.
LoggerTunnelبدون تغییر رفتار chain، payload را ثبت یا dump می‌کند.هر نقطه‌ای که برای debug مناسب باشد.
MuxClientتعداد زیادی line منطقی را روی اتصال‌های انتقال مشترک multiplex می‌کند.در سمت مقابل MuxServer.
MuxServerline‌های منطقی رسیده از MuxClient را demultiplex می‌کند.در سمت مقابل MuxClient.
ObfuscatorClientobfuscation سبک payload را در سمت client انجام می‌دهد.در سمت مقابل ObfuscatorServer.
ObfuscatorServerهمتای سمت server برای obfuscation و deobfuscation.در سمت مقابل ObfuscatorClient.
PacketReceiverدر محیط‌های محدود، ترافیک packet را برای کشف source IP دریافت می‌کند.chain‌های کشف packet/IP.
PacketSenderبرای کشف source IP یا آزمایش مسیر packet، ترافیک packet می‌فرستد.chain‌های کشف packet/IP.
PacketSplitStreamیک worker packet line را به شاخه‌های نام‌دار upload و بازگشت تقسیم می‌کند.node کمکی ویژه‌ی packet line با استفاده از settings.up و settings.down.
PacketsToConnectionترافیک packet را با کمک lwIP به line‌های عادی اتصال WaterWall تبدیل می‌کند.bridge میان packet و connection.
PacketsToStreamمرز packet‌های خام IPv4 را روی یک line سمت stream حمل می‌کند.در سمت مقابل StreamToPackets.
PingClientIPv4 داخلی را در Echo Request نوع 8 حمل می‌کند، در صورت فعال‌بودن گزینه Reply دقیق می‌سازد و Reply منطبق را به‌عنوان تأیید مصرف می‌کند.chain‌های packet، در برابر PingServer؛ پیش‌فرض send-replies برابر false است.
PingServerدادهٔ Echo Request همتا را یک‌بار تحویل می‌دهد، در صورت فعال‌بودن گزینه Reply دقیق می‌فرستد و دادهٔ معکوس را در request جدید حمل می‌کند.chain‌های packet، در برابر PingClient؛ پیش‌فرض send-replies برابر false است.
RawSocketIP packet‌های خام را می‌فرستد و دریافت می‌کند.ابتدا یا انتهای مسیر packet.
RealityClientابتدا TLS handshake مربوط به visitor را انجام می‌دهد و سپس payload احرازشده‌ی Reality را در record‌های شبیه TLS می‌فرستد.سمت client، پیش از مسیر انتقال به RealityServer.
RealityServerترافیک عادی visitor را به مقصد می‌فرستد و client‌های احرازشده‌ی Reality را به next محافظت‌شده منتقل می‌کند.سمت server، پس از listener.
ReverseClientسمت client یک reverse tunnel را برای عبور از NAT یا firewall می‌سازد.در سمت مقابل ReverseServer.
ReverseServerسمت server برای هماهنگی reverse tunnel.در سمت مقابل ReverseClient.
Routerline‌ها را بر اساس context، ‏filter یا شاخه‌های rule مسیریابی می‌کند.میانه‌ی chain‌های پیچیده.
SniffRouterبر اساس metadata به‌دست‌آمده از sniff کردن ترافیک مسیریابی می‌کند.میانه‌ی chain‌های sniffing/routing.
Socks5Clientبه یک SOCKS5 server بالادستی متصل می‌شود و با آن ارتباط برقرار می‌کند.پیش از مقصد transport یا proxy.
Socks5Serverدرخواست‌های client SOCKS5 را می‌پذیرد و ترافیک پذیرفته‌شده را عبور می‌دهد.حالت TCP-only پس از TcpListener؛ گزینهٔ udp: true به provider پویای UDP در مسیر قبلی نیاز دارد که معمولاً TcpUdpListener است.
SoftIpLimiterتعداد source IP‌هایی را محدود می‌کند که هم‌زمان از یک UUID اولیه‌ی VLESS یا هویت SHA224 مربوط به Trojan استفاده می‌کنند.پس از terminate شدن TLS یا رمزگشایی و پیش از VlessServer، TrojanServer یا یک relay خام به سوی آن‌ها.
SpeedLimitthroughput را محدود می‌کند.میانه‌ی chain.
SpeedTestClientترافیک آزمایش سرعت تولید می‌کند.chain‌های آزمایشی، در برابر SpeedTestServer.
SpeedTestServerبه ترافیک آزمایش سرعت پاسخ می‌دهد.chain‌های آزمایشی، در برابر SpeedTestClient.
StreamToPacketspacket‌های IPv4 را از یک line سمت stream بازسازی می‌کند.در سمت مقابل PacketsToStream.
TcpConnectorاتصال‌های TCP خروجی را باز می‌کند.انتهای chain.
TcpListenerاتصال‌های TCP ورودی را می‌پذیرد و line‌های عادی می‌سازد.ابتدای chain.
TcpOverUdpClientداده‌ی stream-like مربوط به TCP را روی انتقال packet-style مبتنی بر UDP حمل می‌کند.در سمت مقابل TcpOverUdpServer.
TcpOverUdpServerسمت server برای مدیریت TCP-over-UDP.در سمت مقابل TcpOverUdpClient.
TcpUdpConnectorرفتار connector مربوط به TCP و UDP را پشت یک node ترکیب می‌کند.انتهای chain برای مسیریابی ترکیبی TCP/UDP.
TcpUdpListenerرفتار listener مربوط به TCP و UDP را پشت یک node ترکیب می‌کند.ابتدای chain برای ورودی ترکیبی TCP/UDP.
TesterClientترافیک قابل‌تکرار برای اعتبارسنجی تولید و پاسخ‌ها را بررسی می‌کند.ابتدای chain آزمایشی.
TesterServerبه ترافیک قابل‌تکرار Tester پاسخ می‌دهد.انتهای chain آزمایشی.
TlsClientTLS واقعی سمت client را اجرا و record‌های رمزنگاری‌شده‌ی TLS را حمل می‌کند.پیش از TcpConnector یا یک مسیر انتقال دیگر.
TlsServerTLS واقعی سمت server را terminate می‌کند.پس از TcpListener و پیش از node‌های پروتکل cleartext.
TrojanClientframing مربوط به request و authentication سمت client در Trojan را می‌نویسد.در سمت مقابل TrojanServer، معمولاً داخل TLS.
TrojanServerترافیک client Trojan را parse می‌کند و احراز هویت را انجام می‌دهد.در سمت مقابل TrojanClient، معمولاً داخل TLS.
TunDevicepacket‌ها را از طریق دستگاه TUN سیستم‌عامل می‌خواند و می‌نویسد.ابتدا یا انتهای مسیر packet.
UdpConnectorترافیک UDP خروجی را با امکان انتخاب یا resolve کردن مقصد می‌فرستد.انتهای chain.
UdpListenerpeer‌های UDP را می‌پذیرد و به‌ازای هر peer یک line از نوع stateful می‌سازد.ابتدای chain.
UdpOverTcpClientpacket‌های UDP-style را روی انتقال stream حمل می‌کند.در سمت مقابل UdpOverTcpServer.
UdpOverTcpServerسمت server برای مدیریت UDP-over-TCP.در سمت مقابل UdpOverTcpClient.
UdpStatelessSocketبرای datagram‌های خروجی از routing context استفاده می‌کند و برای flow‌های ورودی line‌های عادی peer می‌سازد.ابتدای chain، معمولاً پیش از WireGuardDevice.
UserControllernode کمکی پیشرفته‌ای که با استفاده از AuthenticationClient محدودیت‌های کاربران احرازشده را اعمال می‌کند.معمولاً به‌صورت داخلی توسط node‌های server دارای authentication ساخته می‌شود.
VlessClientframing مربوط به request ساده‌ی client در VLESS v0 را می‌نویسد.در سمت مقابل VlessServer، اغلب داخل انتقال TLS/Reality.
VlessServerترافیک plain VLESS v0 را parse می‌کند و احراز هویت را انجام می‌دهد.در سمت مقابل VlessClient.
WireGuardDeviceرمزنگاری WireGuard، ‏state مربوط به peer و مسیریابی allowed IP را داخل chain پیاده‌سازی می‌کند.میان دقیقاً یک سمت packet لایه‌ی ۳ و یک سمت انتقال لایه‌ی ۴؛ UdpStatelessSocket می‌تواند سمت انتقال ابتدای chain باشد، اما UdpListener adapter سازگار این انتقال نیست.

نوع node مخصوص scaffold​

این node در کد منبع وجود دارد و قالبی برای توسعهٔ tunnel جدید است؛ برای استفادهٔ مستقیم در config کاربر طراحی نشده است:

nodeنقش
Templateقالب اولیه برای توسعهٔ tunnel‌های جدید.

انتخاب chain شروع​

  • proxy ساده‌ی TCP: ‏TcpListener -> ... -> TcpConnector
  • proxy نوع stateful برای UDP: ‏UdpListener -> ... -> UdpConnector
  • لبه‌ی packet و stateless برای UDP: ‏UdpStatelessSocket -> ...
  • تونل کامل IP: ‏TunDevice -> ... -> TunDevice
  • انتقال packet به سبک WireGuard: ‏UdpStatelessSocket -> WireGuardDevice -> TunDevice
  • پل packet روی stream: ‏PacketsToStream در یک سمت و StreamToPackets در سمت دیگر
  • پل rootless از اتصال به packet: ‏TcpListener -> Socks5Server -> ConnectionToPackets -> ... و در سمت راه‌دور، ‏PacketsToConnection -> TcpUdpConnector
  • انتقال stream به‌صورت multiplex: ‏MuxClient در یک سمت و MuxServer در سمت دیگر
  • انتقال شبیه HTTPS: ‏HttpClient -> TlsClient -> TcpConnector و در سمت server، ‏TlsServer -> HttpServer
  • جداسازی visitor/Protected به سبک Reality: ‏RealityClient رو به RealityServer و RealityServer.settings.destination رو به شاخه‌ی visitor