Netcat no puede vincular un socket de escucha

Netcat no puede vincular un socket de escucha

En mi computadora con Ubuntu 14.04 puedo hacer cosas como esta:

$ nc -l 5349 -vvv
Listening on [0.0.0.0] (family 0, port 5349)

o esto:

$ nc -vvv -l 192.168.254.96 5349
Listening on [192.168.254.96] (family 0, port 5349)

Y se abre un socket para escuchar ingresar conexiones en mi dirección IP local (192.168.254.96). Y obviamente puedo conectarme desde el otro lado y transmitir datos.

Pero en un servidor detrás de NAT con Debian 8.0 Jessie recibí este extraño error:

$ nc -vvv -l 5349
5349: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 38541 ... : Protocol not available

o:

$ nc -vvv -l 10.1.6.189 5349
10.1.6.189: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 52606 ... : Protocol not available

El puerto no está en uso:

$ ss -tnl | grep 5349
(empty)

y es la dirección IP correcta:

$ ip addr list
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 1e:89:93:f1:96:a4 brd ff:ff:ff:ff:ff:ff
    inet 10.1.6.189/19 brd 10.1.31.255 scope global eth0
    inet6 fe80::1c89:93ff:fef1:96a4/64 scope link 
       valid_lft forever preferred_lft forever

¿Cual podría ser el problema? ¿Podría haber algo relacionado con la NAT detrás del servidor?

Respuesta1

Para netcat en modo de escucha, debe usar -pla bandera para elegir el puerto de escucha, por ejemplo nc -vvv -l -p 5349.

el segundo error: nnetfd reuseport failed : Protocol not available está relacionado con la opción de socket SO_REUSEPORT. Se introdujo en la versión 3.9 del kernel de Linux y la versión netcat que lo utiliza no funcionará con una versión anterior del kernel. Puede actualizar su kernel a una versión más reciente o utilizar otra variación de netcat. Creo que netcat-openbsd debería funcionar.

información relacionada