IP Binding

The service seems to not bind to the external interface address.

port 10933 can be opened via localhost 127.0.0.1 but when you try to open to the external ip of 81.x.x.x which is the ip of the servers Nic it will not open. All firewall ports are open

Hi Mark,

Thanks for getting in touch.

The Tentacle service explicitly binds to all IP addresses on the machine: IPAddress.Any. So it’s strange for it not to work for the external IP address.

Could you send a screenshot of the network adapter TCP/IP properties? I think under Advanced there is a tab where multiple IP addresses are listed when the NIC has multiple addresses. Could you show me how that is configured?

Paul

I am experiencing the same issue; on a machine with multiple network adapters configured for different subnets, only 1 of those is being listened on.

I can verify this by browsing from the same machine to;
https://localhost:10993 ==> can see page
https://1.2.3.4:10993 ==> can see page
https://1.2.5.6:10993 ==> cannot see page

The tentacle service is not listening on 1.2.5.6:10993.
Running netstat shows that the service is bound to 0.0.0.0:10993

I am not sure that binding to IPAddress.Any has the outcome you expect when the interfaces exist on different network adapters. The documentation for Sockets is contradictory, and not always clear. It may depend on how the sockets are being established. Per this MSDN link: https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.bind(v=vs.110).aspx
"… If you do not care which local address is assigned, you can create an IPEndPoint using IPAddress.Any as the address parameter, and the underlying service provider will assign the most appropriate network address."

Anyway; to workaround this problem, how can we configure a tentacle to listen on an explicit IP address?

Hi RJ,

As you said, we listen on Any by default. MSDN is certainly contradictory - here’s what is says about IPAddress.Any:

https://msdn.microsoft.com/en-us/library/system.net.ipaddress.any(v=vs.110).aspx

The Socket.Bind method uses the Any field to indicate that a Socket instance must listen for client activity on all network interfaces.

The way those addresses are assigned could be important - if you go to the TCP/IP v4 settings on the adapter, and go to advanced, there’s usually a tab that lists the IP addresses the machine listens on. Is it possible that 1.2.5.6 isn’t explicitly listed?

In the latest Tentacle, you can use:

Tentacle.exe configure --listenIpAddress 1.2.5.6

To bind to a specific address, however you can only specify one address, so it might break the others.

Paul

Hi Paul,

Thanks for the response.

In our case, there are actually multiple network adapters present. Each one is assigned a different IP address, and all are listening. I have retested the scenario and confirmed that on the host itself, I can see the tentacle landing page if I explicitly browse to HTTPS://host:port on each of the configured interfaces. Previously, I had only tried to host:port (protocol unspecified) and only one of the interfaces redirected to the HTTPS page, so I misinterpreted that to be non-listening on that address.

I am still unable to connect to the tentacle as a listener, although it appears to work fine when connecting back to the server in polling mode.

Firewalls are disabled on both hosts, and other connectivity seems OK. There’s probably some corporate networking magic interfering but I can’t guess what that may be, so for now I’ll have to settle for polling I think.

Cheers,
RJ