معرفی 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 و Stream | PacketsToStream، StreamToPackets، PacketsToConnection |
در فایل JSON، با فیلدهای next این Nodeها را به هم متصل میکنید. درخواستها در
جهت upstream از زنجیره عبور میکنند و پاسخها در جهت downstream از همان مسیر
بازمیگردند.
از آنجا که Nodeها قابل ترکیباند، میتوانید کار را با یک پیکربندی کوچک و سالم شروع کنید و قابلیتهای موردنیاز را لایهبهلایه به آن بیفزایید.
مدل پیکربندی
پیکربندی WaterWall دو سطح دارد:
| فایل | کاربرد |
|---|---|
core.json | Runtime را راهاندازی میکند، تنظیمات 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
}
}
]
}
از کجا شروع کنم؟
راهنمای کاربران را به ترتیب زیر بخوانید:
پس از آن، برای دیدن تنظیمات دقیق هر 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ها را یکییکی اضافه کنید.