Quay lại blog

Proxy trong suốt trên bộ định tuyến OpenWrt qua TPROXY: hướng dẫn cấu hình đầy đủ cho toàn bộ mạng

Cấu hình proxy trong suốt qua TPROXY trên OpenWrt cho phép chuyển toàn bộ lưu lượng mạng qua máy chủ proxy mà không cần cấu hình thủ công trên từng thiết bị.

📅6 tháng 6, 2026
```html

Nếu bạn muốn toàn bộ lưu lượng mạng của mình đi qua proxy — mà không cần cấu hình thủ công trên từng laptop, smartphone hoặc server — proxy trong suốt trên router OpenWrt thông qua cơ chế TPROXY chính là điều bạn cần. Trong hướng dẫn này, chúng ta sẽ xem xét cấu hình đầy đủ: từ việc cài đặt các gói cần thiết đến các quy tắc iptables và kiểm tra hoạt động.

TPROXY là gì và tại sao nó cần thiết

TPROXY (Proxy trong suốt) là một cơ chế của kernel Linux, cho phép chặn lưu lượng TCP và UDP mà không thay đổi địa chỉ IP đích trong gói tin. Khác với việc chuyển tiếp NAT truyền thống (REDIRECT), TPROXY giữ nguyên địa chỉ gốc của người nhận, điều này rất quan trọng cho việc hoạt động chính xác của proxy-client: nó "nhìn thấy" chính xác nơi mà thiết bị đang cố gắng kết nối trong mạng.

Tại sao điều này lại cần thiết trong thực tế? Hãy tưởng tượng: bạn có một văn phòng hoặc một phòng thí nghiệm gia đình với hàng chục thiết bị — máy tính, smartphone, thiết bị IoT, máy ảo thử nghiệm. Cấu hình proxy thủ công trên từng thiết bị là một công việc tốn thời gian và thường xuyên gây đau đầu khi phải thay đổi máy chủ proxy. Proxy trong suốt trên router giải quyết vấn đề một cách tập trung: toàn bộ lưu lượng mạng tự động đi qua proxy, và các thiết bị thậm chí không nghi ngờ gì về điều đó.

Các kịch bản điển hình khi sử dụng TPROXY trên OpenWrt:

  • Định tuyến toàn bộ lưu lượng qua các proxy cố định hoặc di động để vượt qua các rào cản địa lý
  • Giám sát và lọc lưu lượng tập trung trong mạng doanh nghiệp
  • Kiểm tra ứng dụng qua proxy từ các khu vực khác nhau mà không cần thay đổi cấu hình trên các máy khách
  • Thay đổi IP tự động cho tất cả các thiết bị kết nối với router
  • Hoạt động với các trình duyệt chống phát hiện (Dolphin Anty, AdsPower, GoLogin) thông qua một cổng duy nhất

Lợi thế chính của TPROXY so với REDIRECT thông thường: hỗ trợ UDP. Điều này rất quan trọng cho các giao thức hiện đại (QUIC, DNS qua UDP, lưu lượng trò chơi), mà REDIRECT không thể xử lý chính xác.

Cách hoạt động của proxy trong suốt trên OpenWrt

Sơ đồ hoạt động của TPROXY trên OpenWrt như sau:

  1. Thiết bị trong mạng gửi gói tin đến địa chỉ IP bên ngoài (ví dụ, 93.184.216.34:443).
  2. Router chặn gói tin bằng quy tắc iptables TPROXY ngay trong chuỗi PREROUTING — trước khi quyết định về định tuyến.
  3. Gói tin được đánh dấu bằng fwmark đặc biệt và được chuyển hướng đến socket cục bộ của proxy-client (ví dụ, trên cổng 7893).
  4. Proxy-client (redsocks, Xray, sing-box) "nhìn thấy" địa chỉ đích gốc thông qua cơ chế IP_TRANSPARENT và thiết lập kết nối thông qua máy chủ proxy từ xa.
  5. Phản hồi được trả lại cho thiết bị — một cách trong suốt, không có bất kỳ thay đổi nào ở phía khách hàng.

💡 Điểm quan trọng

TPROXY chỉ hoạt động trong chuỗi PREROUTING của bảng mangle. Điều này có nghĩa là chỉ lưu lượng transit (từ các thiết bị trong mạng) bị chặn, nhưng không phải lưu lượng của chính router. Để chặn lưu lượng của router, cần có cấu hình bổ sung thông qua OUTPUT và định tuyến qua loopback.

Yêu cầu: router, firmware, gói

Trước khi bắt đầu cấu hình, hãy đảm bảo rằng cấu hình của bạn đáp ứng các yêu cầu tối thiểu.

Yêu cầu đối với router

Tham số Tối thiểu Khuyến nghị
RAM 64 MB 256 MB trở lên
Flash / Lưu trữ 16 MB 128 MB trở lên
Kiến trúc CPU MIPS, ARM ARM Cortex-A7/A53 trở lên
Phiên bản OpenWrt 21.02 23.05 hoặc snapshot
Kernel Linux 5.4 với TPROXY 5.15 / 6.1

Các mô hình đã được chứng minh hiệu quả cho nhiệm vụ này: GL.iNet GL-MT6000 (Flint 2), Xiaomi AX3000T, Banana Pi BPi-R3, Raspberry Pi 4 với OpenWrt, cũng như bất kỳ router x86 nào với dung lượng RAM đủ.

Kiểm tra hỗ trợ TPROXY trong kernel

Kết nối với router qua SSH và thực hiện:

zcat /proc/config.gz | grep TPROXY

Bạn nên thấy dòng CONFIG_NETFILTER_XT_TARGET_TPROXY=y hoặc =m. Nếu đầu ra trống — kernel không hỗ trợ TPROXY và cần phải biên dịch lại hoặc thay đổi firmware.

Cài đặt các gói cần thiết

Để TPROXY hoạt động trên OpenWrt, cần một số gói. Kết nối qua SSH và cập nhật danh sách gói:

opkg update

Cài đặt các thành phần cần thiết:

# Mô-đun kernel cho TPROXY
opkg install kmod-nft-tproxy

# Nếu bạn sử dụng iptables (ngăn xếp cũ)
opkg install iptables-mod-tproxy

# Tiện ích ip rule / ip route
opkg install ip-full

# Thêm cho việc làm việc với fwmark
opkg install kmod-ipt-tproxy

Tùy thuộc vào proxy-client bạn chọn, hãy cài đặt một trong các gói sau:

Proxy-client Gói OpenWrt Hỗ trợ TPROXY
redsocks redsocks TCP (UDP qua redsocks2)
Xray-core xray-core TCP + UDP (natively)
sing-box sing-box TCP + UDP (natively)
mihomo (Clash Meta) mihomo TCP + UDP (natively)

Đối với hầu hết các nhiệm vụ, chúng tôi khuyên bạn nên sử dụng sing-box hoặc mihomo — chúng hỗ trợ TPROXY natively, bao gồm cả UDP, và có định dạng cấu hình thuận tiện.

Cấu hình quy tắc iptables và ip rule

Đây là bước quan trọng. Chúng ta cần thực hiện ba điều: đánh dấu các gói cần thiết bằng fwmark, cấu hình một bảng định tuyến đặc biệt và thêm quy tắc TPROXY vào iptables.

Bước 1: Tạo bảng định tuyến

# Thêm một tuyến đặc biệt: các gói được đánh dấu đi vào loopback
ip rule add fwmark 1 table 100
ip route add local default dev lo table 100

Điều này nói với kernel: "tất cả các gói có nhãn fwmark=1 hãy coi là cục bộ và chuyển đến loopback". Chính xác như vậy, proxy-client sẽ có khả năng nhận chúng qua socket của mình.

Bước 2: Quy tắc iptables (mangle/PREROUTING)

# Tạo chuỗi cho TPROXY
iptables -t mangle -N TPROXY_RULES

# Loại trừ các địa chỉ cục bộ (không chuyển tiếp chúng)
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

# Chuyển tiếp TCP đến cổng của proxy-client (7893)
iptables -t mangle -A TPROXY_RULES -p tcp \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

# Chuyển tiếp UDP đến cổng của proxy-client (7893)
iptables -t mangle -A TPROXY_RULES -p udp \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

# Áp dụng chuỗi cho lưu lượng transit
iptables -t mangle -A PREROUTING -j TPROXY_RULES

📌 Cổng 7893

Cổng 7893 là cổng mà proxy-client (sing-box, mihomo, Xray) lắng nghe ở chế độ tproxy. Hãy đảm bảo rằng nó khớp với cấu hình của bạn.

Bước 3: Lưu quy tắc khi khởi động lại

Tạo một script tự động khởi động trong /etc/init.d/tproxy hoặc thêm các lệnh vào /etc/rc.local. Đối với OpenWrt 23.05 với nftables thay vì iptables, hãy sử dụng các quy tắc tương tự trong cú pháp 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

Cấu hình proxy-client: redsocks, Xray, sing-box

Proxy-client trên router là một chương trình nhận lưu lượng bị chặn và gửi nó qua máy chủ proxy từ xa. Hãy xem xét cấu hình cho các tùy chọn phổ biến nhất.

Tùy chọn 1: redsocks (đơn giản, chỉ TCP)

Phù hợp cho các nhiệm vụ cơ bản với proxy SOCKS5. Tệp cấu hình /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;

    // Địa chỉ của proxy SOCKS5 của bạn
    ip = 185.220.101.50;
    port = 1080;
    type = socks5;

    // Nếu proxy yêu cầu xác thực:
    login = "your_login";
    password = "your_password";
}

Tùy chọn 2: sing-box (khuyến nghị — TCP + UDP)

sing-box hỗ trợ TPROXY natively và làm việc với hầu hết các loại proxy: SOCKS5, HTTP, Shadowsocks, VLESS, Trojan. Ví dụ cấu hình /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"
  }
}

Khởi động sing-box và thêm vào khởi động tự động:

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

Tùy chọn 3: mihomo / Clash Meta

mihomo là một nhánh của Clash với các tính năng mở rộng. Trong phần tproxy-port, hãy chỉ định cổng để chặn:

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

Bảo vệ khỏi rò rỉ DNS

Proxy trong suốt mà không có cấu hình DNS đúng — đây là một lỗ hổng nghiêm trọng. Nếu các yêu cầu DNS đi trực tiếp qua nhà cung cấp, mà không qua proxy, vị trí thực tế sẽ bị lộ, bất chấp việc thay đổi IP. Điều này rất quan trọng cho các nhiệm vụ mà tính ẩn danh hoặc thay đổi địa lý là cần thiết.

Cách 1: Chặn DNS qua TPROXY

Thêm quy tắc để chặn lưu lượng UDP đến cổng 53:

# Chặn các yêu cầu DNS từ các thiết bị trong mạng
iptables -t mangle -A TPROXY_RULES -p udp --dport 53 \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

Cách 2: DNS qua sing-box / mihomo

sing-box và mihomo có khả năng tự xử lý các yêu cầu DNS và gửi chúng qua proxy. Trong cấu hình của sing-box, hãy thêm phần 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
}

Cách 3: dnsmasq với upstream qua proxy

Nếu bạn không sử dụng sing-box/mihomo, hãy cấu hình dnsmasq (máy chủ DNS tiêu chuẩn của OpenWrt) để nó chuyển tiếp các yêu cầu đến máy chủ DNS mã hóa. Trong tệp /etc/dnsmasq.conf:

# Tắt việc sử dụng DNS từ nhà cung cấp
no-resolv

# Sử dụng DoH/DoT qua resolver cục bộ
server=127.0.0.1#5335

# Cấm các thiết bị sử dụng DNS bên ngoài trực tiếp
# (quy tắc iptables để chặn các yêu cầu DNS trực tiếp)
# iptables -t nat -A PREROUTING -p udp --dport 53 ! -d 192.168.1.1 -j DNAT --to 192.168.1.1

Kiểm tra và gỡ lỗi

Sau khi cấu hình, hãy chắc chắn kiểm tra tính chính xác của proxy trong suốt. Đây là danh sách kiểm tra từng bước.

Bước 1: Kiểm tra quy tắc iptables

# Xem chuỗi TPROXY_RULES
iptables -t mangle -L TPROXY_RULES -v -n

# Kiểm tra bảng định tuyến 100
ip rule show
ip route show table 100

Bước 2: Kiểm tra xem proxy-client có lắng nghe cổng không

ss -tlnp | grep 7893
# hoặc
netstat -tlnp | grep 7893

Bạn nên thấy quá trình sing-box, mihomo hoặc redsocks đang lắng nghe trên 127.0.0.1:7893.

Bước 3: Kiểm tra IP từ thiết bị khách

Kết nối với router từ bất kỳ thiết bị nào trong mạng và mở trình duyệt đến ifconfig.me hoặc 2ip.ru. IP hiển thị phải trùng với IP của máy chủ proxy của bạn, không phải với IP thực tế của nhà cung cấp.

Bước 4: Kiểm tra rò rỉ DNS

Truy cập dnsleaktest.com và thực hiện bài kiểm tra mở rộng. Các máy chủ DNS trong kết quả phải thuộc về nhà cung cấp proxy của bạn hoặc máy chủ DoH đã chọn, nhưng không phải nhà cung cấp internet của bạn.

Các vấn đề điển hình và giải pháp của chúng

Triệu chứng Nguyên nhân Giải pháp
Internet không hoạt động Proxy-client không được khởi động Kiểm tra trạng thái dịch vụ, nhật ký của client
IP không thay đổi Quy tắc iptables không được áp dụng Kiểm tra iptables -t mangle -L -v
UDP không hoạt động redsocks không hỗ trợ UDP Chuyển sang sing-box hoặc mihomo
Vòng lặp định tuyến Lưu lượng của proxy-client cũng bị chặn Loại trừ UID hoặc cgroup của proxy-client khỏi các quy tắc
Lỗi TPROXY target Mô-đun kernel chưa được tải modprobe xt_TPROXY

Loại proxy nào phù hợp cho TPROXY trên OpenWrt

Việc chọn loại proxy có ảnh hưởng nghiêm trọng đến kết quả. Không phải tất cả các tùy chọn đều phù hợp cho proxy trong suốt trên router — điều quan trọng là phải xem xét giao thức, độ ổn định của kết nối và nhiệm vụ.

Proxy SOCKS5

Đây là tùy chọn đa năng nhất cho TPROXY. Hỗ trợ TCP và UDP (khi sử dụng sing-box/mihomo). Phù hợp cho hầu hết các nhiệm vụ: vượt qua các rào cản địa lý, thay đổi IP cho toàn bộ mạng, làm việc với các thị trường. Proxy trung tâm dữ liệu ở định dạng SOCKS5 cung cấp tốc độ cao và độ ổn định — lựa chọn tối ưu nếu ưu tiên là tốc độ, không phải là ngụy trang thành người dùng thực.

Proxy cư trú

Proxy cư trú sử dụng địa chỉ IP của người dùng thực. Khi định tuyến qua TPROXY trên router, điều này có nghĩa là toàn bộ lưu lượng mạng của bạn sẽ trông giống như lưu lượng của một người dùng internet gia đình thông thường từ quốc gia cần thiết. Hoàn hảo cho:

  • Theo dõi giá trên các thị trường nước ngoài (Amazon, eBay, Zalando)
  • Kiểm tra quảng cáo từ các khu vực khác nhau
  • Làm việc với các nền tảng thường xuyên chặn IP trung tâm dữ liệu
  • Các nhiệm vụ yêu cầu ngụy trang tối đa thành người dùng thực

Proxy di động

Proxy di động hoạt động qua IP của các nhà mạng di động (4G/5G). Chúng có mức độ tin cậy cao nhất từ các nền tảng — Facebook, Instagram, TikTok rất hiếm khi chặn IP di động, vì một địa chỉ có thể đại diện cho hàng ngàn người dùng thực. Khi sử dụng qua TPROXY trên router, toàn bộ lưu lượng mạng của bạn nhận được IP di động, điều này rất quan trọng cho:

  • Chuyển đổi lưu lượng qua Facebook Ads và TikTok Ads
  • Nuôi tài khoản mạng xã hội
  • Làm việc với các trình duyệt chống phát hiện (Dolphin Anty, AdsPower, GoLogin) thông qua một cổng duy nhất
Loại proxy Tốc độ Độ tin cậy của nền tảng Kịch bản tốt nhất
Trung tâm dữ liệu ⚡ Cao ★★☆☆☆ Phân tích, theo dõi giá
Cư trú ⚡⚡ Trung bình ★★★★☆ Kiểm tra địa lý, thương mại điện tử
Di động ⚡ Trung bình ★★★★★ Mạng xã hội, chuyển đổi lưu lượng

Kết luận

Proxy trong suốt thông qua TPROXY trên OpenWrt là một công cụ mạnh mẽ để quản lý lưu lượng của toàn bộ mạng một cách tập trung. Những lợi ích chính của phương pháp này: không cần cấu hình proxy trên từng thiết bị riêng lẻ, hỗ trợ cả lưu lượng TCP và UDP, và cấu hình có thể mở rộng linh hoạt cho bất kỳ nhiệm vụ nào — từ sử dụng gia đình đến cơ sở hạ tầng doanh nghiệp.

Các bước chính mà chúng ta đã xem xét: kiểm tra hỗ trợ TPROXY trong kernel OpenWrt, cài đặt các gói cần thiết, cấu hình các quy tắc iptables/nftables với fwmark đúng, cấu hình proxy-client (redsocks, sing-box hoặc mihomo) và bảo vệ khỏi rò rỉ DNS. Mỗi bước này đều quan trọng — bỏ qua bất kỳ bước nào sẽ dẫn đến hoạt động không chính xác hoặc rò rỉ IP thực tế.

Nếu nhiệm vụ của bạn là định tuyến lưu lượng toàn bộ mạng qua proxy với mức độ tin cậy cao từ các nền tảng (Facebook, Instagram, TikTok, các thị trường nước ngoài), chúng tôi khuyên bạn nên sử dụng proxy cư trú — chúng cung cấp IP thực từ quốc gia cần thiết và rủi ro bị chặn tối thiểu khi làm việc qua proxy trong suốt trên router.

```