Problemi configurazione router con ethernet shield

Ciao a tutti, spero di aver postato nella giusta sezione e premetto di essere inesperto in materia, detto ciò descrivo i miei problemi sperando di riuscire a risolverli.
Ho da poco acquistato Arduino uno R3 e una ethernet shield con l'intento di fare un programmino che facesse accendere e spegnere uno o più led da remoto.
Il problema è che non riesco ad accedere alla pagina del programma da dispositivi che non sono collegati sullo stesso router a cui è collegato arduino, per ovviare a questo problema mi è stato detto di creare un ddns, visto che il mio è un router dlink 2750b mi sono registrato al sito dlinkddns e ho creato il mio host.
scrivendo nella barra degli indirizzi il dns accedo alla schermata di configurazione del router e anche questo solo in locale.
Ora vi chiedo quali sono le configurazioni che mi permettono di vedere la pagina dell'host anche da connessioni esterne e poi associarlo all'indirizzo del web server di arduino?

questo è il programma:

#include <String.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 3 }; // indirizzo IP del server
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port

int ledPin = 2; // LED pin
String readString; //string
boolean LEDON = false; //LED status flag

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop(){
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c); //store characters to string
//if HTTP request has ended
if (c == '\n' && currentLineIsBlank) {
Serial.print(readString);
if(readString.indexOf("L=1") > 0) {//lets check if LED should be lighted
//led has to be turned ON
digitalWrite(ledPin, HIGH); // set the LED on
LEDON = true;
}else{
//led has to be turned OFF
digitalWrite(ledPin, LOW); // set the LED OFF
LEDON = false;
}
// now output HTML data starting with standart header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("ARDUINO Controllo Led via WEB");
//send first heading
client.println("

Controllo tramite arduino di un diodo led

");
client.println("
");
client.println("

Controllo led

");
//printing LED status
client.print("Stato del led: ");
if (LEDON) {
client.println("ON");
}
else
{
client.println("OFF");
}
client.print("

ACCENDI | SPEGNI

");
client.println("");
readString="";
client.stop();

} //if c == /n
} // if client available
} // while client connesso
} // if client
} //loop

Grazie in anticipo

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Il codice deve essere racchiuso nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti alcune parti del codice vengono interpretate come attributi del testo e quindi non visualizzate.

Fazza_16:
scrivendo nella barra degli indirizzi il dns accedo alla schermata di configurazione del router e anche questo solo in locale.
Ora vi chiedo quali sono le configurazioni che mi permettono di vedere la pagina dell'host anche da connessioni esterne e poi associarlo all'indirizzo del web server di arduino?

Non sono esperto in questo campo ma credo che il tuo sketch vada bene.
Quello che devi configurare è il router, per permettere dall'esterno di "vedere" Arduino.
Però ogni router ha i suoi menu. Non sono tutti uguali.
Qui il link della dlink che spiega come fare. E credo che indichi anche sui router d-link in quali menu andare.

Dall'esterno della tua rete (fuori da quel router) dovrai usare l'hostname che hai creato per vedere il router e quindi Arduino.
Da dentro la rete non puoi usare quell'hostname. Da dentro la tua rete usi l'IP di Arduino 192.168.1.3
Credo però dovrai anche dire al router che il servizio porta 80 deve essere dirottato dal router verso Arduino ovvero 192.168.1.3 che nei menu dei router di solito si chiama NAT o DMZ.

nid69ita:
Credo però dovrai anche dire al router che il servizio porta 80 deve essere dirottato dal router verso Arduino ovvero 192.168.1.3 che nei menu dei router di solito si chiama NAT o DMZ.

In realtà il termine corretto è "port-forwarding" ... e dici al Router che ciò che arriva su una certa porta va reinoltrato nella tua rete privata verso una certa macchina (IP) e su una data porta :wink:

Guglielmo

gpb01:

nid69ita:
Credo però dovrai anche dire al router che il servizio porta 80 deve essere dirottato dal router verso Arduino ovvero 192.168.1.3 che nei menu dei router di solito si chiama NAT o DMZ.

In realtà il termine corretto è "port-forwarding" ... e dici al Router che ciò che arriva su una certa porta va reinoltrato nella tua rete privata verso una certa macchina (IP) e su una data porta :wink:
Guglielmo

Vero. @Guglielmo sai che vogliono dire quelle sigle? Spesso sui router il menu dove configuri il port-fowarding è indicato come DMZ o NAT che sinceramente non trovo neppure su internet il significato. :

EDIT: ora l'ho trovato !!! :blush:
NAT=Network Address Translation
DMZ=demilitarized zone :fearful:

La DMZ ... di solito ti serve per creare una rete per gli "Ospiti" che ti vengono a trovare ...
... gli dai accesso ad Internet, ma non alla tua LAN :wink:

Guglielmo

Grazie a tutti per le risposte, sono riuscito a collegarmi alla pagina dall'esterno ma la connessione non è duratura, inoltre con questo sketch se accedo da pc (tramite indirizzo del webserver) il led si accende ma poi si spegne subito, mentre da cellulare funziona regolarmente, idee?