📄️ فهرست بهروز نودها
این صفحه یک نمای سریع از نودها و تونلهای موجود در سورس فعلی WaterWall است. برای تنظیم واقعی هر نود، صفحه اختصاصی همان نود را بخوانید؛ اما این جدول کمک میکند بفهمید هر نود در چه جای زنجیر استفاده میشود.
📄️ BlackHole
BlackHole یک تونل میانی برای مصرف کردن payload است. این نود payload را عبور نمیدهد، اما بسته به mode میتواند lifecycle زنجیر را زنده نگه دارد یا همان ابتدا اتصال را ببندد.
📄️ TcpListener
TcpListener نود سرور TCP است. روی یک آدرس و پورت یا بازه پورت گوش میدهد، برای هر client پذیرفتهشده یک line جدید میسازد و آن line را به نود بعدی زنجیر تحویل میدهد.
📄️ TcpConnector
TcpConnector نود خروجی TCP است. این نود در upstream Init مقصد را از تنظیمات خودش یا از routing context خط انتخاب میکند، socket TCP میسازد، به مقصد connect میکند و payload را بین نود قبلی و remote server جابهجا میکند.
📄️ ConnectionFisherClient
ConnectionFisherClient برای هر line ورودی چند اتصال خروجی همزمان به سمت next میسازد، روی هرکدام یک probe پنجبایتی میفرستد و اولین اتصالی را که پاسخ معتبر از ConnectionFisherServer بگیرد نگه میدارد.
📄️ ConnectionFisherServer
ConnectionFisherServer سمت مقابل ConnectionFisherClient است. این نود ابتدا منتظر probe میماند، فقط اگر پنج بایت اول برابر FISH? باشد پاسخ FISH! میدهد و سپس line را به نود بعدی وصل میکند.
📄️ Disturber
Disturber نود مخصوص تست است و رفتار شبکه خراب را داخل زنجیر شبیهسازی میکند: قطع ناگهانی، loss، corruption، duplication، out-of-order، delay و dead-hang.
📄️ EncryptionClient
EncryptionClient payload upstream را با AEAD رمز میکند و downstream رمزشده را دوباره به payload خام تبدیل میکند. سمت مقابل آن EncryptionServer است.
📄️ UdpListener
UdpListener نود سرور UDP است. روی یک آدرس و پورت یا بازه پورت گوش میدهد، packetهای ورودی را براساس remote peer گروهبندی میکند، برای هر peer یک line میسازد و payloadها را به نود بعدی میفرستد.
📄️ EncryptionServer
EncryptionServer سمت سرور EncryptionClient است. upstream ورودی رمزشده را decrypt میکند و downstream خام را دوباره برای برگشت رمز میکند.
📄️ UdpConnector
UdpConnector نود خروجی UDP است. این نود یک UDP socket محلی میسازد، مقصد را انتخاب میکند و datagramها را بین نود قبلی و remote peer جابهجا میکند.
📄️ ObfuscatorClient
ObfuscatorClient یک transform برگشتپذیر روی payload اعمال میکند تا الگوهای واضح داخل traffic کمتر دیده شوند. این نود رمزنگاری امن نیست؛ برای امنیت واقعی از EncryptionClient/Server یا TLS استفاده کنید.
📄️ ObfuscatorServer
ObfuscatorServer سمت مقابل ObfuscatorClient است. payload تغییرشکلدادهشده را از سمت transport میگیرد، همان transform برگشتپذیر را اعمال میکند تا payload اصلی بازیابی شود، و پاسخهای برگشتی را دوباره obfuscate میکند.
📄️ HalfDuplexClient
📖 معرفی کلی
📄️ HalfDuplexServer
📖 معرفی کلی
📄️ HttpClient
HttpClient payload واتروال را داخل یک درخواست HTTP میفرستد و در مسیر برگشت فقط body پاسخ HTTP را به نود قبلی تحویل میدهد. این نود HTTP/1.1، HTTP/2 تکاستریم و upgrade از HTTP/1.1 به h2c را پشتیبانی میکند. اگر websocket فعال باشد، HTTP فقط برای handshake استفاده میشود و بعد payloadها به صورت WebSocket binary frame جابهجا میشوند.
📄️ HttpServer
HttpServer سمت معکوس HttpClient است. درخواست HTTP را میخواند، فقط body را به نود بعدی میدهد و payload برگشتی را به response body تبدیل میکند. این نود HTTP/1.1، HTTP/2 مستقیم، h2c upgrade و WebSocket را پشتیبانی میکند.
📄️ MuxClient
MuxClient چندین اتصال منطقی WaterWall را روی تعداد کمتری اتصال transport مشترک حمل میکند. به جای اینکه برای هر line ورودی یک اتصال کامل تا سمت مقابل ساخته شود، MuxClient یک یا چند line والد به سمت next باز میکند و streamهای منطقی را داخل frameهای داخلی MUX روی همان والدها میفرستد.
📄️ KeepAliveClient
KeepAliveClient payload را با یک header سهبایتی قاببندی میکند و روی هر line زنده ping داخلی میفرستد تا مسیر برای NAT، فایروال یا middleboxهای timeout محور فعال به نظر برسد. سمت مقابل آن باید KeepAliveServer باشد.
📄️ KeepAliveServer
KeepAliveServer سمت مقابل KeepAliveClient است. این نود همان frame سهبایتی KeepAlive را از upstream باز میکند، payload عادی را جلو میفرستد و به pingها با pong پاسخ میدهد.
📄️ StreamToPackets
StreamToPackets نام فعلی نودی است که در بعضی مستندات قدیمی با مفهوم DataAsPacket شناخته میشد. این نود stream شامل packetهای قاببندیشده را میخواند و packet خام را برای نود packet-oriented بعدی بازسازی میکند.
📄️ MuxServer
MuxServer سمت مقابل MuxClient است. این نود یک parent transport line را که frameهای MUX داخل آن آمده میخواند، برای frameهای Open child line جدید میسازد و هر child را مثل یک اتصال مستقل به نود بعدی تحویل میدهد.
📄️ PacketsToStream
PacketsToStream نام فعلی نودی است که در بعضی مستندات قدیمی با مفهوم PacketAsData آمده بود. این نود packet خام را با یک prefix دو بایتی طول، به stream معمولی تبدیل میکند و در مسیر برگشت دوباره packet boundary را بازسازی میکند.
📄️ PacketsToConnection
PacketsToConnection یک bridge بین packet خام و connectionهای معمولی WaterWall است و روی lwIP ساخته شده است. این نود packetهای IPv4 را وارد lwIP میکند و flowهای TCP/UDP حاصل را به صورت lineهای عادی به نود بعدی میدهد.
📄️ ReverseClient
📖 معرفی کلی
📄️ PacketSender
PacketSender یک chain-head لایه ۳ برای ساخت و ارسال packetهای IPv4 مصنوعی است. این نود در startup یک packet store میسازد و packetها را در طول مدت تنظیمشده به شکل یکنواخت روی worker packet lineها پخش میکند.
📄️ PacketSplitStream
PacketSplitStream یک packet-line anchored bridge است. این نود یک worker packet line را به دو line پایدار stream-facing تقسیم میکند: یک خط up برای ارسال packetها به شاخه upload و یک خط down برای دریافت payload برگشتی از شاخه download.
📄️ ReverseServer
📖 معرفی کلی
📄️ PingClient
PingClient یک pure packet tunnel لایه ۳ است. این نود packetهای IPv4 را با یکی از strategyهای ICMP-related تغییر شکل میدهد و در مسیر برگشت، منطق معکوس همان strategy را اعمال میکند.
📄️ PingServer
PingServer سمت مقابل PingClient است. در مسیر upstream، packetهای disguise شده توسط client را به حالت اصلی برمیگرداند و در مسیر downstream همان strategy را دوباره برای برگشت به سمت client اعمال میکند.
📄️ RawSocket
RawSocket نام فعلی نودی است که در بعضی مستندات قدیمی با عنوان RawDevice آمده بود. این نود WaterWall را به capture و injection خام IPv4 وصل میکند: packetهای match شده را از stack شبکه host میگیرد و packetهای خامی را که از زنجیر میرسند دوباره inject میکند.
📄️ UdpOverTcpClient
📖 معرفی کلی
📄️ UdpOverTcpServer
📖 معرفی کلی
📄️ Socks5Client
Socks5Client سمت client پروتکل SOCKS5 است. این نود روی اتصال stream بعدی greeting، احراز هویت اختیاری و دستور CONNECT را میفرستد و payload برنامه را تا موفق شدن handshake نگه میدارد.
📄️ Socks5Server
Socks5Server سمت server پروتکل SOCKS5 را داخل زنجیر WaterWall پیاده میکند. این نود method negotiation و احراز هویت اختیاری را انجام میدهد و سپس CONNECT یا UDP ASSOCIATE را به مسیرهای WaterWall تبدیل میکند.
📄️ SpeedLimit
SpeedLimit payload را با token bucket محدود میکند. این نود داده پروتکل را تغییر نمیدهد؛ فقط تعیین میکند هر payload چه زمانی اجازه عبور دارد یا در modeهای packet چه زمانی drop شود.
📄️ TcpOverUdpClient
TcpOverUdpClient یک stream شبیه TCP را روی مسیر packet/datagram مثل UDP حمل میکند. این کار با KCP انجام میشود: payload عادی از نود قبلی گرفته میشود، به segmentهای KCP تبدیل میشود و به صورت datagram به نود بعدی میرود.
📄️ TcpOverUdpServer
TcpOverUdpServer سمت سرور TcpOverUdpClient است. این نود datagramهای KCP را از سمت قبلی میگیرد، stream اصلی را بازسازی میکند و payload را مثل یک stream معمولی به نود بعدی میدهد. پاسخهای سمت بعدی دوباره داخل KCP packet میشوند و به سمت قبلی برمیگردند.
📄️ TesterClient
TesterClient یک chain-head تست است. به ازای هر worker یک flow تست میسازد، یک توالی deterministic از request chunkها میفرستد و responseهای برگشتی را از نظر اندازه، ترتیب و الگوی بایت بررسی میکند.
📄️ TesterServer
TesterServer سمت پایان زنجیر برای TesterClient است. requestهای deterministic را بررسی میکند و response deterministic را روی همان line برمیگرداند. هر mismatch در اندازه، ترتیب، pattern یا lifecycle خطای جدی تست است.
📄️ TlsClient
TlsClient یک wrapper سمت client برای TLS است و روی BoringSSL موجود در سورس WaterWall ساخته شده است. این نود payload خام را از نود قبلی میگیرد، آن را به TLS record برای نود بعدی تبدیل میکند و در مسیر برگشت TLS recordها را decrypt میکند.
📄️ TlsServer
TlsServer سمت server پروتکل TLS در WaterWall است و با OpenSSL کار میکند. این نود handshake واقعی TLS انجام میدهد، TLS recordهای ورودی را به cleartext برای نود بعدی تبدیل میکند و payload برگشتی را دوباره داخل TLS record میفرستد.
📄️ UdpStatelessSocket
📖 معرفی کلی
📄️ WireGuardDevice
WireGuardDevice پیادهسازی WireGuard داخل زنجیر WaterWall است. این نود pure packet tunnel است: نه socket UDP میسازد، نه interface سیستمعامل WireGuard ایجاد میکند. کار آن تبدیل بین packetهای IP داخلی و پیامهای WireGuard handshake/transport است.
📄️ LoggerTunnel
LoggerTunnel payload را مشاهده و ثبت میکند، اما داده، lifecycle و جهت زنجیر را تغییر نمیدهد. این نود برای debug و عیبیابی بسیار مفید است.
📄️ IpManipulator
📖 معرفی کلی
📄️ Bridge
📖 معرفی کلی
📄️ IpOverrider
IpOverrider آدرسهای IP داخل packet را rewrite میکند. نسخه فعلی میتواند در یک instance، برای upstream و downstream و برای source/destination ruleهای مستقل داشته باشد؛ بنابراین برای خیلی از سناریوهایی که قبلا چند IpOverrider پشت سر هم لازم بود، حالا یک نود کافی است.
📄️ TunDevice
📖 معرفی کلی