In RouterOS, il Connection Tracking è indispensabile per far funzionare il NAT. Senza questa funzione ad esempio il router non è in grado di ricondurre i pacchetti che tornano in risposta a connessioni aperte da IP privati mascherati con IP pubblici.
Si attiva automaticamente quanto il router ne ha bisogno, ma da quel momento in poi, cataloga ogni singola connessione, sia quelle sotto NAT che lo richiedono, sia tutte le altre.
Il ConnTrack impiega però molte risorse. Nel caso il traffico sia puramente di routing, ad esempio se IP pubblici nella rete di un operatore aprono connessioni verso IP pubblici in Internet, queste risorse sono impiegate inutilmente.
Connection Tracking solo per gli utenti sotto NAT
Per far sì che solo le connessioni degli utenti sotto NAT vengano censite dal Connection Tracking è ovviamente necessario intervenire prima del Connection Tracking stesso...
Dove? In RAW!
La subnet sottoposta a NAT masquerade è ad esempio la 192.168.1.0/24.
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1 src-address=192.168.1.0/24
In ip/firewall/raw si può sfruttare l'azione notrack.
Creiamo un'eccezione (accept) per le connessioni provenienti dalla subnet che vogliamo inserire in Connection Tracking e mettiamo il resto in notrack.
Ma non basta!!
Il traffico in risposta alle connessioni aperte dagli IP sotto NAT ha come IP di destinazione l'IP del router con cui abbiamo mascherato gli IP privati.
Bisogna quindi che anche questo traffico sia inserito nel Connection Tracking. Possiamo sfruttare il matcher dst-address-type=local per creare un'eccezione anche per questo traffico. Mettiamo quindi in Connection Tracking tutto il traffico destinato ad IP del router.
/ip firewall raw
add action=accept chain=prerouting src-address=192.168.1.0/24
add action=accept chain=prerouting dst-address-type=local
add action=notrack chain=prerouting
La tabella di Connection Tracking si svuota!
Basta osservare la tabella di ip/firewall/connection per vedere la differenza!
Comments