Skip to content

Freedom — Xray-core

Freedom خروجی دورزن Xray است — ترافیک را بدون هیچ پروتکل پراکسی واسطه‌ای به مقصد واقعی ارسال می‌کند. همچنین دو ویژگی ضد-DPI را حمل می‌کند: قطعه‌بندی TCP/TLS و تزریق دلخواه بستهٔ نویز.

خروجی

settings برای یک خروجی با "protocol": "freedom":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
targetStrategystringasisasis | useip | useipv4 | useipv6 | useipv4v6 | useipv6v4 | forceip | forceipv4 | forceipv6 | forceipv4v6 | forceipv6v4نحوهٔ تفکیک آدرس مقصد پیش از برقراری اتصال. `asis` هرچه موتور مسیریابی تحویل داده باشد بدون تغییر عبور می‌دهد؛ `useip*` فقط در صورت نیاز به IP تفکیک می‌کند؛ `forceip*` همیشه تفکیک و جایگزین می‌کند. پسوندهای `*v4v6` / `*v6v4` کنترل می‌کنند کدام خانواده اول امتحان شود.
domainStrategystring(inherits targetStrategy)<same values>نام مستعار قدیمی برای `targetStrategy`. تنها وقتی `targetStrategy` خالی است خوانده می‌شود.
redirectstring(unset)<host:port>بازنویسی مقصد هر اتصال. برای ارسال به یک سرویس محلی صرف نظر از مسیریابی سودمند است.
userLeveluint320<uint32>سطح policy پیش‌فرض برای اتصال‌های عبوری از این خروجی.
fragment*Fragment(disabled)Fragmentقطعه‌بندی TCP در سطح سگمنت برای دور زدن DPI مبتنی بر طول.
noise*Noise(removed)(use noises)فیلد حذف‌شده. از آرایهٔ `noises` استفاده کنید. تنظیم `noise` در ساخت پیکربندی خطای صریح تحریک می‌کند.
noises[]*Noise(unset)[Noise]فهرست بسته‌های نویز که پیش از (یا بین) بسته‌های واقعی ارسال می‌شوند تا تطبیق الگو را گمراه کنند.
proxyProtocoluint3200 | 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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
packetsstring(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[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestring(required)rand | str | hex | base64شکل بار بستهٔ نویز. `rand` بایت‌های تصادفی تولید می‌کند که طول آن از `packet` (یک رشتهٔ بازه) می‌آید. `str`/`hex`/`base64` مقدار `packet` را تحت‌اللفظی تفسیر می‌کنند.
packetstring(required)<bytes or range>محتوای بار. قالب به `type` بستگی دارد.
delay*Int32Range(unset){from, to}بازهٔ میلی‌ثانیه‌های صبر پیش از ارسال این بستهٔ نویز.
applyTostringipip | all | ipv4 | ipv6محدود کردن تزریق نویز به یک خانوادهٔ IP. `ip` و `all` به هر دو اعمال می‌شوند.

منبع: infra/conf/freedom.go:39-44 · ثابت‌شده در v26.7.28 (5ca6f4b)

finalRules[]

یک دیوارهٔ آتش کوچک اجازه/مسدودسازی که خروجی freedom هنگام برقراری اتصال خروجی اعمال می‌کند. قواعد به ترتیب ارزیابی می‌شوند؛ اولین تطبیق تصمیم می‌گیرد. این جایگزین فیلد حذف‌شدهٔ ipsBlocked است.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
actionstring(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 ساده (عبوری):

json
{
  "outbounds": [
    { "tag": "direct", "protocol": "freedom", "settings": {} }
  ]
}

اجبار تفکیک IPv4-سپس-IPv6:

json
{
  "outbounds": [
    {
      "tag": "direct-v4",
      "protocol": "freedom",
      "settings": { "targetStrategy": "forceipv4v6" }
    }
  ]
}

قطعه‌بندی TLS-hello (تلاش اول خوب برای ابهام‌سازی SNI):

json
{
  "outbounds": [
    {
      "tag": "frag",
      "protocol": "freedom",
      "settings": {
        "fragment": {
          "packets": "tlshello",
          "length":   { "from": 10, "to": 20 },
          "interval": { "from": 10, "to": 20 }
        }
      }
    }
  ]
}

تزریق نویز (4 بایت تصادفی پیش از هر اتصال IPv4، با تأخیر 0-1 میلی‌ثانیه):

json
{
  "outbounds": [
    {
      "tag": "noisy",
      "protocol": "freedom",
      "settings": {
        "noises": [
          {
            "type": "rand",
            "packet": "4-4",
            "delay": { "from": 0, "to": 1 },
            "applyTo": "ipv4"
          }
        ]
      }
    }
  ]
}

QUIC (UDP/443) را به‌کلی مسدود کن و اتصال‌ها به بازه‌های خصوصی را معطل کن تا کاوش را کند کنی:

json
{
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {
        "finalRules": [
          { "action": "block", "network": "udp", "port": "443" },
          { "action": "block", "ip": ["geoip:private"], "blockDelay": { "from": 1000, "to": 3000 } }
        ]
      }
    }
  ]
}

ارسال همه چیز به یک سرویس محلی (کمک‌کار آزمون):

json
{
  "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)

Core Tutorial اثر Argsment