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

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

این صفحه نمایی سریع از Nodeهای عمومی و قابل‌پیکربندی موجود در Source Tree فعلی WaterWall ارائه می‌دهد. برای دیدن تنظیمات دقیق، رفتار چرخه‌ی عمر و مثال‌ها، به صفحه‌ی اختصاصی هر Node مراجعه کنید.

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

  • Nodeهای Listener و Device معمولاً در لبه‌ی زنجیره قرار می‌گیرند و ترافیک را ایجاد یا دریافت می‌کنند.
  • Nodeهای Connector معمولاً در لبه‌ی خروجی زنجیره‌اند و به یک Endpoint بیرونی متصل می‌شوند.
  • Nodeهای Packet، ‏IP Packet خام یا بافرهای شبیه Datagram را حمل می‌کنند، نه Stream معمولی Byteهای TCP.
  • Nodeهای Bridge میان مدل Packet و Stream یا میان شاخه‌های جداگانه‌ی زنجیره پل می‌زنند.
  • بیشتر جفت‌های پروتکلی Client / Server باید در دو سمت مخالف مسیر تنظیم شوند.

Nodeهای عمومی و قابل‌پیکربندی

Nodeکاربرد اصلیجایگاه رایج
AuthenticationClientهویت احرازشده یا Credential کاربر را برای Nodeهای سمت Server که از Authentication آگاه‌اند به ترافیک اضافه می‌کند.پیش از یک Node سمت Server یا پروتکلی که Authentication را می‌شناسد.
AuthenticationServerهویت‌های ورودی را احراز و کاربران مجاز را کنترل می‌کند.در زنجیره‌ی سمت Server و پیش از ترافیک محافظت‌شده.
Bgp4Clientسمت Client از جفت تونل BGP4-style.در برابر Bgp4Server.
Bgp4Serverسمت Server از جفت تونل BGP4-style.در برابر Bgp4Client.
BlackHoleAdapter انتهایی‌ای که برای مسدودسازی یا آزمایش، Payload را دور می‌ریزد یا ترافیک را رد می‌کند.انتهای یک زنجیره‌ی Policy یا آزمایش.
Bridgeدو شاخه‌ی مستقل زنجیره را درون یک فایل پیکربندی به هم متصل می‌کند.معمولاً به‌صورت یک جفت نام‌گذاری‌شده یا نقطه‌ی اتصال شاخه‌ها.
ConnectionFisherClientچند مسیر سمت Client را باز می‌کند یا با هم به رقابت می‌اندازد و اتصال قابل‌استفاده را نگه می‌دارد.در برابر ConnectionFisherServer.
ConnectionFisherServerسمت Server مسیرهای ConnectionFisher.در برابر ConnectionFisherClient.
Disturberبرای آزمایش، Packet Loss، تأخیر یا خرابی داده را شبیه‌سازی می‌کند.زنجیره‌های آزمایشی.
DomainResolverNode کمکی پیشرفته‌ای که پیش از Forwardکردن 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.
IpManipulatorتغییرات ویژه‌ی TCP/TLS/SNI را در سطح Packet اعمال می‌کند.زنجیره‌های Packet.
IpOverriderفیلدهای IP یا پورت مبدأ و مقصد را در ترافیک Packet بازنویسی می‌کند.زنجیره‌های Packet.
JunkDatagramSenderبر اساس Moduleها و Policyهای تنظیم‌شده Datagramهای اضافه می‌فرستد.مسیرهای Packet یا UDP-oriented برای Evasion یا آزمایش.
KeepAliveClientبرای تشخیص مسیرهای قطع‌شده داده‌ی Keepalive یا Heartbeat می‌فرستد.در برابر KeepAliveServer.
KeepAliveServerسمت Server برای مدیریت Keepalive یا Heartbeat.در برابر KeepAliveClient.
LoggerTunnelبدون تغییر رفتار زنجیره، Payload را ثبت یا Dump می‌کند.هر نقطه‌ای که برای Debug مناسب باشد.
MuxClientتعداد زیادی Line منطقی را روی اتصال‌های انتقال مشترک Multiplex می‌کند.در برابر MuxServer.
MuxServerLineهای منطقی رسیده از MuxClient را Demultiplex می‌کند.در برابر MuxClient.
ObfuscatorClientObfuscation سبک Payload را در سمت Client انجام می‌دهد.در برابر ObfuscatorServer.
ObfuscatorServerهمتای سمت Server برای Obfuscation و برگرداندن آن.در برابر ObfuscatorClient.
PacketReceiverدر محیط‌های محدود، ترافیک Packet را برای کشف Source IP دریافت می‌کند.زنجیره‌های کشف Packet/IP.
PacketSenderبرای کشف Source IP یا آزمایش مسیر Packet، ترافیک Packet می‌فرستد.زنجیره‌های کشف Packet/IP.
PacketSplitStreamرفتار ترکیبی Packet/Stream را میان سمت Packet و Stream تقسیم می‌کند.زنجیره‌های مرزی Packet/Stream.
PacketsToConnectionترافیک Packet را با کمک lwIP به Lineهای عادی اتصال WaterWall تبدیل می‌کند.پل Packet-to-Stream.
PacketsToStreamمرز Packetهای خام IPv4 را روی یک Line سمت Stream حمل می‌کند.در برابر StreamToPackets.
PingClientPayload مربوط به Packet را در ترافیکی شبیه IPv4 ICMP کپسوله می‌کند.زنجیره‌های Packet، در برابر PingServer.
PingServerPayload مربوط به Packet را در جهت تونل Ping از پوشش خارج می‌کند.زنجیره‌های Packet، در برابر PingClient.
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 مسیریابی می‌کند.میانه‌ی زنجیره‌های پیچیده.
SniffRouterبر اساس Metadata به‌دست‌آمده از Sniffکردن ترافیک مسیریابی می‌کند.میانه‌ی زنجیره‌های Sniffing/Routing.
Socks5Clientبا یک Server بالادستی SOCKS5 صحبت می‌کند.پیش از مقصد Transport یا Proxy.
Socks5ServerRequestهای Client نوع SOCKS5 را می‌پذیرد و ترافیک آن‌ها را عبور می‌دهد.پس از Listener یا Wrapper مربوط به TLS/پروتکل.
SoftIpLimiterتعداد Source IPهایی را محدود می‌کند که هم‌زمان از یک UUID اولیه‌ی VLESS یا هویت SHA224 مربوط به Trojan استفاده می‌کنند.پس از Wrapper مربوط به TLS/پروتکل و پیش از VlessServer یا TrojanServer.
SpeedLimitThroughput را محدود می‌کند.میانه‌ی زنجیره.
SpeedTestClientترافیک آزمایش سرعت تولید می‌کند.زنجیره‌های آزمایشی، در برابر SpeedTestServer.
SpeedTestServerبه ترافیک آزمایش سرعت پاسخ می‌دهد.زنجیره‌های آزمایشی، در برابر SpeedTestClient.
StreamToPacketsPacketهای IPv4 را از یک Line سمت Stream بازسازی می‌کند.در برابر PacketsToStream.
TcpConnectorاتصال‌های TCP خروجی را باز می‌کند.انتهای زنجیره.
TcpListenerاتصال‌های TCP ورودی را می‌پذیرد و Lineهای عادی می‌سازد.ابتدای زنجیره.
TcpOverUdpClientداده‌ی Stream-like مربوط به TCP را روی انتقال Packet-style مبتنی بر UDP حمل می‌کند.در برابر TcpOverUdpServer.
TcpOverUdpServerسمت Server برای مدیریت TCP-over-UDP.در برابر TcpOverUdpClient.
TcpUdpConnectorرفتار Connector مربوط به TCP و UDP را پشت یک Node ترکیب می‌کند.انتهای زنجیره برای مسیریابی ترکیبی TCP/UDP.
TcpUdpListenerرفتار Listener مربوط به TCP و UDP را پشت یک Node ترکیب می‌کند.ابتدای زنجیره برای ورودی ترکیبی TCP/UDP.
TesterClientترافیک قابل‌تکرار برای اعتبارسنجی تولید و پاسخ‌ها را بررسی می‌کند.Chain Head آزمایشی.
TesterServerبه ترافیک قابل‌تکرار Tester پاسخ می‌دهد.Chain End آزمایشی.
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کردن مقصد می‌فرستد.انتهای زنجیره.
UdpListenerPeerهای UDP را می‌پذیرد و به‌ازای هر Peer یک Line از نوع Stateful می‌سازد.ابتدای زنجیره.
UdpOverTcpClientPacketهای UDP-style را روی انتقال Stream حمل می‌کند.در برابر UdpOverTcpServer.
UdpOverTcpServerسمت Server برای مدیریت UDP-over-TCP.در برابر UdpOverTcpClient.
UdpStatelessSocketDatagramهای UDP را با Routing Context و بدون Line جداگانه برای هر Peer می‌فرستد و دریافت می‌کند.لبه‌ی UDP Packet، اغلب در کنار WireGuardDevice.
UserControllerNode کمکی پیشرفته‌ای که با استفاده از AuthenticationClient محدودیت‌های کاربران احرازشده را اعمال می‌کند.معمولاً به‌صورت داخلی توسط Nodeهای Server دارای Authentication ساخته می‌شود.
VlessClientFraming مربوط به Request ساده‌ی Client در VLESS v0 را می‌نویسد.در برابر VlessServer، اغلب داخل انتقال TLS/Reality.
VlessServerترافیک ساده‌ی VLESS v0 را Parse و احراز می‌کند.در برابر VlessClient.
WireGuardDeviceرمزنگاری WireGuard، ‏State مربوط به Peer و مسیریابی Allowed IP را داخل زنجیره پیاده‌سازی می‌کند.میان سمت Packet و UdpStatelessSocket.

نوع Node مخصوص Scaffold

این نوع Node در Source Code وجود دارد، اما یک تونل معمول برای استفاده‌ی مستقیم کاربر نیست:

Nodeنقش
TemplateScaffold توسعه‌دهنده برای ساخت تونل‌های تازه.

انتخاب زنجیره‌ی شروع

  • Proxy ساده‌ی TCP: ‏TcpListener -> ... -> TcpConnector
  • Proxy نوع Stateful برای UDP: ‏UdpListener -> ... -> UdpConnector
  • لبه‌ی Packet و Stateless برای UDP: ‏UdpStatelessSocket -> ...
  • تونل کامل IP: ‏TunDevice -> ... -> TunDevice
  • انتقال Packet به سبک WireGuard: ‏TunDevice -> WireGuardDevice -> UdpStatelessSocket
  • پل Packet روی Stream: ‏PacketsToStream در یک سمت و StreamToPackets در سمت دیگر
  • انتقال Stream به‌صورت Multiplex: ‏MuxClient در یک سمت و MuxServer در سمت دیگر
  • انتقال شبیه HTTPS: ‏HttpClient -> TlsClient -> TcpConnector و در سمت Server، ‏TlsServer -> HttpServer
  • جداسازی Visitor/Protected به سبک Reality: ‏RealityClient رو به RealityServer و RealityServer.settings.destination رو به شاخه‌ی Visitor