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

معرفی WaterWall

WaterWall یک فریم‌ورک ماژولار و زنجیره‌محور برای ساخت تونل است. با اتصال Nodeهای کوچک به یکدیگر در فایل‌های پیکربندی JSON، می‌توانید مسیر دلخواه خود را برای ترافیک شبکه بسازید.

یک زنجیره‌ی WaterWall می‌تواند به سادگی یک Port Forward در TCP باشد:

TcpListener -> TcpConnector

یا چندین لایه‌ی انتقال، پروتکل، رمزنگاری، Multiplexing و پردازش Packet را با هم ترکیب کند:

TcpListener -> MuxClient -> VlessClient -> TlsClient -> TcpConnector

همین معماری در سناریوهای Packet-oriented نیز کاربرد دارد؛ از جمله رابط‌های TUN، مسیرهای شبیه WireGuard، پردازش Raw Packet و پل‌های Packet-to-Stream.

WaterWall چگونه کار می‌کند؟

پیکربندی WaterWall از Nodeها ساخته می‌شود.

هر Node وظیفه‌ی مشخصی دارد:

نقش Nodeنمونه‌ها
دریافت ترافیک ورودیTcpListener، UdpListener، TunDevice
اتصال به یک مقصد بیرونیTcpConnector، UdpConnector، UdpStatelessSocket
تغییر یا محافظت از ترافیکTlsClient، EncryptionClient، MuxClient، VlessClient
مسیریابی یا بررسی ترافیکRouter، SniffRouter، LoggerTunnel
ایجاد پل میان مدل Packet و StreamPacketsToStream، StreamToPackets، PacketsToConnection

در فایل JSON، با فیلدهای next این Nodeها را به هم متصل می‌کنید. درخواست‌ها در جهت upstream از زنجیره عبور می‌کنند و پاسخ‌ها در جهت downstream از همان مسیر بازمی‌گردند.

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

مدل پیکربندی

پیکربندی WaterWall دو سطح دارد:

فایلکاربرد
core.jsonRuntime را راه‌اندازی می‌کند، تنظیمات Log، Worker و DNS را در بر می‌گیرد و فهرست فایل‌های پیکربندی را مشخص می‌کند.
فایل‌های پیکربندی Nodeهازنجیره‌های واقعی و تنظیمات Nodeها را تعریف می‌کنند.

نمونه‌ی core.json:

{
"misc": {
"workers": 4,
"ram-profile": "server",
"mtu": 1500,
"try-enabling-bbr": true,
"libs-path": "libs/"
},
"dns": {
"domain-strategy": "prefer-ipv4"
},
"configs": [
"configs/server.json"
]
}

نمونه‌ی پیکربندی یک زنجیره:

{
"name": "simple-forward",
"nodes": [
{
"name": "entry",
"type": "TcpListener",
"settings": {
"address": "0.0.0.0",
"port": 8080
},
"next": "exit"
},
{
"name": "exit",
"type": "TcpConnector",
"settings": {
"address": "example.com",
"port": 80
}
}
]
}

از کجا شروع کنم؟

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

  1. نصب
  2. بخش ۱: تنظیمات هسته
  3. بخش ۲: مبانی شبکه
  4. بخش ۳: فایل‌های پیکربندی و زنجیره‌ها
  5. بخش ۴: انتخاب Nodeها

پس از آن، برای دیدن تنظیمات دقیق هر Node به مرجع Nodeها مراجعه کنید.

اگر قصد دارید خود WaterWall را توسعه دهید، بهتر است ابتدا با پیکربندی معمول زنجیره‌ها کاملاً آشنا شوید و سپس سراغ راهنمای توسعه‌دهندگان بروید.

چرا WaterWall؟

معماری ماژولار

WaterWall همه‌ی سناریوها را به یک شکل ثابت از Proxy محدود نمی‌کند. می‌توانید Listenerها، Connectorها و Nodeهای مربوط به پروتکل، رمزنگاری، Packet و مسیریابی را طوری کنار هم بچینید که دقیقاً با نیاز شبکه‌ی شما هماهنگ باشد.

پیکربندی‌محور

بیشتر کارها از طریق فایل‌های JSON انجام می‌شود. بدون نوشتن کد C می‌توانید زنجیره‌ها را بسازید و تغییر دهید.

پشتیبانی از Stream و Packet

WaterWall فقط به Streamهای معمول TCP محدود نیست. این برنامه می‌تواند با مسیرهای Packet-oriented نیز کار کند و هرجا توپولوژی ایجاب کند، Packetها را از طریق انتقال‌های Stream جابه‌جا کند.

پیاده‌سازی متناسب با Runtime

هسته با زبان C نوشته شده و بر پایه‌ی شبکه‌ی Asynchronous، Worker Threadها، Buffer Poolها و اجزای قابل‌استفاده‌ی مجدد تونل طراحی شده است.

WaterWall چه چیزی نیست؟

WaterWall یک پروفایل VPN ازپیش‌آماده یا یک Proxy یک‌کلیکی نیست؛ بلکه جعبه‌ابزاری برای ساخت مسیرهای شبکه است. این انعطاف قدرت زیادی به شما می‌دهد، اما در عوض باید زنجیره‌ای را که می‌سازید به‌درستی بشناسید.

برای نخستین راه‌اندازی، زنجیره را کوچک نگه دارید، از کارکرد درست آن مطمئن شوید و سپس Nodeها را یکی‌یکی اضافه کنید.