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 (دودویی) را تنظیم می‌کنند.

منبع: infra/conf/freedom.go:17-26 · ثابت‌شده در v1.260327.0 (d2758a0)

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:28-33 · ثابت‌شده در v1.260327.0 (d2758a0)

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:35-40 · ثابت‌شده در v1.260327.0 (d2758a0)

مثال‌ها

خروجی 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"
          }
        ]
      }
    }
  ]
}

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

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:128-130).
  • 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:17-40 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment