این راهنما همهچیزی که برای استفاده از Aether لازم داری رو با زبان ساده توضیح میده، طوری که حتی اگه اولین بار که همچین برنامهای رو اجرا میکنی، گیج نشی.
Aether یه «تونل» میسازه. یعنی یه مسیر رمزنگاریشده به بیرون از شبکهٔ فیلترشده باز میکنه، و کنار خودش (روی کامپیوتر خودت) یه پراکسی محلی به اسم SOCKS5 بالا میاره. هر برنامهای که بتونه از یه پراکسی رد بشه — مرورگر، ترمینال، یا کل سیستم — ترافیکش از داخل همین تونل عبور میکنه.
آدرس پیشفرض این پراکسی همیشه اینه: 127.0.0.1:1819
Aether رو میشه سهجوری کنترل کرد، و میتونی هرکدوم رو با بقیه ترکیب کنی:
۱. سؤالهای تعاملی — فقط برنامه رو بدون هیچ آرگومانی اجرا کن و به سؤالها جواب بده. ۲. پرچمهای خط فرمان (flags) — یه نحو کوتاه و بهیادماندنی برای انتخابهای رایج. ۳. متغیرهای محیطی — برای اسکریپتها، سرویسها، و کنترل کامل (هر پرچم معادل یکیشونه).
نحو پرچمها اینشکلیه:
./aether --bind 127.0.0.1:1819 -4 --masque --turbo --noize firewall
./aether --wg --scan balanced --keepalive 25
./aether --gool --wg-peer 162.159.192.1:2408 --dual
با ./aether --help میتونی کل لیست رو ببینی. رایجترینهاش:
--bind <addr> آدرس گوشدادن پراکسی SOCKS5 (پیشفرض 127.0.0.1:1819)
-4 / -6 / --dual اسکن فقط IPv4 / فقط IPv6 / هر دو
--peer <ip:port> مجبور کردن یک پیر و رد شدن از اسکن
--masque / --wg / --gool انتخاب پروتکل
--scan <mode> turbo | balanced | thorough | stealth | ironclad
--turbo/--balanced/--thorough/--stealth/--ironclad میانبر برای --scan
--noize <profile> پروفایل استتار
--h2, --http2 استفاده از HTTP/2 بهجای HTTP/3 برای MASQUE
--fragment فرگمنت کردن TLS ClientHello (فقط روی HTTP/2)
--quick-reconnect بدون سؤال، همیشه از آخرین گیتوی سالم استفاده کن
--no-quick-reconnect بدون سؤال، همیشه از نو اسکن کن
هر پرچمی که ندی، به معادل متغیر محیطیاش برمیگرده، و هر متغیر محیطی که تنظیم نکنی، به سؤال تعاملی (یا یه مقدار پیشفرض معقول) برمیگرده. تنظیم کردن پرچم یا متغیر همون چیزیه که اون سؤال مربوطه رو خاموش میکنه.
اولین چیزی که Aether موقع اجرا ازت میپرسه اینه که با کدوم روش (پروتکل) کار کنه. سه انتخاب داری:
مدرنترین حالت و پیشفرض برنامه. ترافیکت داخل یه اتصال رمزنگاریشده مخفی میشه که دقیقاً شبیه ترافیک عادی وبگردیه. روی شبکههایی که همهچیز رو با دقت بررسی میکنن، این ساکتترین و کمدردسرترین انتخابه. اگه نمیدونی از کجا شروع کنی، از همین شروع کن.
یه تونل کلاسیک، سبک و خیلی سریع. کمترین سربار رو داره، پس وقتی وصل بشه، سریعترین حس رو میده. برای شبکههایی خوبه که فقط آدرسهای شناختهشده رو میبندن ولی خیلی موشکافانه دنبال شکل ترافیک نمیگردن.
این یعنی یه اتصال WireGuard داخل یه اتصال WireGuard دیگه پیچیده میشه — دو لایه رمزنگاری روی هم. یهکم کندتره ولی وقتی یه لایه برای رد شدن کافی نیست، میتونه فرق رو بسازه. اگه WireGuard معمولی وصل میشه ولی پایدار نیست، این حالت رو امتحان کن.
Aether هیچ آدرسی رو از قبل توی خودش ثابت نکرده. دلیلش سادهست: هر شبکه و هر اپراتور فرق داره، و آدرسی که امروز روی یه اینترنت کار میکنه، ممکنه روی یه اینترنت دیگه اصلاً جواب نده.
پس بهجای حدس زدن، برنامه خودش یه دور «اسکن» میزنه: یهسری آدرس و پورت مختلف رو امتحان میکنه، جواب واقعی و سرعت پاسخ (پینگ) هر کدوم رو اندازه میگیره، و بهترینی که پیدا کرد رو انتخاب میکنه.
موقع اجرا ازت میپرسه که این اسکن چقدر جدی و دقیق باشه. پنج حالت داری:
- turbo — تند و زود. با اولین جوابی که گیر بیاره راضی میشه. برای وقتی که فقط میخوای سریع وصل بشی.
- balanced — حالت پیشفرض و متعادل. برای بیشتر مواقع همین خوبه.
- thorough — عمیقتر میگرده، دنبال بهترین پینگ. کندتره ولی نتیجه باکیفیتتره.
- stealth — آروم و صبور. آهسته اسکن میکنه تا سروصدای کمتری روی شبکه بذاره (کمتر جلب توجه کنه).
- ironclad — کندترین ولی قطعیترین حالت. بقیهی حالتها فقط با هندشیک و یه پروب کوچیک تصمیم میگیرن یه کاندید خوبه یا نه. ironclad یه قدم جلوتر میره: اول یه لیست کوتاه از کاندیدهایی که هندشیک زدن رو جمع میکنه (دقیقاً مثل balanced)، بعد برای هرکدوم یه تونل واقعی و کامل برقرار میکنه، ازش یه درخواست HTTP واقعی میفرسته، و منتظر یه جواب واقعی میمونه — دقیقاً همون کاری که ابزارهایی مثل v2ray/xray برای تأیید یه پراکسی انجام میدن. کاندیدی که سریعترین رفتوبرگشت واقعی رو داشت، برنده میشه. وقتی یه گیتوی توی اسکن سالم بهنظر میرسید ولی بعد از وصل شدن داده رد نکرد، این حالت رو امتحان کن.
همچنین ازت میپرسه که روی آدرسهای IPv4 بگرده، IPv6، یا هر دو. اگه اینترنتت IPv6 نداره، روی IPv4 بمون.
این مهمترین بخشیه که باعث میشه Aether روی اینترنت سختگیر هم زنده بمونه.
دستگاههای بازرسی عمیق بستهها (که بهشون DPI میگن) اول هر اتصال، دنبال یه امضای مشخص و ثابت میگردن. هر پروتکل موقع «دستدادن» اولیه یه شکل خاص داره، و همین شکلِ خاص لو میده که چه پروتکلی داره استفاده میشه.
Aether قبل از اینکه گفتوگوی واقعی شروع بشه، یهسری بستهٔ «آشغال» و تصادفی میفرسته تا شروع اتصال از بیرون شبیه یه الگوی قابلشناسایی نباشه. همچنین میتونه بین مراحل دستدادن یهکم مکث بذاره و با فاصلههای نامنظم بسته بفرسته، تا الگوی زمانیِ ترافیک هم قابلپیشبینی نباشه.
- firewall (پیشفرض، و توصیهشده برای ایران) — متعادله؛ هم خوب رد میشه، هم زیاد سرعت رو فدا نمیکنه.
- gfw — سنگینتره. وقتی firewall جواب نداد این رو امتحان کن.
- off — بدون استتار. فقط برای شبکههای آزاد یا تست.
- balanced (پیشفرض، و توصیهشده برای ایران) — نقطهٔ طلایی بین مخفیکاری و سرعت.
- aggressive — سنگینترین حالت. بیشترین بستهٔ فریبدهنده و لایههای استتار رو میفرسته. برای اینترنت خیلی سختگیر.
- light — حداقلیه. یهکم استتار با کمترین سربار.
- off — بدون استتار.
از پیشفرض شروع کن. اگه وصل نشد یا مدام قطع میشد، یه پله سنگینترش کن (برای MASQUE برو روی gfw، برای WireGuard و gool برو روی aggressive). اگه اینترنتت آزاده و فقط سرعت میخوای، بیا روی light یا off.
این بخش فقط مخصوص MASQUE هست و خیلی به دردت میخوره.
MASQUE توی Aether دو مسیر داره که میتونه ترافیک رو ازش رد کنه:
h3 یعنی HTTP/3 که روی یه پروتکل به اسم QUIC سوار میشه، و QUIC هم خودش روی UDP کار میکنه. مزیتش اینه که سریعه، دستدادنش کوتاهتره و برای وصل شدن رفتوبرگشت کمتری لازم داره، و اگه یه بسته گم بشه، کل اتصال گیر نمیکنه. روی بیشتر اینترنتهای سالم، h3 بهترین تجربه رو میده.
h2 یعنی HTTP/2 که روی TLS و TCP کار میکنه — دقیقاً همون چیزی که هر سایت HTTPS معمولی استفاده میکنه. یهکم کندتر از h3 هست، چون توی TCP وقتی یه بسته گم بشه، بقیه هم معطل میمونن. ولی یه برتری بزرگ داره: دقیقاً شبیه ترافیک وب معمولیه و روی TCP کار میکنه (نه UDP).
قاعدهٔ ساده اینه:
- اول h3 رو امتحان کن (همون پیشفرض). اگه وصل شد و پایدار موند، کارت تمومه.
- اگه اینترنتت UDP یا QUIC رو میبنده یا خفه میکنه — یعنی h3 اصلاً وصل نمیشه یا مدام قطع میشه — برو روی h2. بعضی شبکهها عمداً UDP رو خفه میکنن تا QUIC کار نکنه؛ توی این حالت h2 که روی TCP کار میکنه، از لای محدودیت رد میشه.
برای روشن کردن h2 کافیه قبل از اجرا این متغیر رو تنظیم کنی (یا پرچم --h2 رو بدی):
AETHER_MASQUE_HTTP2=1 ./target/release/aether
./target/release/aether --h2
مقدارهای 1، true، h2، yes و on همهشون h2 رو روشن میکنن. اگه این رو نذاری، همیشه h3 استفاده میشه.
توی بعضی شبکهها، DPI همون لحظه که یه رکورد TLS ClientHello کامل و یکپارچه با یه SNI قابلشناسایی میبینه، اتصال رو میبنده. وقتی MASQUE رو روی h2 اجرا میکنی، Aether میتونه اولین بستهی TLS (همون ClientHello) رو به چند تکهی کوچیک بشکنه و با یه تأخیر تصادفی کوتاه بینشون بفرسته، طوری که هیچ بستهی تکی روی خط، کل دستدادن یا SNI رو یکجا نداشته باشه. این همون تکنیک معروف "TLS ClientHello fragmentation" هست — این قابلیت فقط برای h2 موجوده چون نیاز به یه استریم TCP برای فرگمنت کردن دارد؛ h3 روی QUIC/UDP کار میکنه که این مفهوم اونجا به همین شکل معنی نداره.
پیشفرض خاموشه چون به هر بار reconnect یه تأخیر کوچیک اضافه میکنه. با این روشنش کن:
AETHER_MASQUE_H2_FRAGMENT=1 ./target/release/aether --h2
./target/release/aether --h2 --fragment
میتونی اندازهی تکهها و تأخیرش رو هم تنظیم کنی:
AETHER_MASQUE_H2_FRAGMENT_SIZE=8-24 AETHER_MASQUE_H2_FRAGMENT_DELAY=5-15 ./target/release/aether --h2 --fragment
./target/release/aether --h2 --fragment --fragment-size 8-24 --fragment-delay 5-15
هر دو یا یه عدد تکی یا یه بازهی a-b قبول میکنن — برای اندازه به بایت، برای تأخیر به میلیثانیه. اگه شبکهت دقیقاً دستدادن TLS مسیر h2 رو مسدود میکنه، قبل از اینکه کامل از h2 دل بکنی این رو امتحان کن.
قبلاً هم اسکنر و هم تونل زنده، به محض اینکه جواب :status 200 از connect-ip میگرفتن، اون گیتوی رو سالم حساب میکردن. توی بعضی شبکهها این کافی نیست: دستدادن و جواب کنترلی رد میشن، ولی سیستم DPI هر دادهای که بعدش فرستاده بشه رو بیصدا drop میکنه. نتیجهاش یه اتصال بود که ظاهراً کار میکرد ولی هیچوقت واقعاً ترافیکی ازش رد نمیشد.
الان Aether یه بستهی پروب کوچیک end-to-end از داخل تونل میفرسته و منتظر یه جواب واقعی میمونه، قبل از اینکه به یه گیتوی اعتماد کنه یا پورت SOCKS5 محلی رو باز کنه. این هم روی اسکن اعمال میشه (پس نتیجهی "هیچ نقطهٔ تمیزی پیدا نشد" الان واقعاً یعنی هیچ کاندیدی نتونسته داده رد کنه، نه فقط اینکه هیچ کاندیدی جواب نداده) و هم روی تونل زنده (پورت SOCKS5 بسته میمونه تا همون اولین اتصال ثابت کنه میتونه ترافیک واقعی رد کنه، نه اینکه بلافاصله بعد از دستدادن باز بشه). اگه رفتار قدیمیتر و سریعتر ولی کمتر مطمئن رو میخوای، AETHER_MASQUE_NO_DATA_CHECK=1 رو تنظیم کن یا پرچم --no-data-check رو بده.
یه تونل ممکنه ظاهراً باز باشه ولی در عمل مُرده باشه؛ یعنی پراکسی هنوز باز مونده ولی هیچ دادهای رد و بدل نمیشه. این بیشتر روی حالت gool پیش میاد، وقتی لایهٔ بیرونی توسط شبکه قطع میشه ولی پراکسی خبر نداره.
اگه تونل MASQUE یا WireGuard قطع بشه یا در تأیید data-plane شکست بخوره، Aether الان خودش دوباره وصل میشه: یه تأخیر کوتاه صبر میکنه (پیشفرض ۲ ثانیه، AETHER_MASQUE_RECONNECT_SECS / AETHER_WG_RECONNECT_SECS) و دوباره تلاش میکنه، بهجای اینکه برنامه رو ببنده. موقع اتصال دوباره، اول همون گیتوی قبلی که واقعاً کار میکرد رو دوباره چک میکنه؛ فقط اگه اون هم دیگه جواب نداد، میره سراغ یه اسکن کامل و تازه — یعنی قطع شدن اتصال همیشه به معنی نشستن پای یه اسکن کامل دیگه نیست (بهخصوص توی حالت ironclad که ذاتاً کند است).
اسکن کردن زمان میبره، و اگه از همون شبکه زیاد وصل میشی، هر بار از نو اسکن کردن اتلاف وقته. Aether آخرین گیتویای که واقعاً کار کرده رو یادش میمونه (کنار فایل کانفیگ هویتت، توی یه فایل کوچیک *-lastconn.toml — که هیچوقت به گیت کامیت نمیشه، به .gitignore نگاه کن).
دفعهی بعد که Aether رو اجرا کنی، اگه یه گیتوی ذخیرهشده باشه، ازت میپرسه:
Last working gateway: 162.159.198.1:443 (profile 'firewall')
Reconnect to it now without rescanning? [Y/n]:
- جواب بده (یا فقط Enter بزن) و Aether همون گیتوی خاص رو دوباره تأیید میکنه — یه چک سریع تکی، نه یه اسکن کامل — و اگه پاس شد بلافاصله وصل میشه.
- جواب بده نه، و Aether کش رو نادیده میگیره و دقیقاً مثل قبل اسکن معمولی میزنه.
- اگه گیتوی کششده دیگه کار نکنه، Aether خودش میگه و خودکار به یه اسکن کامل برمیگرده، پس هیچوقت روی یه نقطهٔ مرده گیر نمیکنی.
برای رد شدن کامل از سؤال (برای سرویسها و اسکریپتها بهدردبخوره)، AETHER_QUICK_RECONNECT=1 رو تنظیم کن (یا پرچم --quick-reconnect) تا همیشه اول کش رو امتحان کنه، یا AETHER_QUICK_RECONNECT=0 (یا --no-quick-reconnect) تا همیشه از نو اسکن کنه.
هر سؤالی که برنامه موقع اجرا میپرسه، یه معادل «متغیر محیطی» هم داره. اگه یه متغیر رو از قبل تنظیم کنی، Aether دیگه اون سؤال رو ازت نمیپرسه. این کار برای اجرای خودکار و نوشتن اسکریپت خیلی بهدردبخوره.
AETHER_PROTOCOL— پروتکل:masque،wg، یاgool.AETHER_SOCKS— آدرس گوشدادن پراکسی. پیشفرض127.0.0.1:1819.AETHER_NOIZE— پروفایل استتار (بالاتر توضیح داده شد).AETHER_SCAN— حالت اسکن:turbo،balanced،thorough،stealth،ironclad.AETHER_IP— نسخهٔ IP برای اسکن: IPv4، IPv6، یا هر دو.
AETHER_MASQUE_HTTP2(--h2,--http2) — اگه1/true/h2/yes/onباشه، از h2 استفاده میکنه. وگرنه h3.AETHER_MASQUE_H2_PEER(--h2-peer) — بازنویسی دستیِ آدرس مقصد برای حالت h2 (برای کاربرهای پیشرفته).AETHER_MASQUE_H2_FRAGMENT(--fragment) — فرگمنت کردن TLS ClientHello روی h2. پیشفرض خاموشه.AETHER_MASQUE_H2_FRAGMENT_SIZE(--fragment-size) — اندازهٔ هر تکه به بایت،nیاa-b. پیشفرض16-32.AETHER_MASQUE_H2_FRAGMENT_DELAY(--fragment-delay) — تأخیر بین تکهها به میلیثانیه،nیاa-b. پیشفرض2-10.AETHER_MASQUE_NO_DATA_CHECK(--no-data-check) — اگه این رو بذاری، فقط:status 200کافیه؛ پروب end-to-end دیتاپلین انجام نمیشه.AETHER_MASQUE_VALIDATE_SECS(--validate-secs) — چند ثانیه صبر کنه تا پروب دیتاپلین موفق بشه قبل از اینکه از یه گیتوی صرفنظر کنه. پیشفرض10.AETHER_MASQUE_RECONNECT_SECS(--reconnect-secs) — تأخیر قبل از اتصال خودکار دوباره بعد از قطع تونل MASQUE یا شکست تأیید. پیشفرض2.AETHER_WG_RECONNECT_SECS— تأخیر قبل از اتصال خودکار دوباره بعد از قطع تونل WireGuard. پیشفرض2.
AETHER_WG_KEEPALIVE(--keepalive) — فاصلهٔ بستهٔ زندهنگهدار به ثانیه. پیشفرض5.AETHER_WG_NO_DATA_CHECK(--no-data-check) — اگه این رو بذاری، حین اسکن، عبور واقعیِ داده تأیید نمیشه (سریعتره ولی مطمئنتر نیست).AETHER_WG_NO_PROFILE_RETRY(--no-profile-retry) — اگه این رو بذاری، در صورت شکست اسکن، با پروفایلهای نویز دیگه دوباره تلاش نمیکنه.
AETHER_QUICK_RECONNECT(--quick-reconnect/--no-quick-reconnect) — بذارش1تا همیشه بدون سؤال از آخرین گیتوی سالم استفاده کنه، یا0تا همیشه بدون سؤال از نو اسکن کنه. اگه تنظیم نکنی، Aether موقع اجرا اگه یه گیتوی کششده داشته باشه ازت میپرسه.
AETHER_PEERیاAETHER_WG_PEER(--peer,--wg-peer) — اگه بخوای خودت یه آدرس ثابت بدی و اسکن رو دور بزنی.AETHER_CONFIG(--config) — مسیر فایل کانفیگ پایه. پیشفرضaether.toml.AETHER_WG_CONFIGوAETHER_MASQUE_CONFIG(--wg-config,--masque-config) — مسیر فایل کانفیگ مخصوص هر پروتکل.AETHER_TLS_GROUPS(--tls-groups) — بازنویسی گروههای TLS key-share که توی دستدادن اعلام میشن. پیشفرض شبیه کروم هست (P-256:X25519:P-384).
فقط اجراش کن و به سؤالها با عدد جواب بده:
./target/release/aether
AETHER_PROTOCOL=masque AETHER_MASQUE_HTTP2=1 AETHER_NOIZE=firewall ./target/release/aether
AETHER_PROTOCOL=wg AETHER_NOIZE=aggressive AETHER_SCAN=thorough ./target/release/aether
AETHER_PROTOCOL=gool AETHER_SOCKS=127.0.0.1:1080 ./target/release/aether
./target/release/aether --masque --h2 --fragment --noize firewall
AETHER_QUICK_RECONNECT=1 ./target/release/aether --masque
شما میتوانید ایمیج رسمی Aether را مستقیماً از GitHub Container Registry (GHCR) اجرا کنید که یه محیط ایزوله بهت میده و نیازی به نصب Rust یا ابزارهای C++ روی سیستم خودت نداری.
docker run -it -p 1819:1819 \
-e AETHER_PROTOCOL=masque \
-e AETHER_SCAN=balanced \
ghcr.io/cluvexstudio/aether:latest(پرچم -it برای وقتی که متغیرهای محیطی رو از قبل ندادی و نیاز به پاسخ دادن به سؤالات تعاملی داری، ضروریه.)
در صورتی که ترجیح میدهید ایمیج را خودتان بیلد کنید:
docker build -t aether .
docker run -it -p 1819:1819 aetherهمین که برنامه گفت پراکسی در حال گوشدادنه، این دستور رو بزن:
curl -x socks5h://127.0.0.1:1819 https://www.cloudflare.com/cdn-cgi/trace
اگه جواب گرفتی و توش چیزی شبیه warp=on یا مشخصات اتصال دیدی، یعنی تونل سرپاست و ترافیکت از داخلش رد میشه.
- اصلاً وصل نمیشه: اول پروتکل رو عوض کن. اگه MASQUE روی h3 وصل نشد، h2 رو روشن کن. اگه دقیقاً دستدادن h2 مسدود میشه،
--fragmentرو امتحان کن. اگه هیچکدوم روی MASQUE کار نکرد، WireGuard یا gool رو امتحان کن. - اسکنر یه گیتوی پیدا میکنه ولی تونل هیچوقت واقعاً داده رد نمیکنه ("وصل میشه" ولی چیزی لود نمیشه): این دقیقاً همون چیزیه که تأیید دیتاپلین الان میگیرد — یه گیتوی که به دستدادن جواب میده ولی داده رو بیصدا drop میکنه. Aether این گیتوی رو رد میکنه و خودکار به اسکن ادامه میده. اگه همیشه این اتفاق میافته و ترجیح میدی بههرحال وصل شی، میتونی با
--no-data-checkاین چک رو خاموش کنی، ولی همون رفتار قطع بیصدای قبلی رو دوباره میگیری. - وصل میشه ولی مدام قطع میشه: پروفایل استتار (نویز) رو یه پله سنگینترش کن.
- اسکن خیلی طول میکشه: حالت اسکن رو روی turbo بذار.
- کنده: اگه روی gool هستی، برو روی WireGuard تکلایه؛ و اگه روی h2 هستی و فکر میکنی اینترنتت UDP رو باز گذاشته، h3 رو امتحان کن.
- هر بار که روی همون شبکه دوباره وصل میشی، معطل یه اسکن کامل میشی: به سؤال "اتصال به آخرین گیتوی سالم" جواب آره بده، یا
AETHER_QUICK_RECONNECT=1رو همیشگی کن.
از MASQUE با پروفایل پیشفرض شروع کن. اگه UDP بسته بود، h2 رو روشن کن (و اگه خود h2 هم مسدود شد، ClientHello رو فرگمنت کن). اگه بازم سختگیر بود، پروفایل استتار رو سنگینتر کن یا برو سراغ WireGuard و gool. بقیهش (پیدا کردن آدرس، رد کردن گیتویهایی که واقعاً داده رد نمیکنن، اتصال مجدد خودکار، و اتصال سریع با آخرین گیتوی سالم) رو خود Aether حواسش هست.