آموزش بخش اول
چگونه واتروال را اجرا کنیم؟
قبل از اینکه آموزش راهاندازی WaterWall را شروع کنیم، باید توضیح دهیم که چگونه میتوان WaterWall را اجرا کرد. WaterWall یک فایل باینری مستقل است و نیاز به نصب پیچیده ندارد؛ کافی است فایل دانلودشده را اجرا کنید
برای دانلود و نصب واتروال یک صفحه جدا ساخته شده . در آن صفحه به شما نحوه دانلود کردن فایل توضیح داده شده ولی به طور کلی دانلود کردن واتروال به این صورته که در گیت هاب پروزه فایل نسخه آخر پروژه رو برای سیستم عامل خود دانلود میکنید و واتروال هیچ نصب خاصی نداره و تمام برنامه در یک فایل خروجی گرفته میشه حتی برای سیستم عامل ویندوز هم نیاز به dll یا فایل اضافه ای ندارد.
پیکر بندی هسته
شما برای کانفیگ کردن واتروال باید در ابتدا فایل core.json را بنویسید و آن را در همان پوشه ای بزارید که واتروال رو در آن جا قرار دادید و اجرا خواهید کرد
این فایل تنظیمات عمومی هسته را تعیین میکند که شامل این موارد هست
توجه: نام فایل باید core.json
باشد و باید در همان پوشهای قرار گیرد که فایل اجرایی WaterWall در آن قرار دارد؛ در غیر این صورت WaterWall اجرا نخواهد شد.
- چقدر RAM استفاده کند 💾
- چند thread اجرا کند 🧵
- چه سطحی از log بنویسد 📝
- کدام تونلها را اجرا کند 🚇
ساختار کلی 📋
{
"log": {
// تنظیمات logging
},
"misc": {
// تنظیمات عمومی
},
"configs": [
// لیست فایلهای پیکربندی تونل
]
}
بخش log
"log": {
"path": "logs/", // پوشه ذخیره سازی فایل های لاگ
"core": { // لاگ هایی که از بخش هسته نوشته میشوند
"loglevel": "INFO", // سطح لاگ که پایین تر توضیح داده شده
"file": "core.log", // اسم فایل
"console": true // باعث می شه که لاگ این بخش را در کنسول هم مشاهده کنید ؛ اگه خاموش باشه فقط در فایل ذخیره میشه
},
"network": { // لاگ های مربوط به شبکه که node ها هم از همین استفاده میکنند و بیشترین لاگ همین بخش هست
"loglevel": "WARN",
"file": "network.log",
"console": true
},
"dns": { // لاگ های مربوط به dns
"loglevel": "ERROR",
"file": "dns.log",
"console": true
},
"internal": { // لاگ های داخلی که مربوط به runtime واتروال میشوند و برای اشکال یابی هم استفاده میشوند
"loglevel": "INFO",
"file": "internal.log",
"console": true
},
}
سطوح Log
سطح | توضیح | کاربرد |
---|---|---|
DEBUG | همه چیز (خیلی پرجزئیات) | 🔍 عیبیابی |
INFO | اطلاعات مهم | 📋 نظارت عادی |
WARN | هشدارها | ⚠️ مسائل احتمالی |
ERROR | فقط خطاها | 🚨 مشکلات |
FATAL | خطاهای بحرانی | 🚨 مشکلات جدی |
SILENT | هیچ log نوشته نمی شود | 🔇 حداکثر عملکرد |
بخش Misc 🔧
{
"misc": {
"workers": 0,
"mtu": 1500,
"ram-profile": "client",
"libs-path": "libs/"
}
}
- مقدار workers اگه صفر تنظیم شده باشه به تعداد هسته های سرور شما ورکر ایجاد خواهد کرد
در غیر این صورت فقط به مقداری که تنظیم شده گوش می دهد که کمترین مقدارش ۱ هست
- mtu این مقدار که پیشفرض خود هسته 1500 هست ؛ درصورتی که در کارت شبکه سرور شما متفاوت باشه مثلا ۱۴۰۰ باشه ؛ الزامی هست که شما هم عدد درست رو قرار بدهید.
صحیح بودن mtu از ۲ جهت مهمه ؛ اگه از روش هایی که node های لایه ۳ دارن استفاده کرده باشید مثل پکت تانل ؛ و اگه mtu واقعی سرور شما از این عدد که در هسته ست شده کمتر باشه ؛ در لاگ بهتون ارور نشون داده می شه (ولی برنامه بسته نمی شه) و همچنین تونل هم وصل نمی شه یا اگه وصل بشه کانفیگتون فقط هند شیک میده و سایتی رو بالا نمیاره ؛ همچنین در بعضی روش ها (عمدتا روش هایی که با udp کار دارند) مقدار صحیح mtu به جلو گیری از فرگمنت شدن و جلو گیری از کاهش کیفیت تانل منجر می شه.
پس حتما اگه تانل هایی بر پایه udp اجرا میکنید این مقدار رو چک کنید چون عمدتا تانل های udp برای گیمر ها زده می شه که پینگ و جیتر رو خیلی خراب می کنه اگه mtu صحصیح نباشه
برای فهمیدن مقدار صحیح mtu از این دستور در لینوکس می توانید استفاده کنید
ip a
که از لاگ این دستور راحت متوجه می شوید mtu چنده ؛ اگه دیدید که لاگ رو متوجه نمی شوید ؛ لاگ رو به چت جی پی تی بدید و ازش بخواید mtu رو بهتون بده
- مقدار ram-profile اندازه استخر های بافر را تعیین میکند که می توانید عدد تنظیم کنید از ۱ تا ۵
یا اینکه به جای عدد یکی از ۳ تا متن زیر را جا گذاری کنید
Profile | معادل عددی | استفاده RAM | کاربرد |
---|---|---|---|
minimal | 1 | ~250 KB | 🪶 سرورهای کم منابع |
client | 3 | 2-10 MB | 💻 کلاینتها |
server | 5 | 40+ MB per thread | 🖥️ سرورهای قدرتمند |
تنظیم این عدد تغییری در کارکرد واتروال ندارد صرفا شاید مصرف CPU رو کاهش بده
که من خودم همی شه صرف نظر از تعداد کاربر روی مقدار client میزارمش چون نمیخوام واتروال رم زیادی مصرف کنه و مصرف cpuاش هم عادیه
- مقدار libs-path برای وقتی هست که یه نفر یه node توسعه میده که پابلیک منتشرش نمیکنه و کد هاش داخل فایل dll یا so هستند و واتروال اگه داخل خودش اون node را پیدا نکنه اونوقت این پوشه رو می گرده؛ ست کردن یا نکردنش تاثیری برای عموم کاربران نداره برای استفاده توسعه دهندگان هست عموما.
بخش Configs 📁
این مهم ترین بخش فایل هست که شما میگید چه فایل هایی را به عنوان کانفیگ میخواهید اجرا کنید
اینجا فقط مسیر فایل رو می دهید که یک فایل json باید باشه
اگه فایلتون کنار خود واتروال قرار گرفته می توانید فقط اسم فایل رو وارد کنید
توجه کنید فایلهای پیکربندی به ترتیبی که در این لیست قرار میدهید، بارگذاری میشوند و ترتیب اجرای تونلها تحت تأثیر این لیست خواهد بود.
{
"configs": [
"config1.json", // اسم فایل وقتی در یک پوشه کنار واتروال قرار گرقته
"config2.json",
"/root/configs/config3.json" // مسیر کامل به فایل
]
}
عموما شما یه کانفیگ اجرا می کنید و نود هارو داخلش قرار می دهید
مثال کامل
این فایل مثال کامل هست که می توانید ازش استفاده کنید و دقت کنید در فایل json کامنت قرار ندهید ؛ کامنت هارو من فقط برای آموزش گذاشته بودم
{
"log": {
"path": "logs/",
"core": {
"loglevel": "DEBUG",
"file": "core.log",
"console": true
},
"network": {
"loglevel": "DEBUG",
"file": "network.log",
"console": true
},
"dns": {
"loglevel": "DEBUG",
"file": "dns.log",
"console": true
},
"internal": {
"loglevel": "DEBUG",
"file": "internal.log",
"console": true
},
},
"misc": {
"workers": 0,
"mtu": 1500,
"ram-profile": "client",
"libs-path": "libs/"
},
"configs": [
"config.json"
]
}
در بخش بعدی آموزش به شما نحوه ساخت یک فایل کانفیگ را آموزش میدهیم
ساختار کلی که تا الان بهش رسیدیم این هست
~/waterwall/
├── Waterwall # فایل اجرایی برنامه
├── core.json # تنظیمات اصلی
پشتیبانی
- مستندات: این راهنما شامل همه چیز است
- GitHub: Issues Discussions
- کامیونیتی: کمک از کاربران دیگر