Ciao,
premetto che ho riletto più volte il post, ma non mi è tutto chiaro.
Con il passaggio all'italiano, le mie spiegazioni rimangono scarse

Se mi dici quali punti in particolare, ci riprovo.
In pratica, ho uno skecth che riesce a spedire ma non a ricevere quando lo shield e' collegato ad un router adsl mentre riesce a spedire e ricevere quando e' collegato ad un pc che fa da router oppure e' collegato direttamente alla rete con un IP non NAT.
Poi:
- gli ip che hai detto di utilizzare, fanno parte della tua rete?
Si, i vari 192.168.0.X sono quelli della rete NAT-ata dietro il router ADSL. Quello pubblico e' un IP della rete aziendale.
- utilizzi la Eth shield con ip statico o in dhcp (che ide usi)?
Statico. Per l'ide, intendi quello dell'arduino? E' il 022.
- se statico, definisci nello sketch il gateway?
Provato senza e con (gateway 192.168.0.1 - mask 255.255.255.0)
- domanda banale ma d'obbligo: alimentazione e cavi di rete sono OK?
Si, sono gli stessi cavi che uso quando non lo collego al router ADSL.
Se posti lo sketch magari possiamo capire qualcosina di più.
Scusate. Eccolo. Lo ho semplificato mettendo le parti incriminate. Dietro un router ADSL non arriva mai a Serial.print(c);
#include <SPI.h>
#include <Ethernet.h>
#include <Client.h>
byte mac[6] = { 0x90, 0xA2, 0xDA, 0x00, 0x36, 0x01 };
byte ip[4] = { 192, 168, 0, 4 };
const char url[]="/terms";
byte server[4] = { 156, 148, 18, 164 };
Client client(server, 80);
int i;
char c;
void setup() {
for(i = 2; i < 10; i++){
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
for(i = 14; i < 20; i++){
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
Serial.begin(9600);
Ethernet.begin(mac, ip);
delay(1000);
}
void loop() {
if (client.connect()) {
client.print("GET ");
client.print(url);
client.println(" HTTP/1.1");
client.println();
Serial.println(" ");
Serial.println("reading ...");
while (client.available()){
c = client.read();
Serial.print(c);
}
}
client.stop();
delay(1000);
Ethernet.begin(mac, ip);
}