Se desideri che tutto il traffico della tua rete passi attraverso un proxy — senza configurazioni manuali su ogni laptop, smartphone o server — un proxy trasparente su un router OpenWrt tramite il meccanismo TPROXY è proprio ciò di cui hai bisogno. In questa guida esamineremo la configurazione completa: dall'installazione dei pacchetti necessari, alle regole iptables e alla verifica del funzionamento.
Che cos'è TPROXY e a cosa serve
TPROXY (Transparent Proxy) è un meccanismo del kernel Linux che consente di intercettare il traffico TCP e UDP senza modificare l'indirizzo IP di destinazione nel pacchetto. A differenza del classico reindirizzamento NAT (REDIRECT), TPROXY mantiene l'indirizzo originale del destinatario, il che è fondamentale per il corretto funzionamento del client proxy: esso "vede" esattamente a cosa sta cercando di connettersi il dispositivo nella rete.
A cosa serve questo nella pratica? Immagina di avere un ufficio o un laboratorio domestico con decine di dispositivi — computer, smartphone, dispositivi IoT, macchine virtuali di test. Configurare manualmente il proxy su ognuno di essi richiede ore di lavoro e rappresenta un costante mal di testa ogni volta che si cambia server proxy. Un proxy trasparente sul router risolve il problema in modo centralizzato: tutto il traffico della rete passa automaticamente attraverso il proxy, e i dispositivi non se ne accorgono nemmeno.
Scenari tipici di utilizzo di TPROXY su OpenWrt:
- Instradamento di tutto il traffico attraverso proxy residenziali o mobili per bypassare le geo-restrizioni
- Monitoraggio e filtraggio centralizzati del traffico in una rete aziendale
- Test di applicazioni tramite proxy da diverse regioni senza modificare le impostazioni sui client
- Sostituzione automatica dell'IP per tutti i dispositivi connessi al router
- Lavorare con browser anti-detect (Dolphin Anty, AdsPower, GoLogin) attraverso un unico gateway
Il principale vantaggio di TPROXY rispetto al normale REDIRECT: supporto UDP. Questo è importante per i protocolli moderni (QUIC, DNS su UDP, traffico di gioco), che REDIRECT non è in grado di gestire correttamente.
Come funziona un proxy trasparente in OpenWrt
Lo schema di funzionamento di TPROXY su OpenWrt è il seguente:
- Un dispositivo nella rete invia un pacchetto a un indirizzo IP esterno (ad esempio,
93.184.216.34:443). - Il router intercetta il pacchetto con la regola
iptables TPROXYgià nella catena PREROUTING — prima di prendere una decisione di instradamento. - Il pacchetto viene contrassegnato con un fwmark speciale e reindirizzato a un socket locale del client proxy (ad esempio, sulla porta 7893).
- Il client proxy (redsocks, Xray, sing-box) "vede" l'indirizzo originale di destinazione attraverso il meccanismo
IP_TRANSPARENTe stabilisce una connessione attraverso il server proxy remoto. - La risposta viene restituita al dispositivo — in modo trasparente, senza alcuna modifica da parte del client.
💡 Punto importante
TPROXY funziona solo nella catena PREROUTING della tabella mangle. Questo significa che viene intercettato solo il traffico di transito (da dispositivi della rete), ma non il traffico del router stesso. Per intercettare il traffico del router sarà necessaria una configurazione aggiuntiva tramite OUTPUT e instradamento tramite loopback.
Requisiti: router, firmware, pacchetti
Prima di iniziare la configurazione, assicurati che la tua configurazione soddisfi i requisiti minimi.
Requisiti per il router
| Parametro | Minimo | Raccomandato |
|---|---|---|
| RAM | 64 MB | 256 MB o più |
| Flash / Storage | 16 MB | 128 MB o più |
| Architettura CPU | MIPS, ARM | ARM Cortex-A7/A53 e superiori |
| Versione OpenWrt | 21.02 | 23.05 o snapshot |
| Kernel Linux | 5.4 con TPROXY | 5.15 / 6.1 |
Modelli ben collaudati per questo compito: GL.iNet GL-MT6000 (Flint 2), Xiaomi AX3000T, Banana Pi BPi-R3, Raspberry Pi 4 con OpenWrt, così come qualsiasi router x86 con una quantità sufficiente di RAM.
Verifica del supporto TPROXY nel kernel
Connettiti al router via SSH ed esegui:
zcat /proc/config.gz | grep TPROXY
Dovresti vedere la riga CONFIG_NETFILTER_XT_TARGET_TPROXY=y o =m. Se l'output è vuoto, il kernel non supporta TPROXY e sarà necessaria una ricompilazione o un cambio di firmware.
Installazione dei pacchetti necessari
Per far funzionare TPROXY su OpenWrt saranno necessari alcuni pacchetti. Connettiti via SSH e aggiorna l'elenco dei pacchetti:
opkg update
Installa i componenti necessari:
# Modulo del kernel per TPROXY
opkg install kmod-nft-tproxy
# Se utilizzi iptables (stack vecchio)
opkg install iptables-mod-tproxy
# Utilità ip rule / ip route
opkg install ip-full
# Aggiuntivo per lavorare con fwmark
opkg install kmod-ipt-tproxy
A seconda del client proxy scelto, installa uno dei seguenti pacchetti:
| Client proxy | Pacchetto OpenWrt | Supporto TPROXY |
|---|---|---|
| redsocks | redsocks |
TCP (UDP tramite redsocks2) |
| Xray-core | xray-core |
TCP + UDP (nativo) |
| sing-box | sing-box |
TCP + UDP (nativo) |
| mihomo (Clash Meta) | mihomo |
TCP + UDP (nativo) |
Per la maggior parte dei compiti, raccomandiamo sing-box o mihomo — supportano TPROXY in modo nativo, inclusi UDP, e hanno un formato di configurazione conveniente.
Configurazione delle regole iptables e ip rule
Questo è un passaggio chiave. Dobbiamo fare tre cose: contrassegnare i pacchetti necessari con fwmark, configurare una tabella di instradamento speciale e aggiungere una regola TPROXY in iptables.
Passo 1: Creiamo la tabella di instradamento
# Aggiungiamo un percorso speciale: i pacchetti contrassegnati vanno su loopback
ip rule add fwmark 1 table 100
ip route add local default dev lo table 100
Questo dice al kernel: "tutti i pacchetti con il contrassegno fwmark=1 considera locali e consegna su loopback". In questo modo il client proxy avrà la possibilità di riceverli attraverso il proprio socket.
Passo 2: Regole iptables (mangle/PREROUTING)
# Creiamo una catena per TPROXY
iptables -t mangle -N TPROXY_RULES
# Escludiamo gli indirizzi locali (non li proxy)
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
# Reindirizziamo TCP sulla porta del client proxy (7893)
iptables -t mangle -A TPROXY_RULES -p tcp \
-j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1
# Reindirizziamo UDP sulla porta del client proxy (7893)
iptables -t mangle -A TPROXY_RULES -p udp \
-j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1
# Applichiamo la catena al traffico di transito
iptables -t mangle -A PREROUTING -j TPROXY_RULES
📌 Porta 7893
La porta 7893 è la porta sulla quale il client proxy (sing-box, mihomo, Xray) ascolta in modalità tproxy. Assicurati che corrisponda alle impostazioni del tuo client.
Passo 3: Salvataggio delle regole al riavvio
Crea uno script di avvio automatico in /etc/init.d/tproxy o aggiungi i comandi in /etc/rc.local. Per OpenWrt 23.05 con nftables invece di iptables, utilizza regole simili nella sintassi 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
Configurazione del client proxy: redsocks, Xray, sing-box
Il client proxy sul router è un programma che riceve il traffico intercettato e lo invia attraverso un server proxy remoto. Esaminiamo la configurazione per le opzioni più popolari.
Opzione 1: redsocks (semplice, solo TCP)
Adatto per compiti di base con un proxy SOCKS5. Il file di configurazione /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;
// Indirizzo del tuo proxy SOCKS5
ip = 185.220.101.50;
port = 1080;
type = socks5;
// Se il proxy richiede autenticazione:
login = "your_login";
password = "your_password";
}
Opzione 2: sing-box (raccomandato — TCP + UDP)
sing-box supporta TPROXY in modo nativo e funziona con la maggior parte dei tipi di proxy: SOCKS5, HTTP, Shadowsocks, VLESS, Trojan. Ecco un esempio di configurazione /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"
}
}
Avvia sing-box e aggiungilo all'avvio automatico:
/etc/init.d/sing-box enable
/etc/init.d/sing-box start
Opzione 3: mihomo / Clash Meta
mihomo è un fork di Clash con funzionalità avanzate. Nella sezione tproxy-port specifica la porta per l'intercettazione:
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
Protezione dalle perdite DNS
Un proxy trasparente senza una corretta configurazione DNS rappresenta una seria vulnerabilità. Se le richieste DNS vengono inviate direttamente tramite il provider, e non tramite il proxy, la posizione reale viene rivelata, nonostante la sostituzione dell'IP. Questo è critico per compiti in cui l'anonimato o la sostituzione geografica sono importanti.
Metodo 1: Intercettazione DNS tramite TPROXY
Aggiungi una regola per intercettare il traffico UDP sulla porta 53:
# Intercettiamo le richieste DNS dai dispositivi della rete
iptables -t mangle -A TPROXY_RULES -p udp --dport 53 \
-j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1
Metodo 2: DNS tramite sing-box / mihomo
sing-box e mihomo possono gestire autonomamente le richieste DNS e inviarle tramite il proxy. Nella configurazione di sing-box, aggiungi la sezione 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
}
Metodo 3: dnsmasq con upstream tramite proxy
Se non utilizzi sing-box/mihomo, configura dnsmasq (il server DNS standard di OpenWrt) in modo che inoltri le richieste a un server DNS crittografato. Nel file /etc/dnsmasq.conf:
# Disabilitiamo l'uso del DNS del provider
no-resolv
# Utilizziamo DoH/DoT tramite un resolver locale
server=127.0.0.1#5335
# Impediamo ai dispositivi di utilizzare DNS esterni direttamente
# (regola iptables per bloccare richieste DNS dirette)
# iptables -t nat -A PREROUTING -p udp --dport 53 ! -d 192.168.1.1 -j DNAT --to 192.168.1.1
Verifica e debug
Dopo la configurazione, assicurati di controllare il corretto funzionamento del proxy trasparente. Ecco un elenco di controllo passo-passo.
Passo 1: Verifica delle regole iptables
# Controlliamo la catena TPROXY_RULES
iptables -t mangle -L TPROXY_RULES -v -n
# Verifichiamo la tabella di instradamento 100
ip rule show
ip route show table 100
Passo 2: Verifica che il client proxy ascolti sulla porta
ss -tlnp | grep 7893
# oppure
netstat -tlnp | grep 7893
Dovresti vedere il processo sing-box, mihomo o redsocks che ascolta su 127.0.0.1:7893.
Passo 3: Verifica l'IP dal dispositivo client
Connettiti al router da qualsiasi dispositivo nella rete e apri nel browser ifconfig.me o 2ip.ru. L'IP visualizzato dovrebbe corrispondere all'IP del tuo server proxy, e non all'IP reale del provider.
Passo 4: Verifica delle perdite DNS
Vai su dnsleaktest.com e esegui un test avanzato. I server DNS nei risultati dovrebbero appartenere al tuo provider proxy o al server DoH scelto, ma non al tuo provider internet.
Problemi comuni e le loro soluzioni
| Sintomo | Causa | Soluzione |
|---|---|---|
| Internet non funziona affatto | Client proxy non avviato | Controlla lo stato del servizio, i log del client |
| IP non cambia | Le regole iptables non sono state applicate | Controlla iptables -t mangle -L -v |
| UDP non funziona | redsocks non supporta UDP | Passa a sing-box o mihomo |
| Ciclo di instradamento | Il traffico del client proxy viene anch'esso intercettato | Escludi UID o cgroup del client proxy dalle regole |
| Errore TPROXY target | Modulo del kernel non caricato | modprobe xt_TPROXY |
Quale tipo di proxy è adatto per TPROXY su OpenWrt
La scelta del tipo di proxy influisce criticamente sul risultato. Non tutte le opzioni sono adatte per un proxy trasparente sul router — è importante considerare il protocollo, la stabilità della connessione e il compito.
Proxy SOCKS5
L'opzione più universale per TPROXY. Supporta TCP e UDP (quando si utilizza sing-box/mihomo). Adatta per la maggior parte dei compiti: bypass delle geo-restrizioni, sostituzione dell'IP per l'intera rete, lavoro con marketplace. I proxy dei data center in formato SOCKS5 garantiscono alta velocità e stabilità — la scelta ottimale se la priorità è la velocità, non la mascheratura come un utente reale.
Proxy residenziali
I proxy residenziali utilizzano indirizzi IP di veri utenti domestici. Quando si instrada tramite TPROXY sul router, ciò significa che tutto il traffico della tua rete apparirà come traffico di un normale utente internet domestico del paese desiderato. Ideale per:
- Monitoraggio dei prezzi su marketplace esteri (Amazon, eBay, Zalando)
- Test di annunci pubblicitari da diverse regioni
- Lavoro con piattaforme che bloccano attivamente gli IP dei data center
- Compiti in cui è richiesta la massima mascheratura come un utente reale
Proxy mobili
I proxy mobili operano tramite gli IP degli operatori di telefonia mobile (4G/5G). Hanno il più alto livello di fiducia da parte delle piattaforme — Facebook, Instagram, TikTok bloccano raramente gli IP mobili, poiché dietro un indirizzo possono esserci migliaia di utenti reali. Utilizzando tramite TPROXY sul router, tutto il traffico della tua rete ottiene un IP mobile, il che è critico per:
- Arbitraggio del traffico tramite Facebook Ads e TikTok Ads
- Creazione di account sui social media
- Lavoro con browser anti-detect (Dolphin Anty, AdsPower, GoLogin) attraverso un unico gateway
| Tipo di proxy | Velocità | Fiducia delle piattaforme | Miglior scenario |
|---|---|---|---|
| Data center | ⚡ Alta | ★★☆☆☆ | Parsing, monitoraggio dei prezzi |
| Residenziali | ⚡⚡ Media | ★★★★☆ | Geo-testing, e-commerce |
| Mobili | ⚡ Media | ★★★★★ | Social media, arbitraggio del traffico |
Conclusione
Un proxy trasparente tramite TPROXY su OpenWrt è uno strumento potente per la gestione centralizzata del traffico dell'intera rete. I principali vantaggi di questo approccio: non è necessario configurare il proxy su ogni dispositivo separatamente, supporta sia il traffico TCP che UDP, e la configurazione è flessibile e scalabile per qualsiasi compito — dall'uso domestico all'infrastruttura aziendale.
I passaggi chiave che abbiamo esaminato: verifica del supporto TPROXY nel kernel di OpenWrt, installazione dei pacchetti necessari, configurazione delle regole iptables/nftables con il corretto fwmark, configurazione del client proxy (redsocks, sing-box o mihomo) e protezione dalle perdite DNS. Ognuno di questi passaggi è importante — saltarne uno porterà a un funzionamento errato o a perdite dell'IP reale.
Se il tuo obiettivo è instradare tramite proxy il traffico dell'intera rete con il massimo livello di fiducia da parte delle piattaforme (Facebook, Instagram, TikTok, marketplace esteri), ti raccomandiamo di utilizzare proxy residenziali — forniscono veri IP domestici dal paese desiderato e un rischio minimo di blocchi quando si lavora tramite un proxy trasparente sul router.
```