Arduino ethernet shield WAN connexion problems

Hi.

I'm trying to connect to my arduino via internet.

Before making any changes to my roouter (HUAWEI B68A), I tried the webserver example to test the ethernet shield. Every thing works perfectly on local network.

After that, I tried to make it accessible from WAN and here i got some difficulties.

My router is synchronised with no-ip so my ip is "static".

After port forwarding, the arduino is no longer accessible from local network unless i add :portnumber after the ip adress.

When trying to access arduino from wlan (routerWANIPadress:portnumber) i get different different types of errors (such as: err connexion time out, or resource (ipadress) is online but does not respond to connexion request...)

I tried many things (disabled antivirus and firewall, changed port numbre or ip adress, used smartphone and pc, used arduino uno and mega...) but still no solution.

Any help is very appreciated :slight_smile:

Some details about what i did:

** the code

/*
  Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi

 */

#include <SPI.h>
#include <Ethernet.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, 44);

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

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

** Router configuration:

  • Noip synchronisation :

  • Port forwarding:

  • Network security setting:

  • Serial communication (ok):

  • Local network test (ok):

  • WAN access test (error):


When running windows network diagnosis, it says that the ressource is online but does not respond to connexion attemps.

Any idea what is wrong with what i did?

If I were to guess, it is your router firewall. Put your arduino IP address in the DMZ and see if that allows a connection.

Hi.

Thank you for your reply.

I tried DMZ activation et completely disabling the firewall but it is not working.

There is ACL window to set rules for connexion. Here i find http, https and icmp service types for lan, but only https for wan. could that be the problem?

when i use port 80, i can access the arduino web server directly from the ip adress from local network. when i use other prots, i need to add :portnumber after ip adress to access from local network, is that normal?

Some people say that such problem are related to my ISP (ooredoo) public ip management policy. i don't know if this is wright.

ty again for your advice.

i forgot to mention that i'm using a 3g connexion.

a friend of mine has just told me that i can not do portforwarding using a 3g connexion, is that true?

when i use port 80, i can access the arduino web server directly from the ip adress from local network. when i use other prots, i need to add :portnumber after ip adress to access from local network, is that normal?

Yes.

i forgot to mention that i'm using a 3g connexion.

a friend of mine has just told me that i can not do portforwarding using a 3g connexion, is that true?

That may be your problem.