Conectarse a Arduino a traves de internet

Buenas, estoy intentando acceder a mi arduino a traves de internet, tengo mi ethernet shield con su ip y tal puesta perfectamente, en local funciona, pero al meter la direccion ip publica me conecta al router de mi casa, he intentado hacer un redireccionamiento de puertos, pero sigue saliendome el router de mi casa al introducir la ip publica, tambien he intentado a poner otros puertos en el servidor web de arduino y nada. Aqui os dejo mi código, espero que me podáis ayudar, gracias y un saludo a todos.

 #include <SPI.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,6);
byte gateway[] = {192,168,1,1};
byte subnet[] = {255,255,255,0};

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(5300);
int PinLed13= 7;

String readString = String(30);
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};

void setup()
{
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  pinMode(PinLed13,OUTPUT);


}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length()<30) //leer peticion HTTP caracter por caracter
        {
          readString += c;
        }
        if (c=='\n') //Si la peticion HTTP ha finalizado
        {
          
          int encendido;
          if(readString.indexOf("altavoz=On")>0){
             tone(7, tones[0]);
             delay(800);
             encendido = 1;
          }
          if(readString.indexOf("altavoz=Off")>0){
            noTone(7);
            encendido = 0;
          }

          readString=""; //Vaciar el string que se uso para la lectura
          //Enviar cabecera HTTP estandar
    

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          //Crear pagina web HTML

          client.println("<html>");
          client.println("<head>");
          client.println("<title>Pruebas</title>");
          client.println("</head>");
          client.println("<body>");
          client.println("<h1>Centro taleguero de control domestico</h1>");
          client.println("<hr>
");
          client.println("<h3>Encendido/Apagado de cosas</h3>");
          client.println("<hr>
");
          client.println("<table>");
          client.println("<tr><td>Altavoz</td></tr>");
          client.println("<tr><td><form method=get><input type=submit name=altavoz value=On></form></td></tr>");
          client.println("<tr><td><form method=get><input type=submit name=altavoz value=Off></form></td></tr>");
          client.println("</table>");
          client.println("<hr>
");
          if(encendido == 1)
            client.println("ENCENDIDO");
          else
            client.println("APAGADO");
           client.println("</body>");
          client.println("</html>");



          client.stop();

        }
      }
    }
  }
}

http://www.jopapa.me/tutorialinternet.html

He copiado el código del enlace que has puesto, he abierto el puerto 100 para la ip de mi arduino, he testeado que tengo el puerto abierto con Open Port Checker & Scanner | Test Port Forwarding | Internet Protocol Tools , efectivamente lo tengo abierto, además cuando realizo la consulta en la web ipfingerprints para saber si tengo el puerto abierto o no, empiezan a parpadear los led de la ethernet shield de mi arduino.
También he visto que cuando intento acceder a mi arduino a traves de mi ip publica y puerto, tambien parpadean los leds.

Y ya funciona?
Pregunto porque si no tal vez hay que configurar el modem.
A mi me paso algo parecido con el modem que tengo, pero no me dejaba conectar me al arduino.
Tube que agregar la IP del arduino al modem manualmente, en la configuración del modem, ahora mismo no recuerdo la contraseña del modem y no puedo ponerte imagenes.

Que router tienes? Por ahi pasa todo el problema

Mi router es un ZTE zxhn h108n v2.3, he buscado por todos sitios para abrir puertos con ese router, hago lo que dicen y nada, los puertos de abren, aun así no me deja acceder.

En tu Router tienes una opción que se llama PORT FORWARDING
Ahí tienes que añadir una nueva entrada y poner el puerto elegido (5300)
Lo pones tanto en External Port como en Internal Port.
En Server Ip Address pones tu IP interna del Arduino (192.168.1.6)

Y ya esta.

Para acceder puedes teclear desde fuera de tu casa o desde el móvil esto:

www.TuIpExterna:5300

Jopapa

Aca tenes como hacer port fowaring en tu router

y si no sirve usa la zona desmilitarizada DMZ (pagina 4-13) que envia todo lo recibido a la ip que configures que obviamente será la del arduino.

Se supone que así abro el puerto 100 para mi arduino, efectivamente, entro en la pagina web para decirme si lo tengo abierto y dice que si.
Hice el port forwarding y el dmz, pero nada , sigo sin poder conectarme exteriormente a mi arduino.
Gracias por las respuestas a todos.

Pero el DMZ debe permitirte que la dirección de tu arduino este atenta a todo lo que venga de Internet.
Debería funcionar.

Introduzco mi IP Pública y me direcciona a mi router, Introduzco mi IP Pública más el puerto del arduino y no encuentra la página. Osea ippublica:100, que en este caso abrí el puerto 100 para el servidor web de arduino.

y cuando lo haces en la LAN funciona perfecto no?

surbyte:
y cuando lo haces en la LAN funciona perfecto no?

Efectivamente

Mira tu bandeja de mensajes personal.

Pero en el código que pusiste le tenias asignado el puerto 5300

¿Desde qué dispositivo/red estás intentando acceder? A ver si el cerrojazo de puerto está antes de tu router.

Jopapa:
Pero en el código que pusiste le tenias asignado el puerto 5300

Lo cambie por 100, por probar otro puerto

hola,

a mi me ha pasado lo mismo. Tengo wifi de Yoigo en casa y aunque la velocidad es buena no lo consegui.

No revivas hilos viejos a menos que sean tuyos o hayas comentado en alguno cosa imposible porque es tu primer msg.
Los msg de mas de 120 dias no los responde nadie salvo los interlocutores originales.