پرش به محتویات

پیکربندی کامل کلاینت

این صفحه مستندات مربوط به تمام فیلدهای فایل پیکربندی کلاینت را ارائه می‌دهد.

توجه: یکی از الگوهای رایجی که در پیکربندی کلاینت و سرور با آن مواجه خواهید شد، «انتخابگر نوع» است:

example:
  type: a
  a:
    something: something
  b:
    something: something
  c:
    something: something

type تعیین می‌کند که کدام حالت استفاده شود و کدام زیرفیلدها تجزیه شوند. در این مثال، فیلد example می‌تواند a، b یا c باشد. اگر a انتخاب شود، زیرفیلد a تجزیه شده و زیرفیلدهای b و c نادیده گرفته می‌شوند.

آدرس سرور

فیلد server آدرس سرور Hysteria را که کلاینت باید به آن متصل شود مشخص می‌کند. آدرس می‌تواند به صورت host:port یا فقط host باشد. اگر پورت حذف شود، مقدار پیش‌فرض ۴۴۳ است.

همچنین می‌توانید از URI Hysteria 2 (hysteria2://) استفاده کنید. در این حالت، چون URI از قبل شامل رمز عبور و برخی تنظیمات دیگر است، نمی‌توانید (و نیازی نیست) آن‌ها را به طور جداگانه در فایل پیکربندی مشخص کنید.

server: example.com
server: hysteria2://user:[email protected]/

احراز هویت

auth: some_password

توجه: اگر سرور از احراز هویت userpass استفاده می‌کند، فرمت باید username:password باشد.

TLS

tls:
  sni: another.example.com # (1)!
  insecure: false # (2)!
  pinSHA256: BA:88:45:17:A1... # (3)!
  ca: custom_ca.crt # (4)!
  clientCertificate: client.crt # (5)!
  clientKey: client.key # (6)!
  1. نام سرور برای تأیید TLS. اگر حذف شود، نام سرور از فیلد server استخراج خواهد شد.
  2. غیرفعال‌سازی تأیید TLS.
  3. تأیید اثر انگشت گواهی سرور. می‌توانید اثر انگشت گواهی خود را با استفاده از openssl دریافت کنید: openssl x509 -noout -fingerprint -sha256 -in your_cert.crt
  4. استفاده از گواهی CA سفارشی برای تأیید TLS.
  5. استفاده از گواهی کلاینت برای تأیید mTLS.
  6. استفاده از کلید کلاینت برای تأیید mTLS.

ترانسپورت

بخش transport برای سفارشی‌سازی پروتکل زیربنایی مورد استفاده توسط اتصال QUIC است. در حال حاضر تنها نوع موجود udp است، اما ما آن را برای گسترش‌های احتمالی آینده رزرو کرده‌ایم.

transport:
  type: udp # (2)!
  udp:
    hopInterval: 30s # (1)!
  1. فاصله زمانی جابجایی پورت. این فقط در صورتی مرتبط است که از آدرس با جابجایی پورت استفاده می‌کنید. برای اطلاعات بیشتر به جابجایی پورت مراجعه کنید.
  2. لطفاً دستورالعمل‌های مربوط به «انتخابگر نوع» در بالای این صفحه را بخوانید.

مبهم‌سازی

به طور پیش‌فرض، پروتکل Hysteria خود را به عنوان HTTP/3 جا می‌زند. اگر شبکه شما به طور خاص ترافیک QUIC یا HTTP/3 را مسدود می‌کند (اما نه UDP به طور کلی)، می‌توان از مبهم‌سازی برای دور زدن این مشکل استفاده کرد. ما در حال حاضر یک پیاده‌سازی مبهم‌سازی به نام «Salamander» داریم که بسته‌ها را به بایت‌های به ظاهر تصادفی و بدون الگو تبدیل می‌کند. این قابلیت نیاز به رمز عبوری دارد که باید در هر دو سمت کلاینت و سرور یکسان باشد.

توجه: استفاده از رمز عبور نادرست مبهم‌سازی منجر به مهلت زمانی اتصال می‌شود، درست مثل اینکه سرور اصلاً در حال اجرا نیست. اگر با مشکلات اتصال مواجه هستید، صحت رمز عبور را دوباره بررسی کنید.

obfs:
  type: salamander # (2)!
  salamander:
    password: cry_me_a_r1ver # (1)!
  1. با یک رمز عبور قوی به انتخاب خود جایگزین کنید.
  2. لطفاً دستورالعمل‌های مربوط به «انتخابگر نوع» در بالای این صفحه را بخوانید.

پارامترهای QUIC

quic:
  initStreamReceiveWindow: 8388608 # (1)!
  maxStreamReceiveWindow: 8388608 # (2)!
  initConnReceiveWindow: 20971520 # (3)!
  maxConnReceiveWindow: 20971520 # (4)!
  maxIdleTimeout: 30s # (5)!
  keepAlivePeriod: 10s # (6)!
  disablePathMTUDiscovery: false # (7)!
  sockopts:
    bindInterface: eth0 # (8)!
    fwmark: 1234 # (9)!
    fdControlUnixSocket: ./test.sock # (10)!
  1. اندازه اولیه پنجره دریافت جریان QUIC.
  2. حداکثر اندازه پنجره دریافت جریان QUIC.
  3. اندازه اولیه پنجره دریافت اتصال QUIC.
  4. حداکثر اندازه پنجره دریافت اتصال QUIC.
  5. حداکثر مهلت بیکاری. مدت زمانی که کلاینت اتصال را در صورت عدم دریافت بسته از سرور مرده تلقی می‌کند.
  6. دوره نگهداری اتصال. هر چند وقت یکبار کلاینت بسته‌ای را به سرور ارسال می‌کند تا اتصال را زنده نگه دارد.
  7. غیرفعال‌سازی کشف MTU مسیر QUIC.
  8. (فقط Linux) نام رابط. بسته‌های QUIC را مجبور به ارسال از طریق این رابط می‌کند.
  9. (فقط Linux) برچسب SO_MARK که به بسته‌های QUIC اضافه می‌شود.
  10. (فقط Linux) مسیر یک Unix Socket که فرآیند دیگری روی آن گوش می‌دهد. کلاینت Hysteria فایل توصیفگر (FD) مورد استفاده برای اتصال QUIC را به عنوان اطلاعات جانبی به این Unix Socket ارسال می‌کند تا فرآیند گوش‌دهنده بتواند پیکربندی‌های سفارشی دیگری انجام دهد. این گزینه می‌تواند در توسعه کلاینت اندروید استفاده شود؛ برای جزئیات بیشتر به پروتکل FD Control مراجعه کنید.

اندازه‌های پیش‌فرض پنجره دریافت جریان و اتصال به ترتیب ۸ مگابایت و ۲۰ مگابایت هستند. ما تغییر این مقادیر را توصیه نمی‌کنیم مگر اینکه کاملاً بدانید چه کار می‌کنید. اگر تصمیم به تغییر این مقادیر گرفتید، توصیه می‌کنیم نسبت پنجره دریافت جریان به پنجره دریافت اتصال را ۲:۵ نگه دارید.

توجه: گزینه‌های زیرمجموعه sockopts فقط برای اتصالات خروجی QUIC اعمال می‌شوند، نه برای سایر اتصالات خروجی احتمالی (مثلاً پرس‌وجوهای DNS برای ترجمه آدرس سرور).

پهنای باند

bandwidth:
  up: 100 mbps
  down: 200 mbps

Hysteria دارای دو الگوریتم کنترل ازدحام داخلی (BBR و Brutal) است. اینکه از کدام یک استفاده شود بستگی به ارائه اطلاعات پهنای باند دارد. اگر می‌خواهید به جای Brutal از BBR استفاده کنید، می‌توانید کل بخش bandwidth را حذف کنید. برای جزئیات بیشتر، فرآیند مذاکره پهنای باند و جزئیات کنترل ازدحام را ببینید.

⚠️ هشدار مقادیر بالاتر پهنای باند همیشه بهتر نیستند؛ بسیار مراقب باشید که از حداکثر پهنای باندی که شبکه فعلی شما پشتیبانی می‌کند فراتر نروید. انجام این کار نتیجه عکس خواهد داشت و باعث ازدحام شبکه و اتصال ناپایدار می‌شود.

سرعت واقعی آپلود کلاینت، کمترین مقدار بین مقدار مشخص‌شده در اینجا و حداکثر سرعت دانلود سرور (اگر توسط سرور تنظیم شده باشد) خواهد بود. به طور مشابه، سرعت واقعی دانلود کلاینت، کمترین مقدار بین مقدار مشخص‌شده در اینجا و حداکثر سرعت آپلود سرور (اگر توسط سرور تنظیم شده باشد) خواهد بود.

یک استثنا این است که اگر سرور گزینه ignoreClientBandwidth را فعال کرده باشد، مقادیر مشخص‌شده در اینجا نادیده گرفته خواهند شد.

واحدهای پشتیبانی‌شده:

  • bps یا b (بیت در ثانیه)
  • kbps یا kb یا k (کیلوبیت در ثانیه)
  • mbps یا mb یا m (مگابیت در ثانیه)
  • gbps یا gb یا g (گیگابیت در ثانیه)
  • tbps یا tb یا t (ترابیت در ثانیه)

Fast Open

Fast Open می‌تواند یک RTT (زمان رفت و برگشت) از هر اتصال صرفه‌جویی کند، اما به قیمت معناشناسی صحیح پروتکل‌های SOCKS5/HTTP پراکسی. وقتی این گزینه فعال باشد، کلاینت همیشه بلافاصله اتصال را بدون تأیید دسترسی‌پذیری مقصد از سرور می‌پذیرد. اگر سرور سپس شکست بخورد یا اتصال را رد کند، کلاینت به سادگی اتصال را بدون ارسال هیچ داده‌ای به کلاینت پراکسی می‌بندد.

fastOpen: true

Lazy

وقتی فعال باشد، کلاینت به این معنا «تنبل» است که فقط در صورت وجود اتصال ورودی از یکی از حالت‌های فعال کلاینت، تلاش می‌کند به سرور متصل شود. این با رفتار پیش‌فرض متفاوت است، که در آن کلاینت بلافاصله پس از شروع به کار تلاش می‌کند به سرور متصل شود.

گزینه lazy می‌تواند مفید باشد اگر مطمئن نیستید چه زمانی از کلاینت استفاده خواهید کرد و می‌خواهید از اتصالات بیکار جلوگیری کنید. همچنین اگر اتصال اینترنت شما ممکن است هنگام شروع کلاینت Hysteria آماده نباشد مفید است.

lazy: true

حالت‌ها

برای استفاده از کلاینت Hysteria، باید حداقل یکی از حالت‌های زیر را مشخص کنید:

نکته: از نسخه 2.4.1، کلاینت Hysteria می‌تواند هر دو پروتکل SOCKS5 و HTTP را روی یک پورت پشتیبانی کند. کافی است هر دو socks5 و http را در پیکربندی داشته باشید و مطمئن شوید آدرس‌های listen آن‌ها دقیقاً یکسان هستند.

SOCKS5

سرور پراکسی SOCKS5 که می‌تواند با هر برنامه سازگار با SOCKS5 استفاده شود. از TCP و UDP پشتیبانی می‌کند.

socks5:
  listen: 127.0.0.1:1080 # (1)!
  username: user # (2)!
  password: pass # (3)!
  disableUDP: false # (4)!
  1. آدرس گوش‌دادن.
  2. اختیاری. نام‌کاربری مورد نیاز برای احراز هویت.
  3. اختیاری. رمز عبور مورد نیاز برای احراز هویت.
  4. اختیاری. غیرفعال‌سازی پشتیبانی UDP.

HTTP

سرور پراکسی HTTP که می‌تواند با هر برنامه سازگار با پراکسی HTTP استفاده شود. از HTTP متن ساده و HTTPS (CONNECT) پشتیبانی می‌کند.

http:
  listen: 127.0.0.1:8080 # (1)!
  username: king # (2)!
  password: kong # (3)!
  realm: martian # (4)!
  1. آدرس گوش‌دادن.
  2. اختیاری. نام‌کاربری مورد نیاز برای احراز هویت.
  3. اختیاری. رمز عبور مورد نیاز برای احراز هویت.
  4. اختیاری. قلمرو (realm) مورد نیاز برای احراز هویت.

ارجاع TCP

ارجاع TCP به شما امکان می‌دهد یک یا چند پورت TCP را از سرور (یا هر میزبان راه دور) به کلاینت ارجاع دهید. این مفید است، مثلاً اگر می‌خواهید به سرویسی دسترسی پیدا کنید که فقط در شبکه سرور موجود است.

tcpForwarding:
  - listen: 127.0.0.1:6600 # (1)!
    remote: 127.0.0.1:6600 # (2)!
  - listen: 127.0.0.1:6601 # (3)!
    remote: other.machine.internal:6601
  1. آدرس گوش‌دادن.
  2. آدرس مقصد ارجاع.
  3. می‌توانید یک یا چند قانون ارجاع داشته باشید.

ارجاع UDP

ارجاع UDP به شما امکان می‌دهد یک یا چند پورت UDP را از سرور (یا هر میزبان راه دور) به کلاینت ارجاع دهید. این مفید است، مثلاً اگر می‌خواهید به سرویسی دسترسی پیدا کنید که فقط در شبکه سرور موجود است.

udpForwarding:
  - listen: 127.0.0.1:5300 # (1)!
    remote: 127.0.0.1:5300 # (2)!
    timeout: 20s # (3)!
  - listen: 127.0.0.1:5301 # (4)!
    remote: other.machine.internal:5301
    timeout: 20s
  1. آدرس گوش‌دادن.
  2. آدرس مقصد ارجاع.
  3. اختیاری. مهلت زمانی برای هر نشست UDP. اگر حذف شود، مهلت پیش‌فرض ۶۰ ثانیه است.
  4. می‌توانید یک یا چند قانون ارجاع داشته باشید.

TCP TProxy (فقط Linux)

TPROXY (پراکسی شفاف) یک قابلیت مخصوص Linux است که به شما امکان می‌دهد اتصالات TCP را به صورت شفاف پراکسی کنید. برای اطلاعات بیشتر به راه‌اندازی TPROXY مراجعه کنید.

tcpTProxy:
  listen: :2500 # (1)!
  1. آدرس گوش‌دادن.

UDP TProxy (فقط Linux)

TPROXY (پراکسی شفاف) یک قابلیت مخصوص Linux است که به شما امکان می‌دهد اتصالات UDP را به صورت شفاف پراکسی کنید. برای اطلاعات بیشتر به راه‌اندازی TPROXY مراجعه کنید.

udpTProxy:
  listen: :2500 # (1)!
  timeout: 20s # (2)!
  1. آدرس گوش‌دادن.
  2. اختیاری. مهلت زمانی برای هر نشست UDP. اگر حذف شود، مهلت پیش‌فرض ۶۰ ثانیه است.

TCP Redirect (فقط Linux)

REDIRECT در واقع حالت خاصی از DNAT است که آدرس مقصد آن localhost است. این روش قبل از TPROXY به عنوان روش قدیمی‌تر پیاده‌سازی پراکسی شفاف TCP وجود داشته است. اگر هسته شما از آن پشتیبانی می‌کند، استفاده از TPROXY را توصیه می‌کنیم.

tcpRedirect:
  listen: :3500

مثال:

iptables -t nat -N HYSTERIA
iptables -t nat -A HYSTERIA -d 0.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 10.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 127.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 169.254.0.0/16 -j RETURN
iptables -t nat -A HYSTERIA -d 172.16.0.0/12 -j RETURN
iptables -t nat -A HYSTERIA -d 192.168.0.0/16 -j RETURN
iptables -t nat -A HYSTERIA -d 224.0.0.0/4 -j RETURN
iptables -t nat -A HYSTERIA -d 240.0.0.0/4 -j RETURN
iptables -t nat -A HYSTERIA -p tcp -j REDIRECT --to-ports 3500
iptables -t nat -A OUTPUT -p tcp -j HYSTERIA
iptables -t nat -A PREROUTING -p tcp -j HYSTERIA

ip6tables -t nat -N HYSTERIA
ip6tables -t nat -A HYSTERIA ! -d 2000::/3 -j RETURN
ip6tables -t nat -A HYSTERIA -p tcp -j REDIRECT --to-ports 3500
ip6tables -t nat -A OUTPUT -p tcp -j HYSTERIA
ip6tables -t nat -A PREROUTING -p tcp -j HYSTERIA
define HYSTERIA_REDIRECT_PORT=3500
define BYPASS_IPV4={
    0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16,
    172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/3
}
define BYPASS_IPV6={ ::/128 }

table inet hysteria_redirect {
  chain prerouting {
    type nat hook prerouting priority filter; policy accept;
    meta l4proto tcp counter jump hysteria
  }

  chain output {
    type nat hook output priority filter; policy accept;
    meta l4proto tcp counter jump hysteria
  }

  chain hysteria {
    ip daddr $BYPASS_IPV4 counter return
    ip6 daddr $BYPASS_IPV6 counter return
    ip6 daddr != 2000::/3 counter return
    meta l4proto tcp counter redirect to :$HYSTERIA_REDIRECT_PORT
  }
}

TUN

حالت TUN یک راه‌حل پراکسی شفاف چندسکویی است که یک رابط شبکه مجازی در سیستم ایجاد می‌کند و از مسیرهای سیستم برای گرفتن و هدایت ترافیک استفاده می‌کند. در حال حاضر روی Windows، Linux و macOS کار می‌کند.

برخلاف VPNهای سنتی لایه ۳ (مانند WireGuard و OpenVPN)، حالت TUN Hysteria فقط می‌تواند TCP و UDP را مدیریت کند و از پروتکل‌های دیگر از جمله ICMP (مثلاً ping) پشتیبانی نمی‌کند. همچنین کنترل TCP stack را برای سرعت بخشیدن به اتصالات TCP در دست می‌گیرد.

در مقایسه با پیاده‌سازی Hysteria 1، TUN در Hysteria 2 مبتنی بر استک «system» از sing-tun است و نیاز به پیکربندی یک آدرس /30 IPv4 و یک آدرس /126 IPv6 روی رابط دارد. Hysteria به طور خودکار رابط شبکه، آدرس‌ها و مسیرها را تنظیم خواهد کرد.

توجه: ipv4Exclude/ipv6Exclude برای جلوگیری از حلقه مسیریابی مهم هستند. برای اطلاعات بیشتر نظرات مربوط به این فیلدها را ببینید.

tun:
  name: "hytun" # (1)!
  mtu: 1500 # (2)!
  timeout: 5m # (3)!
  address: # (4)!
    ipv4: 100.100.100.101/30
    ipv6: 2001::ffff:ffff:ffff:fff1/126
  route: # (5)!
    ipv4: [0.0.0.0/0] # (6)!
    ipv6: ["2000::/3"] # (7)!
    ipv4Exclude: [192.0.2.1/32] # (8)!
    ipv6Exclude: ["2001:db8::1/128"] # (9)!
  1. نام رابط TUN.
  2. اختیاری. حداکثر اندازه بسته پذیرفته‌شده توسط رابط TUN. پیش‌فرض ۱۵۰۰ بایت است.
  3. اختیاری. مهلت زمانی نشست UDP. پیش‌فرض ۵ دقیقه است.
  4. اختیاری. آدرس‌هایی که روی رابط استفاده می‌شوند. هر آدرس خصوصی که با LAN شما تداخل نداشته باشد تنظیم کنید. مقادیر پیش‌فرض همان‌طور که نشان داده شده هستند.
  5. اختیاری. قوانین مسیریابی. حذف یا نادیده گرفتن تمام فیلدها به این معناست که هیچ مسیری به طور خودکار اضافه نمی‌شود. در بیشتر موارد، داشتن فقط ipv4Exclude یا ipv6Exclude کافی است.
  6. اختیاری. پیشوند IPv4 برای پراکسی. اگر هر فیلد دیگری پیکربندی شده باشد، پیش‌فرض 0.0.0.0/0 است.
  7. اختیاری. پیشوند IPv6 برای پراکسی. به دلیل محدودیت‌های YAML، نیاز به نقل‌قول است. اگر هر فیلد دیگری پیکربندی شده باشد، پیش‌فرض ::/0 است.
  8. اختیاری. پیشوند IPv4 برای استثنا. آدرس سرور Hysteria خود را اینجا اضافه کنید تا از حلقه مسیریابی جلوگیری شود. اگر می‌خواهید پراکسی IPv4 را کاملاً غیرفعال کنید، می‌توانید 0.0.0.0/0 را نیز اینجا قرار دهید.
  9. اختیاری. پیشوند IPv6 برای استثنا. به دلیل محدودیت‌های YAML، نیاز به نقل‌قول است. آدرس سرور Hysteria خود را اینجا اضافه کنید تا از حلقه مسیریابی جلوگیری شود. اگر می‌خواهید پراکسی IPv6 را کاملاً غیرفعال کنید، می‌توانید "::/0" را نیز اینجا قرار دهید.

توجه: در Linux، گاهی لازم است rp_filter را غیرفعال کنید تا رابط بتواند ترافیک از رابط‌های دیگر را دریافت کند.

sysctl net.ipv4.conf.default.rp_filter=2
sysctl net.ipv4.conf.all.rp_filter=2

مشکلات سازگاری شناخته‌شده:

سیستم‌عامل مشکل
macOS نام رابط TUN باید utun و سپس یک عدد باشد، مثلاً utun123.
Windows Server 2022 برای کارکرد باید Windows Firewall غیرفعال شود.
CentOS 7 برای کارکرد باید فایروال غیرفعال شود. برای هسته‌های قبل از 4.17، مسیرهای اضافه‌شده خودکار به درستی کار نخواهند کرد (دلیل). هسته را به 4.17 یا بالاتر ارتقا دهید، یا ip rule del from all goto 9010; ip -6 rule del from all goto 9010 را پس از شروع کلاینت Hysteria اجرا کنید.
FreeBSD پشتیبانی نمی‌شود