← بازگشت به وبلاگ

پروکسی فقط برای سایت‌های مورد نیاز: مسیریابی بر اساس دامنه در sing-box و mihomo

از پروکسی پولی لازم نیست تمام ترافیک را هدایت کنید. مسیریابی بر اساس دامنه‌ها در sing-box و mihomo (Clash Meta) را بررسی می‌کنیم: پیکربندی‌های آماده برای نسخه‌های فعلی، قوانین مربوط به سایت‌ها و برنامه‌ها، چندین کشور به طور همزمان و تله‌ها — QUIC، نشت DNS، تضاد با ضد شناسایی و چرخش در وسط جلسه.

📅۲۱ مهر ۱۴۰۵
پروکسی فقط برای سایت‌های مورد نیاز: مسیریابی بر اساس دامنه در sing-box و mihomo

وضعیت معمولی: برای باز کردن فروشگاه در آمازون آلمان باید از IP آلمانی استفاده کنید، و برای پنل تأمین‌کننده از ایالات متحده باید از IP آمریکایی استفاده کنید، در حالی که YouTube، پیام‌رسان کاری و به‌روزرسانی‌های سیستم باید به‌طور مستقیم کار کنند. فعال کردن پروکسی «برای تمام سیستم» ناراحت‌کننده و گران است: هنگام پرداخت برای یک گیگابایت از طریق پروکسی، تمام ترافیک پس‌زمینه مصرف می‌شود. خاموش و روشن کردن دستی — در بدترین زمان فراموش می‌شود. راه‌حل — مسیر‌یابی بر اساس دامنه‌ها: مشتری محلی خودش تصمیم می‌گیرد که کدام سایت را از کدام پروکسی عبور دهد و کدام را به‌طور مستقیم. در زیر، پیکربندی‌های کاری برای دو موتور محبوب سال 2026، sing-box و mihomo (که قبلاً Clash Meta نامیده می‌شد) و بررسی تله‌هایی که معمولاً طرح را خراب می‌کنند، آورده شده است.

چرا این بهتر از پروکسی در مرورگر و فایل PAC است

پروکسی در تنظیمات مرورگر یا افزونه فقط برای همان مرورگر کار می‌کند. فایل PAC می‌تواند پروکسی را بر اساس دامنه انتخاب کند، اما همچنین در داخل مرورگر و تنظیمات سیستم زندگی می‌کند — مشتری دسکتاپ بازار، تلگرام، اسکریپت پایتون یا ابزار کنسولی آن را به سادگی نادیده می‌گیرند.

sing-box و mihomo در سطح پایین‌تری کار می‌کنند: یک رابط شبکه مجازی (حالت TUN) را راه‌اندازی می‌کنند و ترافیک تمام برنامه‌ها را از خود عبور می‌دهند. سپس هر اتصال از طریق لیست قوانین عبور می‌کند: دامنه، زیرشبکه IP، نام فرآیند، پورت. اگر قانونی مطابقت داشته باشد — اتصال به خروجی مشخص‌شده (پروکسی کشور مورد نظر یا اتصال مستقیم) می‌رود.

این در عمل چه فایده‌ای دارد:

  • صرفه‌جویی در ترافیک. فقط سایت‌های کاری از طریق پروکسی پرداختی عبور می‌کنند، در حالی که ویدیوها، به‌روزرسانی‌ها و پشتیبان‌گیری‌های ابری به‌طور مستقیم انجام می‌شوند.
  • چندین کشور به‌طور همزمان. amazon.de — از طریق خروجی آلمانی، walmart.com — از طریق آمریکایی، بدون نیاز به تغییر.
  • قوانین بر اساس برنامه‌ها. می‌توان یک فرآیند خاص (به عنوان مثال، مشتری دسکتاپ یا اسکریپت) را به پروکسی ارسال کرد، بدون اینکه بقیه را تحت تأثیر قرار دهد.
  • خطاهای انسانی کمتر. نیازی به یادآوری اینکه پروکسی فعال است یا نه — سایت همیشه با IP «درست» باز می‌شود.

چه چیزی نیاز است

  • پروکسی با پشتیبانی از SOCKS5 یا HTTP و احراز هویت با نام کاربری و رمز عبور. هر دو موتور می‌توانند نام کاربری و رمز عبور را به‌صورت خودکار ارسال کنند، نیازی به دروازه محلی نیست.
  • مشتری: برای sing-box — برنامه‌های رسمی برای Android، iOS و macOS یا هسته برای Windows/Linux؛ برای mihomo — رابط‌های گرافیکی مانند Clash Verge Rev یا FlClash.
  • لیست دامنه‌هایی که باید از طریق پروکسی عبور کنند. بهتر است این لیست را از قبل جمع‌آوری کنید — در مورد آن در زیر توضیح داده شده است.

گزینه 1: sing-box (نسخه 1.12 و جدیدتر)

تذکر مهم درباره نسخه‌ها. بسیاری از پیکربندی‌ها در اینترنت برای sing-box قدیمی نوشته شده‌اند و در نسخه‌های جدیدتر کار نمی‌کنند. طبق لیست رسمی ویژگی‌های منسوخ‌شده: geosite و geoip در 1.12.0 حذف شده‌اند (به جای آن — rule-set)، فیلد outbound در داخل قوانین از 1.11 به اقدام‌ها ("action": "route") تغییر یافته است، فرمت‌های قدیمی DNS سرورها در 1.14.0 حذف شده‌اند و خروجی‌های ویژه block و dns — هنوز در 1.13.0. شاخه پایدار فعلی در زمان نوشتن — 1.14 است.

حداقل پیکربندی کاری: پروکسی مقیم آلمانی برای چند دامنه، و بقیه به‌طور مستقیم.

{
  "log": { "level": "info" },
  "dns": {
    "servers": [ { "type": "local", "tag": "local" } ]
  },
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "address": [ "172.18.0.1/30" ],
      "auto_route": true,
      "strict_route": true
    }
  ],
  "outbounds": [
    {
      "type": "socks",
      "tag": "resi-de",
      "server": "ХОСТ_ИЗ_КАБИНЕТА",
      "server_port": 1080,
      "username": "ЛОГИН",
      "password": "ПАРОЛЬ"
    },
    { "type": "direct", "tag": "direct" }
  ],
  "route": {
    "auto_detect_interface": true,
    "default_domain_resolver": "local",
    "rules": [
      { "action": "sniff" },
      { "protocol": "dns", "action": "hijack-dns" },
      {
        "network": "udp",
        "port": 443,
        "domain_suffix": [ "amazon.de", "otto.de" ],
        "action": "reject"
      },
      {
        "domain_suffix": [ "amazon.de", "otto.de", "ipinfo.io" ],
        "action": "route",
        "outbound": "resi-de"
      }
    ],
    "final": "direct"
  }
}

میزبان، پورت، نام کاربری و رمز عبور را از پنل تأمین‌کننده وارد کنید. پورت 1080 فقط برای مثال است.

هر بخش چه کاری انجام می‌دهد

  1. ورودی TUN (auto_route) ترافیک کل سیستم را به sing-box هدایت می‌کند. strict_route در ویندوز به‌طور اضافی قوانین فایروال را برای جلوگیری از نشت DNS اضافه می‌کند (مستندات هشدار می‌دهد که این ممکن است برخی برنامه‌ها را خراب کند، مانند VirtualBox).
  2. "action": "sniff" — خط کلیدی. از طریق TUN اتصالات به آدرس‌های IP می‌آیند، نه به دامنه‌ها. اسنیفینگ نام سایت را از دست دادن TLS (SNI) یا هدر HTTP استخراج می‌کند و تنها پس از آن قوانین domain_suffix شروع به کار می‌کنند. بدون این خط، قوانین دامنه به‌طور خاموش کار نمی‌کنند — دلیل رایج «پیکربندی اعمال نمی‌شود».
  3. hijack-dns درخواست‌های DNS سیستم را گرفته و به ماژول DNS sing-box ارسال می‌کند.
  4. قانون با reject برای UDP 443 QUIC (HTTP/3) را برای دامنه‌های پروکسی‌شده غیرفعال می‌کند. مرورگر به HTTPS معمولی بر روی TCP برمی‌گردد و آن از طریق پروکسی می‌رود. چرا — در بخش تله‌ها.
  5. domain_suffix دامنه و تمام زیر دامنه‌های آن را می‌گیرد: amazon.de شامل www.amazon.de و sellercentral.amazon.de است.
  6. auto_detect_interface اتصالات خروجی خود sing-box را به آداپتور شبکه فیزیکی متصل می‌کند. بدون آن، ترافیک به سرور پروکسی دوباره به TUN می‌رسد و یک حلقه مسیریابی ایجاد می‌شود.
  7. final: direct — هر چیزی که با هیچ قانونی مطابقت نداشته باشد، به‌طور مستقیم می‌رود.

چندین کشور و قانون بر اساس برنامه

خروجی دوم به‌عنوان یک شیء دیگر socks با برچسب خود (به عنوان مثال، resi-us) و قانون جداگانه اضافه می‌شود. می‌توان یک برنامه را به‌طور کامل به پروکسی ارسال کرد با قانونی که فیلد process_name را دارد (در ویندوز، macOS و لینوکس کار می‌کند):

{
  "process_name": [ "python.exe" ],
  "action": "route",
  "outbound": "resi-us"
}

قوانین از بالا به پایین بررسی می‌شوند تا اولین تطابق، بنابراین قوانین خاص را بالاتر از قوانین عمومی قرار دهید.

گزینه 2: mihomo (Clash Meta)

mihomo به این دلیل راحت است که برای آن رابط‌های گرافیکی بالغ وجود دارد و پیکربندی آن به زبان YAML نوشته می‌شود که خواندن آن آسان‌تر است. سناریوی مشابه:

tun:
  enable: true
  stack: gvisor
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - https://1.1.1.1/dns-query

proxies:
  - name: resi-de
    type: socks5
    server: ХОСТ_ИЗ_КАБИНЕТА
    port: 1080
    username: ЛОГИН
    password: ПАРОЛЬ

rule-providers:
  work-de:
    type: inline
    behavior: classical
    payload:
      - DOMAIN-SUFFIX,amazon.de
      - DOMAIN-SUFFIX,otto.de
      - DOMAIN-SUFFIX,ipinfo.io

rules:
  - RULE-SET,work-de,resi-de
  - MATCH,DIRECT

تفاوت‌های اصلی با sing-box:

  • حالت fake-ip مشکل «اتصال به IP آمده، نه به دامنه» را به‌طور دیگری حل می‌کند: mihomo به درخواست‌های DNS با آدرس جعلی پاسخ می‌دهد، به یاد می‌سپارد که به کدام دامنه مربوط می‌شود و بر اساس آن قوانین را اعمال می‌کند. آدرس واقعی سایت را پروکسی‌سرور در سمت خود می‌داند.
  • مجموعه قوانین (rule-providers) راحت است که به‌عنوان یک لیست جداگانه نگه‌داری شود. نوع inline دامنه‌ها را مستقیماً در پیکربندی نگه می‌دارد، نوع http لیست را از طریق لینک می‌کشد و به‌طور دوره‌ای به‌روزرسانی می‌کند، به عنوان مثال، لیست مشترک تیم در مخزن.
  • MATCH — معادل final: هر چیز دیگری به‌طور مستقیم می‌رود.
  • برای قوانین بر اساس برنامه‌ها، PROCESS-NAME وجود دارد، در Android نام بسته برنامه را می‌پذیرد.

چگونه لیست دامنه‌ها را جمع‌آوری کنیم و چیزی را از دست ندهیم

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

  1. سایت را با ابزارهای توسعه‌دهنده باز کنید (F12 → تب Network)، سناریوی معمولی را طی کنید: ورود، جستجو، کارت محصول، پنل.
  2. تمام دامنه‌ها را از ستون Domain یادداشت کنید. می‌توانید شمارنده‌ها و تبلیغات خارجی را اضافه نکنید، اما دامنه‌های خود سرویس (شامل CDN و سرور احراز هویت) را حتماً اضافه کنید.
  3. آن‌ها را به قانون اضافه کنید و سناریو را تکرار کنید. در لاگ sing-box (سطح info) یا در تب اتصالات رابط mihomo می‌توانید ببینید که کدام قانون برای هر اتصال کار کرده است.
  4. در لیست، یک دامنه «کنترلی» مانند ipinfo.io نگه دارید: این IP پروکسی را نشان می‌دهد و سرویس همسایه بررسی IP که در لیست نیست — IP واقعی شما را نشان می‌دهد. بنابراین به سرعت می‌توان دید که مسیر‌یابی کار می‌کند.

تله‌هایی که طرح را خراب می‌کنند

1. QUIC از پروکسی عبور می‌کند

Chrome و سایر مرورگرها به‌راحتی به سایت‌های بزرگ از طریق HTTP/3، یعنی از طریق UDP می‌روند. بسیاری از تأمین‌کنندگان پروکسی از UDP از طریق SOCKS5 پشتیبانی نمی‌کنند یا به‌طور محدود پشتیبانی می‌کنند. در بدترین حالت، اتصال به‌جای درست می‌رود و در بهترین حالت، سایت کند می‌شود تا مرورگر به TCP برگردد. بنابراین در پیکربندی sing-box، UDP به پورت 443 برای دامنه‌های کاری به‌وضوح رد می‌شود. در mihomo، دستیابی به اثر مشابه آسان‌تر است، با غیرفعال کردن QUIC در مرورگر (پرچم chrome://flags/#enable-quic).

2. نشت DNS به تأمین‌کننده

اگر دامنه کاری به‌طور محلی از طریق DNS تأمین‌کننده اینترنت شما حل شود، خود سایت این را نخواهد دید: اتصال همچنان از IP پروکسی می‌آید. اما تأمین‌کننده و هر کسی که DNS شما را ببیند، می‌داند که شما چه سایت‌هایی را باز می‌کنید. حالت fake-ip در mihomo و ارسال دامنه به پروکسی‌سرور پس از اسنیفینگ در sing-box این مشکل را کاهش می‌دهد. اطلاعات بیشتر در مورد بررسی‌ها و روش‌های حفاظت — در بررسی روش‌های حفاظت از نشت DNS.

3. تضاد با VPN یا ضد تشخیص دیگر

دو رابط TUN به‌طور همزمان — هرج و مرج تضمینی در مسیرها. اگر در مرورگر ضد تشخیص، پروفایل قبلاً پروکسی خود را داشته باشد، بهتر است ترافیک آن را از TUN خارج کنید: با قانونی بر اساس نام فرآیند، مرورگر را به direct ارسال کنید، و سپس هر پروفایل از طریق پروکسی خود عبور می‌کند، همان‌طور که طراحی شده است.

4. مسیریابی سیستم جایگزین ضد تشخیص نمی‌شود

تمام برنامه‌ها در کامپیوتر با یک IP به دامنه متصل می‌شوند. برای یک فروشگاه این طبیعی است. برای 10 حساب کاربری در یک پلتفرم — نه: پلتفرم اثر انگشت مرورگر یکسان و یک آدرس را می‌بیند. برای چند حساب کاربری، مسیر‌یابی بر اساس دامنه‌ها — یک ابزار کمکی است، نه جایگزینی برای ترکیب «پروفایل جداگانه + پروکسی جداگانه».

5. چرخش IP در وسط جلسه

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

6. پروکسی بدون پشتیبانی از پروتکل مورد نیاز

اگر تأمین‌کننده فقط پروکسی HTTP ارائه دهد، در sing-box از خروجی نوع http استفاده کنید، در mihomo — type: http. هر دو موتور از نام کاربری و رمز عبور برای HTTP پشتیبانی می‌کنند. اما اگر برنامه خود به‌طور مستقل نتواند با پروکسی با احراز هویت کار کند و نمی‌خواهید TUN را بالا ببرید، یک دروازه محلی بر روی gost، 3proxy یا Squid مناسب است.

کدام پروکسی را در قانون قرار دهیم

  • بازارها، شبکه‌های اجتماعی، پنل‌های فروشنده، پنل‌های تبلیغاتی — پروکسی‌های مقیم کشور مورد نظر با جلسه چسبنده. آدرس تأمین‌کننده خانگی کمترین سوالات را از ضد تقلب ایجاد می‌کند.
  • پلتفرم‌هایی با سخت‌ترین بررسی (برنامه‌های موبایل، TikTok، Instagram) — پروکسی‌های موبایل: با یک IP اپراتور، تعداد زیادی از مشترکین واقعی به‌طور همزمان به شبکه متصل می‌شوند.
  • API، مستندات، مخازن بسته، خدمات بدون حفاظت ضد ربات — پروکسی‌های دیتاسنتر: آن‌ها ارزان‌تر و سریع‌تر هستند و برای چنین کارهایی IP خانگی نیاز نیست.

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

نتیجه‌گیری

مسیر‌یابی بر اساس دامنه‌ها پروکسی را از «سوئیچ» به ابزاری دقیق تبدیل می‌کند: سایت‌های مورد نیاز همیشه با IP مورد نظر باز می‌شوند و ترافیک باقی‌مانده، گیگابایت‌های پرداخت‌شده را هدر نمی‌دهد. برای شروع، 30 خط پیکربندی کافی است. نکته اصلی — فراموش نکنید که اسنیفینگ (یا fake-ip) را فعال کنید، QUIC را برای دامنه‌های پروکسی‌شده غیرفعال کنید، لیست کامل دامنه‌های سرویس را جمع‌آوری کنید و از نحو به‌روز استفاده کنید: پیکربندی‌های مربوط به sing-box قبل از 1.12 در نسخه‌های جدیدتر کار نخواهند کرد.