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 همراه با هشدار به streamSettings.sockopt.domainStrategy (با همان مقادیر) منتقل میشود؛ بهجای آن همان را تنظیم کنید. نحوهٔ تفکیک آدرس مقصد پیش از برقراری اتصال. asis هرچه موتور مسیریابی تحویل داده باشد بدون تغییر عبور میدهد؛ useip* فقط در صورت نیاز به IP تفکیک میکند؛ forceip* همیشه تفکیک و جایگزین میکند. پسوندهای *v4v6 / *v6v4 کنترل میکنند کدام خانواده اول امتحان شود. |
domainStrategy | string | (inherits targetStrategy) | <same values> | نام مستعار قدیمی برای targetStrategy. تنها وقتی targetStrategy خالی است خوانده میشود. همراه با targetStrategy منسوخ شده است. |
redirect | string | (unset) | <host:port> | بازنویسی مقصد هر اتصال. برای ارسال به یک سرویس محلی صرف نظر از مسیریابی سودمند است. |
userLevel | uint32 | 0 | <uint32> | سطح policy پیشفرض برای اتصالهای عبوری از این خروجی. |
fragment | *Fragment | (disabled) | Fragment | قطعهبندی TCP در سطح سگمنت برای دور زدن DPI مبتنی بر طول. |
noise | *Noise | (unsupported) | (use noises) | پشتیبانی نمیشود — از آرایهٔ noises استفاده کنید. تنظیم noise در ساخت پیکربندی خطای صریح ایجاد میکند. |
noises | []*Noise | (unset) | [Noise] | فهرست بستههای نویز که پیش از (یا بین) بستههای واقعی ارسال میشوند تا تطبیق الگو را گمراه کنند. |
proxyProtocol | uint32 | 0 | 0 | 1 | 2 | افزودن یک سرآیند PROXY-protocol به اتصالهای خروجی. 0 غیرفعال میکند؛ 1 / 2 بهترتیب v1 (متنی) یا v2 (دودویی) را تنظیم میکنند. |
ipsBlocked | *StringList | (ignored) | (use finalRules) | پشتیبانی نمیشود — مسدودسازی IP را با finalRules بیان کنید؛ تنظیم آن فقط یک هشدار ثبت میکند و هیچ اثری ندارد. |
finalRules | []*FreedomFinalRuleConfig | (unset) | [FreedomFinalRuleConfig] | قواعد اجازه/مسدودسازی به ازای هر اتصال که در زمان برقراری اتصال ارزیابی میشوند — یک دیوارهٔ آتش سبک روی خود خروجی، که بر اساس شبکه / پورت / IP تطبیق مییابد. وقتی streamSettings.sockopt.dialerProxy تنظیم شده باشد نادیده گرفته میشود (همراه با هشدار). |
منبع: infra/conf/freedom.go:19-30 · ثابتشده در v26.9.9 (52a412d)
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.9.9 (52a412d)
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.9.9 (52a412d)
finalRules[]
یک دیوارهٔ آتش کوچک اجازه/مسدودسازی که خروجی freedom هنگام برقراری اتصال خروجی اعمال میکند. قواعد به ترتیب ارزیابی میشوند؛ اولین تطبیق تصمیم میگیرد. مسدودسازی IP اینجا تعریف میشود — فیلد 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.9.9 (52a412d)
مثالها
خروجی Freedom ساده (عبوری):
{
"outbounds": [
{ "tag": "direct", "protocol": "freedom", "settings": {} }
]
}اجبار تفکیک IPv4-سپس-IPv6:
{
"outbounds": [
{
"tag": "direct-v4",
"protocol": "freedom",
"settings": {},
"streamSettings": { "sockopt": { "domainStrategy": "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درsettingsخروجی freedom منسوخ هستند. هنگام راهاندازی، Xray مقدار غیر ازasisرا بهstreamSettings.sockopt.domainStrategyمنتقل میکند و هشداری ثبت میکند؛targetStrategyسطح خروجی روی یک خروجی freedom نیز به همین شکل منتقل میشود (infra/conf/xray.go:341-364). مقدار منتقلشدهsockopt.domainStrategyای را که خودتان تنظیم کرده باشید بازنویسی میکند، پس فقط یکی از آنها را پیکربندی کنید.domainStrategyهمچنان فقط بهعنوان جایگزین وقتیtargetStrategyخالی است خوانده میشود (infra/conf/freedom.go:46-48).- با
finalRulesو مقصد دامنهای، freedom ابتدا دامنه را تفکیک میکند (باsockopt.domainStrategy، یا حلکنندهٔ سیستم وقتی آنAsIsاست) تا قواعدblockرا بررسی کند، سپس آدرسی را که واقعاً به آن متصل شده دوباره بررسی میکند. - وقتی
streamSettings.sockopt.dialerProxyتنظیم شده باشد، freedom آخرین گام نیست:finalRulesنادیده گرفته میشوند (هشداری ثبت میشود) و دامنه از پیش تفکیک نمیشود. - freedom هنگام راهاندازی
streamSettings.sockopt.addressPortStrategyرا رد میکند. - رشتههای استراتژی ناشناخته بهجای جایگزین بیصدا خطای راهاندازی تولید میکنند (
infra/conf/freedom.go:72-73). noise(مفرد) پشتیبانی نمیشود: تنظیم آن در راهاندازی با پیامی که بهnoises = [ { ... } ]اشاره میکند شکست میخورد (infra/conf/freedom.go:145-147).ipsBlockedپشتیبانی نمیشود — آن را بهصورت قاعدهٔ{ "action": "block", "ip": [...] }درfinalRulesبیان کنید؛ خود این فیلد فقط یک هشدار ثبت میکند و در غیر این صورت نادیده گرفته میشود.- اقدامات
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 مینامد و خروجی تقریباً هیچ گزینهٔ مخصوص خود ندارد — فیلدی برای بازنویسی مقصد ندارد؛ برای آن رفتار از اقدامات route استفاده کنید. به Direct — sing-box مراجعه کنید.
- mihomo نوع Direct بهطور مشابهی حداقلی دارد؛ پراکسی توکار
DIRECTدر هر پیکربندی بهصورت ضمنی وجود دارد. به Direct — mihomo مراجعه کنید.
منبع: infra/conf/freedom.go:19-52 · v26.9.9 (52a412d)
