[TIP] ddclient detrás de un router que hace NAT.

Esto me tomó alrededor de 20 minutos de Google, prueba, error, head y tail. A modo de nota mental para no tener que googlearlo de nuevo la próxima vez, y para ayudar al pobre infeliz que se encuentre en la misma que yo, va este mini-tutorial, para mí y para toda la posteridad que quiera habitar esta tierra de nadie:

Como hacer que ddclient actualice el número de IP de DynDNS cuando está detrás de un router que hace NAT.

 

DynDNS ya no es lo que era, hoy en día es una porquería –nunca fué la gran cosa tampoco– y tenés que pagar para tener un servicio mas o menos decente. Aún así, gracias a que prácticamente cualquier dispositivo que conecte la WAN con la LAN entiende el protocolo para actualizarlo, DynDNS sigue siendo –mal que nos pese a todos– líder indiscutido.

Todo va bien siempre y cuando tengas el control de lo que sea que hace de router en tu red pero cuando el dispositivo en cuestión hace NAT y no tenés los datos de login, cagaste, no te queda otra que poner algún programita que actualice DynDNS cuando cambie tu número de IP WAN.

"dpkg-reconfigure ddclient" - Configurando ddclient en Debian (Y supongo que Ubuntus y derivados).

«dpkg-reconfigure ddclient» – Configurando ddclient en Debian (Y supongo que Ubuntus y derivados).

Si lo que tenés del otro lado del router que hace NAT es un Linux, no conozco muchas alternativas:

Si tengo que recomendar un proveedor de DNS estáticos para números de IP dinámicos, y habiendo probado tanto DynDNS como Zoneedit, me quedo por lejos con Afraid.org, servicio que podés actualizar fácilmente con un cron que tire un wget o curl contra una URL específica y que después de muchos años solo puedo resumir en una palabra: im-pe-ca-ble.

Si por otro lado, estás atado a DynDNS por que ni entendés ni te interesa entender como funciona nada y solamente necesitás que las cosas funcionen, entonces puede que te encuentres con la siguiente situación:

Ddclient te actualiza correctamente el DNS record pero en lugar de apuntarlo a tu número de IP público, lo apuntó al número de IP interno que le asignó el router a tu interface LAN.

¿Cómo se arregla?

El archivo que controla toda la cuestión es /etc/ddclient/ddclient.conf en donde podés configurar muchos de los aspectos y comportamientos del programa. Para que use tu número de IP público en lugar del que le corresponda a ethX que tengas conectado del lado LAN de tu router, tenés que editar una única línea:

 

use=web, web=dyndns

 

¿Podría haber sido mas simple?

El programa ya va por la versión 3.8.1.-r4 y al día de hoy se sigue desarrollando por lo que es lo suficientemente inteligente como para entender con esa sola línea que lo que querés es tomar el número de IP que te devuelve un «curl checkip.dyndns.org», parsear todo el string y usarlo para actualizar DynDNS.

Cualquier otro método que veas por ahí (y que los hay y varios) no es mas que la versión complicada de exactamente esto mismo.

Por último, como ví que el archivo de configuración que se provee con Gentoo está muy bien documentado e incluye un sinnúmero de opciones que ni sabía que existían, –¿Sabías que ddclient te puede mandar el número de IP por mail?-, copio y pego a continuación, para el que no tenga acceso a un Gentoo y tenga ganas de seguir leyendo:

 

######################################################################
##
## $Id: sample-etc_ddclient.conf 125 2011-05-19 20:31:20Z wimpunk $
##
## Define default global variables with lines like:
## var=value [, var=value]*
## These values will be used for each following host unless overridden
## with a local variable definition.
##
## Define local variables for one or more hosts with:
## var=value [, var=value]* host.and.domain[,host2.and.domain…]
##
## Lines can be continued on the following line by ending the line
## with a \
##
##
## Warning: not all supported routers or dynamic DNS services
## are mentioned here.
##
######################################################################
daemon=300 # check every 300 seconds
syslog=yes # log update msgs to syslog
mail=root # mail all msgs to root
mail-failure=root # mail failed update msgs to root
ssl=yes # use ssl-support. Works with
# ssl-library
# postscript=script # run script after updating. The
# new IP is added as argument.
#
#use=watchguard-soho, fw=192.168.111.1:80 # via Watchguard’s SOHO FW
#use=netopia-r910, fw=192.168.111.1:80 # via Netopia R910 FW
#use=smc-barricade, fw=192.168.123.254:80 # via SMC’s Barricade FW
#use=netgear-rt3xx, fw=192.168.0.1:80 # via Netgear’s internet FW
#use=linksys, fw=192.168.1.1:80 # via Linksys’s internet FW
#use=maxgate-ugate3x00, fw=192.168.0.1:80 # via MaxGate’s UGATE-3×00 FW
#use=elsa-lancom-dsl10, fw=10.0.0.254:80 # via ELSA LanCom DSL/10 DSL Router
#use=elsa-lancom-dsl10-ch01, fw=10.0.0.254:80 # via ELSA LanCom DSL/10 DSL Router
#use=elsa-lancom-dsl10-ch02, fw=10.0.0.254:80 # via ELSA LanCom DSL/10 DSL Router
#use=alcatel-stp, fw=10.0.0.138:80 # via Alcatel Speed Touch Pro
#use=xsense-aero, fw=192.168.1.1:80 # via Xsense Aero Router
#use=allnet-1298, fw=192.168.1.1:80 # via AllNet 1298 DSL Router
#use=3com-oc-remote812, fw=192.168.0.254:80 # via 3com OfficeConnect Remote 812

#use=e-tech, fw=192.168.1.1:80 # via E-tech Router
#use=cayman-3220h, fw=192.168.0.1:1080 # via Cayman 3220-H DSL Router
#
#fw-login=admin, fw-password=XXXXXX # FW login and password
#
## To obtain an IP address from FW status page (using fw-login, fw-password)
#use=fw, fw=192.168.1.254/status.htm, fw-skip=’IP Address’ # found after IP Address
#
## To obtain an IP address from Web status page (using the proxy if defined)
## by default, checkip.dyndns.org is used if you use the dyndns protocol.
## Using use=web is enough to get it working.
## WARNING: set deamon at least to 600 seconds if you use checkip or you could
## get banned from their service.
#use=web, web=checkip.dyndns.org/, web-skip=’IP Address’ # found after IP Address
#
#use=ip, ip=127.0.0.1 # via static IP’s
#use=if, if=eth0 # via interfaces
#use=web # via web
#
#protocol=dyndns2 # default protocol
#proxy=fasthttp.sympatico.ca:80 # default proxy
#server=members.dyndns.org # default server

#server=members.dyndns.org:8245 # default server (bypassing proxies)

#login=your-login # default login
#password=test # default password
#mx=mx.for.your.host # default MX
#backupmx=yes|no # host is primary MX?
#wildcard=yes|no # add wildcard CNAME?

##
## dyndns.org dynamic addresses
##
## (supports variables: wildcard,mx,backupmx)
##
# server=members.dyndns.org, \
# protocol=dyndns2 \
# your-dynamic-host.dyndns.org

##
## dyndns.org static addresses
##
## (supports variables: wildcard,mx,backupmx)
##

# static=yes, \
# server=members.dyndns.org, \
# protocol=dyndns2 \
# your-static-host.dyndns.org

##
##
## dyndns.org custom addresses
##
## (supports variables: wildcard,mx,backupmx)
##
# custom=yes, \
# server=members.dyndns.org, \
# protocol=dyndns2 \
# your-domain.top-level,your-other-domain.top-level

##
## ZoneEdit (zoneedit.com)
##
# server=dynamic.zoneedit.com, \
# protocol=zoneedit1, \
# login=your-zoneedit-login, \

# password=your-zoneedit-password \
# your.any.domain,your-2nd.any.dom

##
## EasyDNS (easydns.com)
##
# server=members.easydns.com, \
# protocol=easydns, \
# login=your-easydns-login, \
# password=your-easydns-password \
# your.any.domain,your-2nd.any.domain

##
## Hammernode (hn.org) dynamic addresses
##
# server=dup.hn.org, \
# protocol=hammernode1, \
# login=your-hn-login, \
# password=your-hn-password \
# your-hn-host.hn.org,your-2nd-hn-host.hn.org

##

## dslreports.com dynamic-host monitoring
##
# server=members.dslreports.com \
# protocol=dslreports1, \
# login=dslreports-login, \
# password=dslreports-password \
# dslreports-unique-id

##
## OrgDNS.org account-configuration
##
# use=web, web=members.orgdns.org/nic/ip
# server=www.orgdns.org \
# protocol=dyndns2 \
# login=yourLoginName \
# password=yourPassword \
# yourSubdomain.orgdns.org

##
## dnspark.com
## (supports variables: mx, mxpri)
##

# use=web, web=ipdetect.dnspark.com, web-skip=’Current Address:’
# protocol=dnspark, \
# server=www.dnspark.com, \
# your-host.dnspark.com

##
## NameCheap (namecheap.com)
##
# protocol=namecheap, \
# server=dynamicdns.park-your-domain.com, \
# login=my-namecheap.com-login, \
# password=my-namecheap.com-password \
# myhost.namecheap.com

##
##
## Loopia (loopia.se)
##
# use=web
# web=loopia
# protocol=dyndns2
# server=dns.loopia.se

 

# script=/XDynDNSServer/XDynDNS.php
# login=my-loopia.se-login
# password=my-loopia.se-password
# my.domain.tld,other.domain.tld

##
## DtDNS (www.dtdns.com)
##
# protocol=dtdns,
# server=www.dtdns.com,
# client=ddclient,
# password=my-dtdns.com-password
# myhost.dtdns.net, otherhost.dtdns.net

2 comentarios

Responder a Agustín Dall'Alba Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *