Freedom — Xray-core
Freedom خروجی دورزن Xray است — ترافیک را بدون هیچ پروتکل پراکسی واسطهای به مقصد واقعی ارسال میکند. همچنین دو ویژگی ضد-DPI را حمل میکند: قطعهبندی TCP/TLS و تزریق دلخواه بستهٔ نویز.
خروجی
settings برای یک خروجی با "protocol": "freedom":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
targetStrategy | string | asis | asis | useip | useipv4 | useipv6 | useipv4v6 | useipv6v4 | forceip | forceipv4 | forceipv6 | forceipv4v6 | forceipv6v4 | نحوهٔ تفکیک آدرس مقصد پیش از برقراری اتصال. `asis` هرچه موتور مسیریابی تحویل داده باشد بدون تغییر عبور میدهد؛ `useip*` فقط در صورت نیاز به IP تفکیک میکند؛ `forceip*` همیشه تفکیک و جایگزین میکند. پسوندهای `*v4v6` / `*v6v4` کنترل میکنند کدام خانواده اول امتحان شود. |
domainStrategy | string | (inherits targetStrategy) | <same values> | نام مستعار قدیمی برای `targetStrategy`. تنها وقتی `targetStrategy` خالی است خوانده میشود. |
redirect | string | (unset) | <host:port> | بازنویسی مقصد هر اتصال. برای ارسال به یک سرویس محلی صرف نظر از مسیریابی سودمند است. |
userLevel | uint32 | 0 | <uint32> | سطح policy پیشفرض برای اتصالهای عبوری از این خروجی. |
fragment | *Fragment | (disabled) | Fragment | قطعهبندی TCP در سطح سگمنت برای دور زدن DPI مبتنی بر طول. |
noise | *Noise | (removed) | (use noises) | فیلد حذفشده. از آرایهٔ `noises` استفاده کنید. تنظیم `noise` در ساخت پیکربندی خطای صریح تحریک میکند. |
noises | []*Noise | (unset) | [Noise] | فهرست بستههای نویز که پیش از (یا بین) بستههای واقعی ارسال میشوند تا تطبیق الگو را گمراه کنند. |
proxyProtocol | uint32 | 0 | 0 | 1 | 2 | افزودن یک سرآیند PROXY-protocol به اتصالهای خروجی. 0 غیرفعال میکند؛ 1 / 2 بهترتیب v1 (متنی) یا v2 (دودویی) را تنظیم میکنند. |
ipsBlocked | *StringList | (removed) | (use finalRules) | فیلد حذفشده. به `finalRules` منتقل شده است؛ تنظیم آن فقط یک هشدار ثبت میکند و هیچ اثری ندارد. |
finalRules | []*FreedomFinalRuleConfig | (unset) | [FreedomFinalRuleConfig] | قواعد اجازه/مسدودسازی به ازای هر اتصال که در زمان برقراری اتصال ارزیابی میشوند — یک دیوارهٔ آتش سبک روی خود خروجی، که بر اساس شبکه / پورت / IP تطبیق مییابد. |
منبع: infra/conf/freedom.go:19-30 · ثابتشده در v26.7.28 (5ca6f4b)
fragment
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
packets | string | (all) | tlshello | <from-to> | | کدام بستهها قطعهبندی شوند. `tlshello` فقط TLS ClientHello را قطعهبندی میکند (ظریفتر، برای ابهامسازی SNI سودمند). یک بازه مانند `"1-3"` بستههای آن بازهٔ آفست را قطعهبندی میکند. خالی هر بسته را قطعهبندی میکند — تهاجمیترین حالت. |
length | *Int32Range | (required) | {from, to} | بازهٔ بایتها به ازای هر قطعه. حداقل باید > 0 باشد. |
interval | *Int32Range | (required) | {from, to} | بازهٔ میلیثانیههای تأخیر بین قطعهها. |
maxSplit | *Int32Range | (unbounded) | {from, to} | بازهٔ کل تقسیمها به ازای هر بسته. سقف اختیاری. |
منبع: infra/conf/freedom.go:32-37 · ثابتشده در v26.7.28 (5ca6f4b)
noises[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (required) | rand | str | hex | base64 | شکل بار بستهٔ نویز. `rand` بایتهای تصادفی تولید میکند که طول آن از `packet` (یک رشتهٔ بازه) میآید. `str`/`hex`/`base64` مقدار `packet` را تحتاللفظی تفسیر میکنند. |
packet | string | (required) | <bytes or range> | محتوای بار. قالب به `type` بستگی دارد. |
delay | *Int32Range | (unset) | {from, to} | بازهٔ میلیثانیههای صبر پیش از ارسال این بستهٔ نویز. |
applyTo | string | ip | ip | all | ipv4 | ipv6 | محدود کردن تزریق نویز به یک خانوادهٔ IP. `ip` و `all` به هر دو اعمال میشوند. |
منبع: infra/conf/freedom.go:39-44 · ثابتشده در v26.7.28 (5ca6f4b)
finalRules[]
یک دیوارهٔ آتش کوچک اجازه/مسدودسازی که خروجی freedom هنگام برقراری اتصال خروجی اعمال میکند. قواعد به ترتیب ارزیابی میشوند؛ اولین تطبیق تصمیم میگیرد. این جایگزین فیلد حذفشدهٔ ipsBlocked است.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
action | string | (required) | allow | block | با یک اتصال تطبیقیافته چه کنیم. `block` آن را رد میکند؛ `allow` آن را عبور میدهد — قواعد `allow` را اول فهرست کنید تا استثناهایی را از یک `block` گستردهتر جدا کنید. |
network | *NetworkList | (any) | tcp | udp | tcp,udp | فقط با این شبکهها تطبیق بده. |
port | *PortList | (any) | <port / range list> | فقط با این پورتهای مقصد تطبیق بده. |
ip | *StringList | (any) | <IP / CIDR / geoip:> | فقط با این IPهای مقصد تطبیق بده. دستههای `geoip:` را میپذیرد. |
blockDelay | *Int32Range | (immediate) | {from, to} | برای یک اقدام `block`، پیش از اسقاط اتصال یک تأخیر تصادفی در این بازهٔ میلیثانیهای صبر کن — بهجای شکست سریع یک کاوشگر را معطل میکند. |
منبع: infra/conf/freedom.go:46-52 · ثابتشده در v26.7.28 (5ca6f4b)
مثالها
خروجی Freedom ساده (عبوری):
{
"outbounds": [
{ "tag": "direct", "protocol": "freedom", "settings": {} }
]
}اجبار تفکیک IPv4-سپس-IPv6:
{
"outbounds": [
{
"tag": "direct-v4",
"protocol": "freedom",
"settings": { "targetStrategy": "forceipv4v6" }
}
]
}قطعهبندی TLS-hello (تلاش اول خوب برای ابهامسازی SNI):
{
"outbounds": [
{
"tag": "frag",
"protocol": "freedom",
"settings": {
"fragment": {
"packets": "tlshello",
"length": { "from": 10, "to": 20 },
"interval": { "from": 10, "to": 20 }
}
}
}
]
}تزریق نویز (4 بایت تصادفی پیش از هر اتصال IPv4، با تأخیر 0-1 میلیثانیه):
{
"outbounds": [
{
"tag": "noisy",
"protocol": "freedom",
"settings": {
"noises": [
{
"type": "rand",
"packet": "4-4",
"delay": { "from": 0, "to": 1 },
"applyTo": "ipv4"
}
]
}
}
]
}QUIC (UDP/443) را بهکلی مسدود کن و اتصالها به بازههای خصوصی را معطل کن تا کاوش را کند کنی:
{
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {
"finalRules": [
{ "action": "block", "network": "udp", "port": "443" },
{ "action": "block", "ip": ["geoip:private"], "blockDelay": { "from": 1000, "to": 3000 } }
]
}
}
]
}ارسال همه چیز به یک سرویس محلی (کمککار آزمون):
{
"outbounds": [
{
"tag": "redir",
"protocol": "freedom",
"settings": { "redirect": "127.0.0.1:8080" }
}
]
}نکات
targetStrategyفیلد مدرن است؛domainStrategyتنها بهعنوان جایگزین وقتیtargetStrategyخالی است خوانده میشود (infra/conf/freedom.go:46-48). پیکربندیهای جدید باید فقطtargetStrategyرا تنظیم کنند.- رشتههای استراتژی ناشناخته بهجای جایگزین بیصدا خطای راهاندازی تولید میکنند (
infra/conf/freedom.go:72-73). noise(مفرد) حذف شده است. پیام خطا در راهاندازی به شما میگوید بهnoises = [ { ... } ]مهاجرت کنید (infra/conf/freedom.go:145-147).ipsBlockedحذف شده و درfinalRulesادغام شده است. آن را با یک قاعدهٔ{ "action": "block", "ip": [...] }جایگزین کنید؛ فیلد قدیمی اکنون فقط یک هشدار ثبت میکند و در غیر این صورت نادیده گرفته میشود.- اقدامات
finalRulesفقطallow/blockهستند (اقدامات ناشناخته در راهاندازی خطا میدهند).ipدستههایgeoip:را میپذیرد؛blockDelayصرفاً به قواعدblockاعمال میشود. fragment.packets: "tlshello"نقطهٔ شروع توصیهشده است — قطعهبندی فقط TLS ClientHello مانع DPI مبتنی بر SNI میشود اما بقیهٔ اتصال را دستنخورده میگذارد (سربار بایتی فقط یکباره است).fragment.length.fromوfragment.intervalوقتیfragmentحضور دارد الزامی هستند (infra/conf/freedom.go:102-118). بازهٔmaxSplitاختیاری است.proxyProtocolخارج از1..2بیصدا نادیده گرفته میشود — فقط آن دو مقدار خروجی سرآیند تولید میکنند (infra/conf/freedom.go:162-164).
نکات بینهستهای
- sing-box این را Direct مینامد و خروجی تقریباً هیچ گزینهٔ مخصوص خود ندارد — بازنویسی مقصد در 1.13 حذف شد؛ برای آن رفتار از اقدامات route استفاده کنید. به Direct — sing-box مراجعه کنید.
- mihomo نوع Direct بهطور مشابهی حداقلی دارد؛ پراکسی توکار
DIRECTدر هر پیکربندی بهصورت ضمنی وجود دارد. به Direct — mihomo مراجعه کنید.
منبع: infra/conf/freedom.go:19-52 · v26.7.28 (5ca6f4b)
