رفتن به محتوای اصلی
FA

خانه / وبلاگ / استقرار

Mihomo به‌عنوان دروازهٔ خانگی — پروکسی شفاف روی روتر نرم‌افزاری یا NAS

استقرار2026-06-051891 واژه5 دقیقه مطالعه
Mihomo به‌عنوان دروازهٔ خانگی — پروکسی شفاف روی روتر نرم‌افزاری یا NAS

نصب کلاینت روی هر دستگاه خسته‌کننده است، و تلویزیون و ویدیوپروژکتور و دستگاه‌های IoT اصلاً نمی‌توانند اجرایش کنند. Mihomo را روی یک روتر نرم‌افزاری یا NAS مستقر کنید تا هر دستگاهی که به Wi-Fi وصل است خودکار پوشش داده شود.

سه راه اتصال

بده‌بستان‌هاروتر جانبی با دروازهٔ دستیروی دستگاهکمترین خطر، خرابی فقط همان دستگاه را می‌گیردهر دستگاه جداگانه تنظیم می‌شودبرای تلاش اول پیشنهاد می‌شودپروکسی شفاف TProxyبا iptableصفر تنظیم روی دستگاه‌هاپیچیده است و یک اشتباه کل خانه را آفلاین می‌کندTUN با auto-routeروی دروازهتنظیمش ساده استسربار بیشتر، پردازندهٔ روتر نرم‌افزاری شاید نکشد
اول با روتر جانبی و اشارهٔ دستی راهش بیندازید، بعد تصمیم بگیرید پروکسی شفاف می‌ارزد یا نه

خط اصلی این مقاله روتر جانبی به‌علاوهٔ TProxy است، کاربردی‌ترین ترکیب برای خانه.

۱. نصب Mihomo

با فرض یک روتر نرم‌افزاری یا NAS با Linux amd64:

# دانلود و استخراج (معماری را متناسب انتخاب کنید)
gunzip mihomo-linux-amd64-v1.19.29.gz
chmod +x mihomo-linux-amd64-v1.19.29
sudo mv mihomo-linux-amd64-v1.19.29 /usr/local/bin/mihomo
mihomo -v

# آماده کردن پوشهٔ کاری
sudo mkdir -p /etc/mihomo

دستگاه‌های ARM (رزبری‌پای، NAS با ARM) نسخهٔ linux-arm64 می‌خواهند؛ اگر uname -m خروجی aarch64 داد یعنی همان.

۲. فایل پیکربندی

فایل /etc/mihomo/config.yaml:

# ===== پایه =====
mixed-port: 7890
tproxy-port: 7895          # برای TProxy
redir-port: 7892           # برای REDIRECT (اختیاری)
allow-lan: true
bind-address: "*"
mode: rule
log-level: info
ipv6: false
unified-delay: true
tcp-concurrent: true

external-controller: 0.0.0.0:9090
secret: "یک رمز تصادفی به‌قدر کافی بلند بگذارید"
external-ui: /etc/mihomo/ui

# ===== DNS =====
dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.home.arpa"
    - "+.pool.ntp.org"
    - "time.*.com"
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"
    - "captive.apple.com"
  default-nameserver: [223.5.5.5, 119.29.29.29]
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  fallback:
    - https://1.1.1.1/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN

# ===== گره‌ها از کجا می‌آیند =====
proxy-providers:
  main:
    type: http
    url: "لینک اشتراک شما"
    interval: 3600
    path: ./providers/main.yaml
    header:
      User-Agent: ["clash.meta"]
    exclude-filter: "(?i)remaining|expire|website|traffic"
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300
      lazy: true

# ===== گروه‌های سیاست =====
proxy-groups:
  - name: "PROXY"
    type: select
    proxies: ["AUTO", "HK", "JP", "SG", DIRECT]
  - name: "AUTO"
    type: url-test
    use: [main]
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    lazy: true
  - name: "HK"
    type: url-test
    use: [main]
    filter: "(?i)HK|Hong ?Kong"
    interval: 300
    tolerance: 50
  - name: "JP"
    type: url-test
    use: [main]
    filter: "(?i)JP|Japan"
    interval: 300
    tolerance: 50
  - name: "SG"
    type: url-test
    use: [main]
    filter: "(?i)SG|Singapore"
    interval: 300
    tolerance: 50
  - name: "FINAL"
    type: select
    proxies: ["PROXY", DIRECT]

# ===== قواعد =====
rules:
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
  - DOMAIN-SUFFIX,lan,DIRECT
  - DOMAIN-SUFFIX,local,DIRECT
  # مسیریابی به‌ازای دستگاه (نمونه)
  - SRC-IP-CIDR,192.168.1.50/32,DIRECT          # گوشی یکی از اعضای خانواده مستقیم بماند
  - SRC-IP-CIDR,192.168.1.60/32,PROXY           # تلویزیون همیشه پروکسی شود
  # مسیریابی معمولی
  - GEOIP,CN,DIRECT
  - MATCH,FINAL

۳. سرویس systemd

فایل /etc/systemd/system/mihomo.service:

[Unit]
Description=Mihomo Daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
Restart=always
RestartSec=5
ExecStartPre=/usr/local/bin/mihomo -t -d /etc/mihomo
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo

[Install]
WantedBy=multi-user.target

سوییچ -t در ExecStartPre بررسی پیکربندی است — آن‌وقت پیکربندی خراب به‌جای انداختن سرویس در حال کار، خودش راه نمی‌افتد، و همین جزئیات دردسر زیادی را می‌خرد.

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo
journalctl -u mihomo -f

۴. رویکرد الف: دروازه را دستی اشاره بدهید (از همین‌جا شروع کنید)

به هیچ قاعدهٔ فایروالی دست نزنید؛ روی دستگاه‌هایی که پروکسی می‌خواهند این‌ها را عوض کنید:

  • دروازه: نشانی روتر نرم‌افزاری (مثلاً 192.168.1.2)
  • DNS: باز هم 192.168.1.2
روتر جانبی کجا می‌نشینددستگاهدروازه به روتر جانبی اشاره می‌کندروتر جانبی با Mihomoبر پایهٔ قواعد کار می‌کندروتر اصلیاتصال اینترنت را برقرار می‌کنداینترنتدستگاه‌هایی که دست نزده‌اید مسیر اصلی را می‌روند و تحت تأثیر نیستند
مزیت بزرگش: وقتی چیزی می‌شکند بقیه هنوز کار می‌کنند

قوت این رویکرد تاب‌آوری است — اگر Mihomo بمیرد فقط دستگاه‌هایی که عوض کرده‌اید تحت تأثیرند و بقیهٔ اهل خانه متوجه نمی‌شوند.

۵. رویکرد ب: پروکسی شفاف TProxy

صفر تنظیم روی دستگاه‌ها، به بهای قواعد فایروال روی دروازه.

فعال کردن forwarding در هسته

sudo tee /etc/sysctl.d/99-mihomo.conf > /dev/null <<'EOF'
net.ipv4.ip_forward = 1
net.ipv4.conf.all.route_localnet = 1
EOF
sudo sysctl --system

قواعد iptables

#!/bin/bash
# /etc/mihomo/tproxy.sh
TPROXY_PORT=7895
ROUTE_TABLE=100
FWMARK=1

# مسیریابی سیاستی: بسته‌های علامت‌خورده به جدول محلی می‌روند
ip rule add fwmark $FWMARK table $ROUTE_TABLE 2>/dev/null
ip route add local default dev lo table $ROUTE_TABLE 2>/dev/null

# زنجیرهٔ خودمان
iptables -t mangle -N MIHOMO 2>/dev/null
iptables -t mangle -F MIHOMO

# بازه‌های خصوصی و رزروشده را دست‌نخورده رد کنید
for net in 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/4 240.0.0.0/4; do
  iptables -t mangle -A MIHOMO -d $net -j RETURN
done

# بقیه را علامت بزن و به پورت TProxy بسپار
iptables -t mangle -A MIHOMO -p tcp -j TPROXY --on-port $TPROXY_PORT --tproxy-mark $FWMARK
iptables -t mangle -A MIHOMO -p udp -j TPROXY --on-port $TPROXY_PORT --tproxy-mark $FWMARK

# روی ترافیک فرستاده‌شده (از دستگاه‌های دیگر) اعمال کن
iptables -t mangle -A PREROUTING -j MIHOMO

# ربودن DNS: پرس‌وجوهای پورت ۵۳ دستگاه‌ها را به Mihomo منحرف کن
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 1053
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 1053

اسکریپت پاک‌سازی:

#!/bin/bash
# /etc/mihomo/tproxy-clear.sh
iptables -t mangle -D PREROUTING -j MIHOMO 2>/dev/null
iptables -t mangle -F MIHOMO 2>/dev/null
iptables -t mangle -X MIHOMO 2>/dev/null
iptables -t nat -F PREROUTING 2>/dev/null
ip rule del fwmark 1 table 100 2>/dev/null
ip route del local default dev lo table 100 2>/dev/null

قواعد را به systemd بچسبانید تا با سرویس بیایند و بروند:

[Service]
ExecStartPost=/etc/mihomo/tproxy.sh
ExecStopPost=/etc/mihomo/tproxy-clear.sh

واداشتن دستگاه‌ها به استفاده از آن

در تنظیمات DHCP روتر اصلی، هم دروازهٔ پیش‌فرض و هم سرور DNS را نشانی روتر نرم‌افزاری بگذارید. دستگاه‌ها با اتصال دوباره به Wi-Fi برمی‌دارندش.

۶. تاب‌آوری: اهل خانه را عصبانی نکنید

مهم‌ترین بخش استقرار خانگی همین است.

تدابیری که اختیاری نیستنددر systemd گزینهٔ Restart=always بگذارید تا فرایند مرده برگردداز -t در ExecStartPre استفاده کنید تا پیکربندی خراب هرگز راه نیفتداسکریپت به‌روزرسانی اشتراک اول در فایل موقت دانلود کند، اعتبارسنجی کند و بعد جایگزین کندیک دستگاه نگه دارید که از روتر جانبی نمی‌گذرد تا هنگام خرابی بتوانید جست‌وجو کنیددر DHCP روتر اصلی دو DNS بگذارید: روتر جانبی به‌علاوهٔ یک حل‌کنندهٔ عمومی به‌عنوان پشتیبانبه دستگاه‌های مهم (گوشی یکی از اعضا، لپ‌تاپ کاری) قاعدهٔ SRC-IP-CIDR با مقدار DIRECT بدهید

یک اسکریپت امن به‌روزرسانی اشتراک

#!/bin/bash
# /usr/local/bin/update-mihomo.sh
set -euo pipefail
CONF=/etc/mihomo/config.yaml
TMP=$(mktemp)
trap 'rm -f "$TMP"' EXIT

curl -fsSL --max-time 30 -A "clash.meta" -o "$TMP" "لینک اشتراک شما"

# بررسی پایهٔ سلامت
grep -q "^proxies:\|^proxy-providers:" "$TMP" || { echo "محتوای اشتراک درست نیست"; exit 1; }

# بگذارید mihomo هم اعتبارسنجی کند
cp "$CONF" "${CONF}.bak"
cp "$TMP" "$CONF"
if mihomo -t -d /etc/mihomo; then
  systemctl restart mihomo
  echo "به‌روز شد"
else
  cp "${CONF}.bak" "$CONF"
  echo "اعتبارسنجی شکست خورد، برگردانده شد"
  exit 1
fi

به cron اضافه‌اش کنید:

0 4 * * * /usr/local/bin/update-mihomo.sh >> /var/log/mihomo-update.log 2>&1

با proxy-provider در واقع به این اسکریپت نیازی ندارید — هسته خودش طبق زمان‌بندی گره‌ها را می‌کشد و پیکربندی اصلی هرگز عوض نمی‌شود. این دلیل مهمی است که provider را به کل اشتراک ترجیح بدهید.

۷. پنل وب

external-ui: /etc/mihomo/ui
external-ui-name: metacubexd

فایل‌های پنل را در /etc/mihomo/ui بگذارید، بعد در مرورگر به http://ip-روتر:9090/ui بروید، secret را وارد کنید و از یک صفحهٔ وب گره عوض کنید و اتصال‌ها را ببینید و لاگ بخوانید.

بقیهٔ اهل خانه هم می‌توانند از همان صفحه خودشان گره عوض کنند و سراغ شما نیایند.

۸. کارایی و منابع

ظرفیت تقریبی سخت‌افزارهای مختلف (نمادین)Raspberry Pi 4Bحدود ۱۰۰ مگابیت، برای خانه کافیروتر نرم‌افزاری J4125عملاً گیگابیت را پر می‌کندروتر نرم‌افزاری N100گیگابیت بدون زحمتدستگاه‌های تک‌هسته‌ای قدیمیبا مجموعه‌قواعد بزرگ آشکارا اذیت می‌شوندظرفیت واقعی به اندازهٔ مجموعه‌قواعد و تعداد اتصال و پروتکل بستگی دارد؛ این را فقط راهنمای انتخاب بدانید

ترتیب بهینه‌سازی وقتی کارایی کم می‌آورد:

۱. مجموعه‌قواعد را کم کنید (فهرست‌های پخش و تبلیغاتی که به کار نمی‌برید را بیندازید) ۲. مجموعه‌قواعد را به قالب دودویی mrs ببرید ۳. log-level را روی warning بگذارید، هرگز debug نه ۴. بسامد health-check را کم کنید ۵. TProxy از TUN کم‌مصرف‌تر است، پس TProxy را ترجیح بدهید

۹. عیب‌یابی

# وضعیت سرویس
systemctl status mihomo
journalctl -u mihomo -n 100 --no-pager

# چه چیزی گوش می‌دهد
ss -tulnp | grep mihomo

# آیا API پاسخ می‌دهد
curl -H "Authorization: Bearer secret-شما" http://127.0.0.1:9090/version

# آزمودن پورت پروکسی از دستگاهی دیگر
curl -x http://192.168.1.2:7890 -I https://www.google.com

# شمارندهٔ برخورد قواعد iptables
iptables -t mangle -L MIHOMO -v -n

خلاصه

  • اول «روتر جانبی به‌علاوهٔ دروازهٔ دستی» را راه بیندازید و وقتی پایدار شد سراغ TProxy بروید
  • گذاشتن secret اجباری است؛ 0.0.0.0:9090 به روی کل شبکهٔ محلی شما باز است
  • proxy-provider بردارید نه کل اشتراک تا هسته خودش به‌روز شود و پیکربندی اصلی تکان نخورد
  • سوییچ -t را به ExecStartPre اضافه کنید تا پیکربندی خراب سرویس در حال کار را کنار نزند
  • به دستگاه‌های مهم قاعدهٔ مستقیم SRC-IP-CIDR بدهید تا اهل خانه تحت تأثیر نباشند
  • پیش از دست زدن به TProxy یک پاک‌سازی خودکار زمان‌بندی کنید تا راه برگشت داشته باشید

بیشتر بخوانید: API کنترل و پنل‌های وب و مدیریت چند اشتراک.


مستندات مرتبط

رساندن Docker و WSL2 به پروکسی Clash روی میزبان
استقرار رساندن Docker و WSL2 به پروکسی Clash روی میزبان

نشانی 127.0.0.1 داخل کانتینر همان میزبان نیست. پیکربندی برای هر سه سناریوی Docker — کشیدن تصویر توسط دیمون، زمان ساخت و زمان اجرا — به‌علاوهٔ دو رویکرد برای حالت‌های شبکهٔ متفاوت WSL2.

2026-06-141401 واژه3 دقیقه مطالعه