Dopo che ho installato con successo OpenWRT 14.07, mi son accorto che l’IP che veniva passato al mio webserver, era mascherato con l’ip interno del modem.
Ho perso poco tempo all’inizio, ma non era fondamentale finché non ho consentito ad alcune persone di accedere al mio server… A quel punto l’esigenza di verificare da dove provenissero l’ip si è manifestata più invadente.
Ho verificato e ricontrollato la configurazione, ma l’ip sorgente delle connessioni al mio webserver risultavano sempre originata dall’ip interne del modem.
Ho deciso di mandare una mail alla mailing list do openwrt (openwrt-devel-request@lists.openwrt.org) per vedere se qualcun’altro avesse o avesse avuto il mio problema e come era riuscito a risolverlo.
A giudicare dalla risposta avuta, nessuno aveva il mio problema o non interessava a nessuno che l’ip fosse quello privato del modem.
In tutto ciò un tedesco (Lars Kruse che ringrazio immensamente per l’assist perfetto) mi dava un importante suggerimento: controllare con iptables (tramite iptables -t nat -L -vn) per verificare cosa ci fosse all’interno delle diverse chain.
la parte interessata era la zone_lan_postrouting e questa la sua versione standard:
Chain zone_lan_postrouting (1 references)
pkts bytes target prot opt in out source destination
0 0 postrouting_lan_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* user chain for postrouting */
0 0 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
L’anomalia è che tutto il traffico che passava per questa chain era mascherato. E secondo me non è corretto, in quanto gli ip che venivano ruotati all’interno venivano mascherati in maniera forzata.
Ho inserito all’interno del file /etc/firewall.user le righe che, secondo me, correggono il problema:
iptables -t nat -D zone_lan_postrouting -j MASQUERADE
iptables -t nat -A zone_lan_postrouting -j MASQUERADE -o pppoa-wan
la prima elimina la regola errata e la seconda maschera il solo traffico in uscita, ma non quello in entrata.
Chain zone_lan_postrouting (1 references)
pkts bytes target prot opt in out source destination
1 60 postrouting_lan_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* user chain for postrouting */
0 0 MASQUERADE all -- * pppoa-wan 0.0.0.0/0 0.0.0.0/0
PS okkio : chmod +x /etc/firewall.user 🙂
Addendum:
dopo uno scambio di mail con Jow (il manteiner di firewall3, il soft che produce le regole che poi vengono passate ad iptables) ho eliminato il masq sulla zone lan->wan ed ha funzionato perfettamente il tutto.. senza addendum di script.
Jow mi ha detto che :
"Keep in mind that masq on a zone essentially masquerades all /outgoing/
traffic on that zone, so if you masq on lan then OpenWrt will set its
own lan ip in all traffic sent to lan hosts, this is almost never what
you want."
ed ora mi sono spiegato tutto..
La potenza dell’open source !!