فهرست همهی 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. |
AuthenticationClient | session کنترل authentication و جدول کاربران محلی را برای nodeهایی که از API آن استفاده میکنند نگه میدارد. | ابتدای chain مسیر کنترل به سوی AuthenticationServer، اغلب از طریق TcpConnector. |
AuthenticationServer | backend انتهایی کنترل authentication است که دادههای کاربران را ارائه میکند و requestهای client را میپذیرد. | انتهای chain کنترل AuthenticationClient؛ فیلد next ندارد. |
Bgp4Client | سمت client از جفت تونل BGP4-style. | در سمت مقابل Bgp4Server. |
Bgp4Server | سمت server از جفت تونل BGP4-style. | در سمت مقابل Bgp4Client. |
BlackHole | adapter انتهاییای که برای مسدودسازی یا آزمایش، 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های آزمایشی. |
DomainResolver | node کمکی پیشرفتهای که پیش از فرستادن Init، دامنههای موجود در dest_ctx را resolve میکند. | معمولاً بهصورت داخلی توسط nodeهای connector، Router یا client ساخته میشود. |
EncryptionClient | framing و رمزنگاری AEAD در سمت client. | در سمت مقابل EncryptionServer. |
EncryptionServer | framing و رمزگشایی AEAD در سمت server. | در سمت مقابل EncryptionClient. |
HalfDuplexClient | رفتار half-duplex مربوط به upload و download را تقسیم یا هماهنگ میکند. | در سمت مقابل HalfDuplexServer. |
HalfDuplexServer | سمت server از جفت تونل half-duplex. | در سمت مقابل HalfDuplexClient. |
HeaderClient | header یکبارهی پورت WaterWall یا header مربوط به IPv4 PROXY protocol را به ابتدای داده میافزاید. | در سمت مقابل HeaderServer برای headerهای WaterWall، در حالت PROXY source مربوط به HeaderServer، یا پیش از backend سازگار با PROXY protocol. |
HeaderServer | header پورت WaterWall را مصرف میکند، فیلدهای source در IPv4 PROXY را میخواند یا یک پورت مقصد ثابت اعمال میکند. | در سمت مقابل HeaderClient یا پشت یک فرستندهی قابلاعتماد PROXY. |
HttpClient | payload را با framing سمت client مربوط به HTTP، HTTP/2، h2c، Custom Upgrade، Split HTTP یا WebSocket حمل میکند. | برای HTTPS پیش از TlsClient، یا برای HTTP بدون رمزنگاری پیش از یک node انتقال. |
HttpServer | framing سمت 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. |
MuxServer | lineهای منطقی رسیده از MuxClient را demultiplex میکند. | در سمت مقابل MuxClient. |
ObfuscatorClient | obfuscation سبک 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. |
PingClient | IPv4 داخلی را در Echo Request نوع 8 حمل میکند، در صورت فعالبودن گزینه Reply دقیق میسازد و Reply منطبق را بهعنوان تأیید مصرف میکند. | chainهای packet، در برابر PingServer؛ پیشفرض send-replies برابر false است. |
PingServer | دادهٔ Echo Request همتا را یکبار تحویل میدهد، در صورت فعالبودن گزینه Reply دقیق میفرستد و دادهٔ معکوس را در request جدید حمل میکند. | chainهای packet، در برابر PingClient؛ پیشفرض send-replies برابر false است. |
RawSocket | IP 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. |
Router | lineها را بر اساس 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 خام به سوی آنها. |
SpeedLimit | throughput را محدود میکند. | میانهی chain. |
SpeedTestClient | ترافیک آزمایش سرعت تولید میکند. | chainهای آزمایشی، در برابر SpeedTestServer. |
SpeedTestServer | به ترافیک آزمایش سرعت پاسخ میدهد. | chainهای آزمایشی، در برابر SpeedTestClient. |
StreamToPackets | packetهای 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 آزمایشی. |
TlsClient | TLS واقعی سمت client را اجرا و recordهای رمزنگاریشدهی TLS را حمل میکند. | پیش از TcpConnector یا یک مسیر انتقال دیگر. |
TlsServer | TLS واقعی سمت server را terminate میکند. | پس از TcpListener و پیش از nodeهای پروتکل cleartext. |
TrojanClient | framing مربوط به request و authentication سمت client در Trojan را مینویسد. | در سمت مقابل TrojanServer، معمولاً داخل TLS. |
TrojanServer | ترافیک client Trojan را parse میکند و احراز هویت را انجام میدهد. | در سمت مقابل TrojanClient، معمولاً داخل TLS. |
TunDevice | packetها را از طریق دستگاه TUN سیستمعامل میخواند و مینویسد. | ابتدا یا انتهای مسیر packet. |
UdpConnector | ترافیک UDP خروجی را با امکان انتخاب یا resolve کردن مقصد میفرستد. | انتهای chain. |
UdpListener | peerهای UDP را میپذیرد و بهازای هر peer یک line از نوع stateful میسازد. | ابتدای chain. |
UdpOverTcpClient | packetهای UDP-style را روی انتقال stream حمل میکند. | در سمت مقابل UdpOverTcpServer. |
UdpOverTcpServer | سمت server برای مدیریت UDP-over-TCP. | در سمت مقابل UdpOverTcpClient. |
UdpStatelessSocket | برای datagramهای خروجی از routing context استفاده میکند و برای flowهای ورودی lineهای عادی peer میسازد. | ابتدای chain، معمولاً پیش از WireGuardDevice. |
UserController | node کمکی پیشرفتهای که با استفاده از AuthenticationClient محدودیتهای کاربران احرازشده را اعمال میکند. | معمولاً بهصورت داخلی توسط nodeهای server دارای authentication ساخته میشود. |
VlessClient | framing مربوط به 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