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

پراکسی شفاف بر روی روتر OpenWrt از طریق TPROXY: تنظیمات کامل برای کل شبکه

تنظیم پروکسی شفاف از طریق TPROXY در OpenWrt این امکان را می‌دهد که تمام ترافیک شبکه از طریق سرور پروکسی عبور کند بدون نیاز به تنظیم دستی در هر دستگاه.

📅۱۶ خرداد ۱۴۰۵
```html

اگر می‌خواهید تمام ترافیک شبکه شما از طریق پروکسی عبور کند — بدون تنظیم دستی در هر لپ‌تاپ، گوشی هوشمند یا سرور — پروکسی شفاف در روتر OpenWrt از طریق مکانیزم TPROXY دقیقاً چیزی است که نیاز دارید. در این راهنما، پیکربندی کامل را بررسی خواهیم کرد: از نصب بسته‌های مورد نیاز تا قوانین iptables و بررسی عملکرد.

TPROXY چیست و چرا به آن نیاز داریم

TPROXY (پروکسی شفاف) — یک مکانیزم هسته لینوکس است که اجازه می‌دهد ترافیک TCP و UDP را بدون تغییر آدرس IP مقصد در بسته، ضبط کند. بر خلاف ریدایرکت NAT کلاسیک (REDIRECT)، TPROXY آدرس اصلی گیرنده را حفظ می‌کند که برای عملکرد صحیح پروکسی‌کلاینت بسیار حیاتی است: او «می‌بیند» که دستگاه در شبکه به کجا متصل می‌شود.

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

سناریوهای معمول استفاده از TPROXY در OpenWrt:

  • مسیر‌یابی تمام ترافیک از طریق پروکسی‌های مقیم یا موبایل برای دور زدن مسدودیت‌های جغرافیایی
  • نظارت و فیلتر کردن متمرکز ترافیک در شبکه شرکتی
  • آزمایش برنامه‌ها از طریق پروکسی از مناطق مختلف بدون تغییر تنظیمات در ماشین‌های کلاینت
  • جایگزینی خودکار IP برای تمام دستگاه‌های متصل به روتر
  • کار با مرورگرهای ضد شناسایی (Dolphin Anty، AdsPower، GoLogin) از طریق یک دروازه واحد

مزیت کلیدی TPROXY نسبت به REDIRECT معمولی: پشتیبانی از UDP. این برای پروتکل‌های مدرن (QUIC، DNS over UDP، ترافیک بازی) مهم است که REDIRECT به سادگی نمی‌تواند به درستی پردازش کند.

پروکسی شفاف در OpenWrt چگونه کار می‌کند

طرح کار TPROXY در OpenWrt به صورت زیر است:

  1. دستگاه در شبکه بسته‌ای به آدرس IP خارجی ارسال می‌کند (برای مثال، 93.184.216.34:443).
  2. روتر بسته را با قانون iptables TPROXY در زنجیره PREROUTING ضبط می‌کند — قبل از اینکه تصمیمی درباره مسیر‌یابی بگیرد.
  3. بسته با یک fwmark خاص علامت‌گذاری شده و به سوکت محلی پروکسی‌کلاینت (برای مثال، به پورت 7893) هدایت می‌شود.
  4. پروکسی‌کلاینت (redsocks، Xray، sing-box) آدرس اصلی مقصد را از طریق مکانیزم IP_TRANSPARENT «می‌بیند» و اتصال را از طریق پروکسی‌سرور دوردست برقرار می‌کند.
  5. پاسخ به دستگاه برمی‌گردد — به صورت شفاف، بدون هیچ گونه تغییر در سمت کلاینت.

💡 نکته مهم

TPROXY فقط در زنجیره PREROUTING جدول mangle کار می‌کند. این بدان معناست که فقط ترافیک ترانزیتی (از دستگاه‌های شبکه) ضبط می‌شود، اما ترافیک خود روتر ضبط نمی‌شود. برای ضبط ترافیک روتر نیاز به تنظیمات اضافی از طریق OUTPUT و مسیر‌یابی از طریق loopback خواهید داشت.

نیازمندی‌ها: روتر، فریمور، بسته‌ها

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

نیازمندی‌ها برای روتر

پارامتر حداقل توصیه شده
RAM 64 مگابایت 256 مگابایت و بیشتر
Flash / Storage 16 مگابایت 128 مگابایت و بیشتر
معماری CPU MIPS، ARM ARM Cortex-A7/A53 و بالاتر
نسخه OpenWrt 21.02 23.05 یا snapshot
هسته لینوکس 5.4 با TPROXY 5.15 / 6.1

مدل‌های معتبر برای این کار: GL.iNet GL-MT6000 (Flint 2)، Xiaomi AX3000T، Banana Pi BPi-R3، Raspberry Pi 4 با OpenWrt، و همچنین هر روتر x86 با حجم کافی RAM.

بررسی پشتیبانی TPROXY در هسته

به روتر از طریق SSH متصل شوید و دستور زیر را اجرا کنید:

zcat /proc/config.gz | grep TPROXY

شما باید خط CONFIG_NETFILTER_XT_TARGET_TPROXY=y یا =m را ببینید. اگر خروجی خالی بود — هسته از TPROXY پشتیبانی نمی‌کند و نیاز به بازترکیب یا تغییر فریمور خواهید داشت.

نصب بسته‌های مورد نیاز

برای کارکرد TPROXY در OpenWrt به چند بسته نیاز دارید. به SSH متصل شوید و لیست بسته‌ها را به‌روز کنید:

opkg update

اجزای مورد نیاز را نصب کنید:

# ماژول هسته برای TPROXY
opkg install kmod-nft-tproxy

# اگر از iptables استفاده می‌کنید (پشته قدیمی)
opkg install iptables-mod-tproxy

# ابزارهای ip rule / ip route
opkg install ip-full

# اضافی برای کار با fwmark
opkg install kmod-ipt-tproxy

بسته‌ای از بسته‌های زیر را بسته به پروکسی‌کلاینت انتخابی خود نصب کنید:

پروکسی‌کلاینت بسته OpenWrt پشتیبانی از TPROXY
redsocks redsocks TCP (UDP از طریق redsocks2)
Xray-core xray-core TCP + UDP (به صورت بومی)
sing-box sing-box TCP + UDP (به صورت بومی)
mihomo (Clash Meta) mihomo TCP + UDP (به صورت بومی)

برای اکثر وظایف، sing-box یا mihomo را توصیه می‌کنیم — آنها به صورت بومی از TPROXY پشتیبانی می‌کنند، از جمله UDP، و دارای فرمت پیکربندی راحتی هستند.

تنظیم قوانین iptables و ip rule

این مرحله کلیدی است. ما باید سه کار انجام دهیم: بسته‌های مورد نیاز را با fwmark علامت‌گذاری کنیم، یک جدول مسیر‌یابی خاص تنظیم کنیم و یک قانون TPROXY به iptables اضافه کنیم.

مرحله 1: ایجاد جدول مسیر‌یابی

# یک مسیر خاص اضافه می‌کنیم: بسته‌های علامت‌گذاری شده به loopback می‌روند
ip rule add fwmark 1 table 100
ip route add local default dev lo table 100

این به هسته می‌گوید: «تمام بسته‌ها با علامت fwmark=1 را محلی در نظر بگیر و به loopback تحویل بده». اینگونه پروکسی‌کلاینت قادر خواهد بود آنها را از طریق سوکت خود دریافت کند.

مرحله 2: قوانین iptables (mangle/PREROUTING)

# یک زنجیره برای TPROXY ایجاد می‌کنیم
iptables -t mangle -N TPROXY_RULES

# آدرس‌های محلی را مستثنی می‌کنیم (آنها را پروکسی نمی‌کنیم)
iptables -t mangle -A TPROXY_RULES -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 240.0.0.0/4 -j RETURN

# TCP را به پورت پروکسی‌کلاینت (7893) هدایت می‌کنیم
iptables -t mangle -A TPROXY_RULES -p tcp \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

# UDP را به پورت پروکسی‌کلاینت (7893) هدایت می‌کنیم
iptables -t mangle -A TPROXY_RULES -p udp \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

# زنجیره را به ترافیک ترانزیتی اعمال می‌کنیم
iptables -t mangle -A PREROUTING -j TPROXY_RULES

📌 پورت 7893

پورت 7893 — پورت است که پروکسی‌کلاینت (sing-box، mihomo، Xray) در حالت tproxy گوش می‌دهد. اطمینان حاصل کنید که با تنظیمات کلاینت شما مطابقت دارد.

مرحله 3: ذخیره قوانین در هنگام راه‌اندازی مجدد

یک اسکریپت راه‌اندازی خودکار در /etc/init.d/tproxy ایجاد کنید یا دستورات را به /etc/rc.local اضافه کنید. برای OpenWrt 23.05 با nftables به جای iptables از قوانین مشابه در سینتکس nft استفاده کنید:

nft add table ip tproxy_table
nft add chain ip tproxy_table prerouting \
  '{ type filter hook prerouting priority mangle; policy accept; }'
nft add rule ip tproxy_table prerouting \
  ip daddr { 10.0.0.0/8, 127.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } return
nft add rule ip tproxy_table prerouting \
  tcp tproxy to 127.0.0.1:7893 meta mark set 1
nft add rule ip tproxy_table prerouting \
  udp tproxy to 127.0.0.1:7893 meta mark set 1

پیکربندی پروکسی‌کلاینت: redsocks، Xray، sing-box

پروکسی‌کلاینت در روتر — برنامه‌ای است که ترافیک ضبط شده را دریافت کرده و آن را از طریق پروکسی‌سرور دوردست ارسال می‌کند. پیکربندی را برای محبوب‌ترین گزینه‌ها بررسی می‌کنیم.

گزینه 1: redsocks (ساده، فقط TCP)

مناسب برای وظایف پایه با پروکسی SOCKS5. فایل پیکربندی /etc/redsocks.conf:

base {
    log_debug = off;
    log_info = on;
    log = "file:/var/log/redsocks.log";
    daemon = on;
    redirector = tproxy;
}

redsocks {
    local_ip = 127.0.0.1;
    local_port = 7893;

    // آدرس پروکسی SOCKS5 شما
    ip = 185.220.101.50;
    port = 1080;
    type = socks5;

    // اگر پروکسی نیاز به احراز هویت دارد:
    login = "your_login";
    password = "your_password";
}

گزینه 2: sing-box (توصیه می‌شود — TCP + UDP)

sing-box به صورت بومی از TPROXY پشتیبانی می‌کند و با اکثر انواع پروکسی کار می‌کند: SOCKS5، HTTP، Shadowsocks، VLESS، Trojan. نمونه پیکربندی /etc/sing-box/config.json:

{
  "inbounds": [
    {
      "type": "tproxy",
      "listen": "127.0.0.1",
      "listen_port": 7893,
      "tcp_fast_open": false,
      "udp_fragment": true,
      "sniff": true
    }
  ],
  "outbounds": [
    {
      "type": "socks",
      "tag": "proxy-out",
      "server": "185.220.101.50",
      "server_port": 1080,
      "version": "5",
      "username": "your_login",
      "password": "your_password"
    },
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "rules": [
      {
        "geoip": ["private"],
        "outbound": "direct"
      }
    ],
    "final": "proxy-out"
  }
}

sing-box را راه‌اندازی کرده و آن را به راه‌اندازی خودکار اضافه کنید:

/etc/init.d/sing-box enable
/etc/init.d/sing-box start

گزینه 3: mihomo / Clash Meta

mihomo — یک فورک از Clash با امکانات پیشرفته. در بخش tproxy-port پورت برای ضبط را مشخص کنید:

mixed-port: 7890
tproxy-port: 7893
allow-lan: false
mode: rule
log-level: info

proxies:
  - name: "my-socks5"
    type: socks5
    server: 185.220.101.50
    port: 1080
    username: your_login
    password: your_password
    udp: true

proxy-groups:
  - name: "PROXY"
    type: select
    proxies:
      - my-socks5

rules:
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - MATCH,PROXY

حفاظت در برابر نشت DNS

پروکسی شفاف بدون تنظیم صحیح DNS — یک آسیب‌پذیری جدی است. اگر درخواست‌های DNS به طور مستقیم از طریق ارائه‌دهنده عبور کنند و نه از طریق پروکسی، مکان واقعی افشا می‌شود، با وجود تغییر IP. این برای وظایفی که در آن‌ها ناشناسی یا تغییر جغرافیایی اهمیت دارد، بحرانی است.

روش 1: ضبط DNS از طریق TPROXY

یک قانون برای ضبط ترافیک UDP به پورت 53 اضافه کنید:

# ضبط درخواست‌های DNS از دستگاه‌های شبکه
iptables -t mangle -A TPROXY_RULES -p udp --dport 53 \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

روش 2: DNS از طریق sing-box / mihomo

sing-box و mihomo می‌توانند به طور مستقل درخواست‌های DNS را پردازش کرده و آن‌ها را از طریق پروکسی ارسال کنند. در پیکربندی sing-box، بخش DNS را اضافه کنید:

"dns": {
  "servers": [
    {
      "tag": "remote",
      "address": "8.8.8.8",
      "detour": "proxy-out"
    },
    {
      "tag": "local",
      "address": "192.168.1.1",
      "detour": "direct"
    }
  ],
  "rules": [
    {
      "geoip": ["private"],
      "server": "local"
    }
  ],
  "final": "remote",
  "independent_cache": true
}

روش 3: dnsmasq با upstream از طریق پروکسی

اگر از sing-box/mihomo استفاده نمی‌کنید، dnsmasq (سرور DNS استاندارد OpenWrt) را تنظیم کنید تا درخواست‌ها را به سرور DNS رمزگذاری شده ارسال کند. در فایل /etc/dnsmasq.conf:

# استفاده از DNS ارائه‌دهنده را غیرفعال کنید
no-resolv

# از DoH/DoT از طریق حل‌کننده محلی استفاده کنید
server=127.0.0.1#5335

# به دستگاه‌ها اجازه ندهید که به طور مستقیم از DNS خارجی استفاده کنند
# (قانون iptables برای مسدود کردن درخواست‌های DNS مستقیم)
# iptables -t nat -A PREROUTING -p udp --dport 53 ! -d 192.168.1.1 -j DNAT --to 192.168.1.1

بررسی و اشکال‌زدایی

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

مرحله 1: بررسی قوانین iptables

# زنجیره TPROXY_RULES را مشاهده کنید
iptables -t mangle -L TPROXY_RULES -v -n

# جدول مسیر‌یابی 100 را بررسی کنید
ip rule show
ip route show table 100

مرحله 2: بررسی اینکه پروکسی‌کلاینت پورت را گوش می‌دهد

ss -tlnp | grep 7893
# یا
netstat -tlnp | grep 7893

شما باید فرآیند sing-box، mihomo یا redsocks را ببینید که در 127.0.0.1:7893 گوش می‌دهد.

مرحله 3: بررسی IP از دستگاه کلاینت

به روتر از هر دستگاهی در شبکه متصل شوید و در مرورگر ifconfig.me یا 2ip.ru را باز کنید. IP نمایش داده شده باید با IP پروکسی‌سرور شما مطابقت داشته باشد و نه با IP واقعی ارائه‌دهنده.

مرحله 4: بررسی نشت DNS

به dnsleaktest.com بروید و تست پیشرفته را انجام دهید. سرورهای DNS در نتایج باید متعلق به پروکسی‌سرور شما یا سرور DoH انتخابی شما باشند، اما نه به ارائه‌دهنده اینترنت شما.

مشکلات معمول و راه‌حل‌های آن‌ها

علامت علت راه‌حل
اینترنت اصلاً کار نمی‌کند پروکسی‌کلاینت اجرا نشده است وضعیت سرویس و لاگ‌های کلاینت را بررسی کنید
IP تغییر نمی‌کند قوانین iptables اعمال نشده‌اند بررسی کنید iptables -t mangle -L -v
UDP کار نمی‌کند redsocks از UDP پشتیبانی نمی‌کند به sing-box یا mihomo سوئیچ کنید
حلقه مسیر‌یابی ترافیک پروکسی‌کلاینت نیز ضبط می‌شود UID یا cgroup پروکسی‌کلاینت را از قوانین مستثنی کنید
خطای هدف TPROXY ماژول هسته بارگذاری نشده است modprobe xt_TPROXY

کدام نوع پروکسی برای TPROXY در OpenWrt مناسب است

انتخاب نوع پروکسی به شدت بر نتیجه تأثیر می‌گذارد. برای پروکسی شفاف در روتر، همه گزینه‌ها مناسب نیستند — مهم است که پروتکل، ثبات اتصال و وظیفه را در نظر بگیرید.

پروکسی SOCKS5

گزینه‌ای بسیار عمومی برای TPROXY. از TCP و UDP (در صورت استفاده از sing-box/mihomo) پشتیبانی می‌کند. برای اکثر وظایف مناسب است: دور زدن مسدودیت‌های جغرافیایی، تغییر IP برای تمام شبکه، کار با بازارهای آنلاین. پروکسی‌های دیتا سنتر در فرمت SOCKS5 سرعت و ثبات بالایی را ارائه می‌دهند — انتخاب بهینه اگر اولویت سرعت باشد و نه شبیه‌سازی به کاربر واقعی.

پروکسی‌های مقیم

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

  • نظارت بر قیمت‌ها در بازارهای خارجی (Amazon، eBay، Zalando)
  • آزمایش تبلیغات از مناطق مختلف
  • کار با پلتفرم‌هایی که به شدت IP‌های دیتا سنتر را مسدود می‌کنند
  • وظایفی که نیاز به حداکثر شبیه‌سازی به کاربر واقعی دارند

پروکسی‌های موبایل

پروکسی‌های موبایل از طریق IP‌های اپراتورهای موبایل (4G/5G) کار می‌کنند. آنها بالاترین سطح اعتماد را از طرف پلتفرم‌ها دارند — Facebook، Instagram، TikTok به ندرت IP‌های موبایل را مسدود می‌کنند، زیرا ممکن است هزاران کاربر واقعی پشت یک آدرس باشند. هنگام استفاده از طریق TPROXY در روتر، تمام ترافیک شبکه شما IP موبایل دریافت می‌کند که برای:

  • آربیتراژ ترافیک از طریق Facebook Ads و TikTok Ads
  • ساخت حساب‌های اجتماعی
  • کار با مرورگرهای ضد شناسایی (Dolphin Anty، AdsPower، GoLogin) از طریق یک دروازه واحد
نوع پروکسی سرعت اعتماد پلتفرم‌ها بهترین سناریو
دیتا سنتر ⚡ بالا ★★☆☆☆ پارس کردن، نظارت بر قیمت‌ها
مقیم ⚡⚡ متوسط ★★★★☆ آزمایش جغرافیایی، تجارت الکترونیک
موبایل ⚡ متوسط ★★★★★ شبکه‌های اجتماعی، آربیتراژ ترافیک

نتیجه‌گیری

پروکسی شفاف از طریق TPROXY در OpenWrt — ابزاری قدرتمند برای مدیریت متمرکز ترافیک کل شبکه. مزایای اصلی این رویکرد: نیازی به تنظیم پروکسی در هر دستگاه به طور جداگانه نیست، هم ترافیک TCP و هم UDP پشتیبانی می‌شود و پیکربندی به طور انعطاف‌پذیر برای هر وظیفه‌ای قابل مقیاس است — از استفاده خانگی تا زیرساخت‌های شرکتی.

مراحل کلیدی که بررسی کردیم: بررسی پشتیبانی TPROXY در هسته OpenWrt، نصب بسته‌های مورد نیاز، تنظیم قوانین iptables/nftables با fwmark صحیح، پیکربندی پروکسی‌کلاینت (redsocks، sing-box یا mihomo) و حفاظت در برابر نشت DNS. هر یک از این مراحل مهم است — نادیده گرفتن هر کدام منجر به عملکرد نادرست یا نشت IP واقعی خواهد شد.

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

```