Cambia el hostname y configura ipv6 en un VPS de OVH

En este artículo veremos cómo realizar la configuración inicial de un servidor virtual VPS con un Ubuntu 16.04 contratado con OVH. Esta configuración inicial consiste en el cambio del hostname y la dirección ipv6 que se nos proporciona con el servicio.

No tengo ningún tipo de vínculo con OVH más allá de que a fecha de este artículo tengo mi blog alojado en este proveedor.

1. Antes de empezar

Los datos de direccionamiento, hostname, etc que aquí se muestran son los datos que corresponden a mi servidor. Los dejo para que sirvan de ejemplo, pero deberás sustituirlos por los tuyos.

1.1. Accece a tu panel

Deberemos en primer lugar anotar los datos que se nos ha proporcionado para nuestro servidor virtual, accediendo para ello al panel OVH.

En este punto anotaremos:

  • hostname asignado

  • nombre de servicio (coincidirá con el hostname)

  • dirección ip4

  • dirección ipv6

  • puerta de acceso ipv6 (gateway)

  • registro inverso (debería coincidir con el del servicio)

A parte de la conexión por ssh, deberíamos comprobar que nos funciona correctamente el KVM. Si nos equivocamos en el proceso de configuración, siempre podremos acceder al servidor mediante este sistema.
Vamos a hacer que nuestro host cambie de nombre pero el "nombre de servicio" seguirá siendo el mismo, ya que es el nombre que utiliza OVH para identificar nuestro servidor.

1.2. Comprueba la configuración de tu servidor

Nos loguearemos en el equipo por ssh y visualizaremos la información de red del host.

Información de direccionamiento
root@vps485070:~# ifconfig
ens3      Link encap:Ethernet  HWaddr fa:16:3e:2f:e2:e3
          inet addr:54.37.157.73  Bcast:54.37.157.73  Mask:255.255.255.255
          inet6 addr: fe80::f816:3eff:fe2f:e2e3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7791 (7.7 KB)  TX bytes:9419 (9.4 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)

En mi caso, la dirección es la 57.37.157.73 y veremos que coincide con la dirección IP indicada en el panel. Pero fijémonos que nuestra máscara de red es 255.255.255.255. Además comprobamos que la dirección ipv6 asignada es de tipo local, luego por defecto no está configurada la ip que tenemos asignada.

Ahora comprobamos la tabla de rutas:

Tabla de enrutamiento
root@vps485070:~# ip route list
default via 54.37.156.1 dev ens3
54.37.156.1 dev ens3  scope link
root@vps485070:~# ip -f inet6 route list
fe80::/64 dev ens3  proto kernel  metric 256  pref medium

Vemos que para ipv6 sólo tenemos la red local y que en el enlace ipv4 la ruta por defecto es 54.37.156.1. Pero ¿cómo llegamos si nuestra máscara es una /32?. Pues para ello se define la ruta indicando explícitamente el dispositivo.

Supongo el proveedor de hosting habrá determinado esta configuración para que no haya una conectividad directa con las máquinas virtuales "adyacentes" que se encuentren en el mismo host y red.

Ahora comprobamos cómo obtenemos esta configuración de red, para ello comprobamos el fichero /etc/network/interfaces. En este fichero vemos que se hace un include de todos los ficheros del directorio /etc/network/interfaces.d. Aquí únicamente encontramos el fichero:

Contenido fichero de configuración de red /etc/network/interfaces.d/50-cloud-init.cfg
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
auto lo
iface lo inet loopback

auto ens3
iface ens3 inet dhcp

Comprobamos que la configuración de red nos la proporcionan vía dhcp. Además vemos en los comentarios que los cambios que se realicen en este fichero no persistirán tras el reinicio y nos dice cómo evitarlo (es lo que haremos después).

Continuaremos viendo el fichero /etc/hosts proporcionado:

Contenido del fichero /etc/hosts por defecto
127.0.0.1	localhost
54.37.157.73	vps485070.ovh.net	vps485070
127.0.1.1	vps485070.ovh.net	vps485070

Obtenemos la configuración dns que nos proporciona OVH:

Configuración por defecto del resolvedor dns /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 213.186.33.99
search openstacklocal

En este punto habremos comprobado que la configuración coincide con el panel y habremos apuntado los siguientes datos:

  • hosname y dominio que tenemos asignados por defecto, en el ejemplo vps485070.ovh.net

  • la interfaz de red, en el ejemplo ens3

  • nuestra dirección ipv4, en el ejemplo: 54.37.156.73

  • el gateway que nos está dando, en el ejemplo: 54.37.156.1

  • la máscara de red que tenemos, en el ejemplo: 255.255.255.255

  • servidores dns, en el ejemplo 213.186.33.99

1.3. Configurar nuestra zona DNS y registro inverso

Deberemos de tener evidentemente el control de una zona dns (en mi ejemplo luisguillen.com) y decidiremos el nombre de nuestro host.

Yo generalmente utilizo criterios para dar nombres a los host que nada tiene que ver con el servicio que van a proporcionar (hablaré de esto posiblemente en otro artículo). En mi ejemplo he seleccionado el nombre vps01 y luego creo los alias www, mail, etc con los servicios apuntando al nombre de host.

Una vez que sabemos el nombre del host, crearemos en el dns:

  • registro A con la dirección ipv4 del host. En el ejemplo vps01 ip 54.37.156.73

  • registro AAAA con la dirección ipv6. En el ejemplo vps01 ip 2001:41d0:0302:2200:0000:0000:0000:3e6b

  • registros CN de servicios apuntando al nombre de host. En el ejemplo www apunta a vps01.

Una vez modificada nuestra zona dns, modificaremos el registro inverso desde nuestro panel de OVH en la opción Cambiar el registro inverso. El registro inverso apuntará al fqdn de nuestro host, en nuestro ejemplo apuntaría a: vps01.luisguillen.com.

El cambio del registro inverso es especialmente importante si pretendemos dar servicio de envío de correo o utilizar protocolos de autenticación como kerberos.

En este punto podremos continuar con el proceso, no es necesaria la propagación DNS.

2. Configurando el servidor

En primer lugar desactivamos la configuración automática de red y de hostname que hace cluster-init. Para ello creamos los siguientes ficheros con el contenido:

Contenido de /etc/cloud/cloud.cfg.d/99-preserve-hostname.cfg
preserve_hostname: true
manage_etc_hosts: false
Contenido de /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network: {config: disabled}

Crearemos un nuevo fichero hostname y hosts con nuestro nuevo hostname

Contenido de /etc/hosts
127.0.0.1 localhost

54.37.157.73	vps01.luisguillen.com	vps01
2001:41d0:0302:2200:0000:0000:0000:3e6b	vps01.luisguillen.com	vps01

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Contenido de /etc/hostname
vps01

Renombramos la configuración por defecto sin la extensión cfg para que así no se aplique:

root@vps485070:~# mv /etc/network/interfaces.d/50-cloud-init.cfg /etc/network/interfaces.d/50-cloud-init.cfg.ovh-default

Crearemos nuestro nuevo fichero de configuración del host estático sustituyendo por nuestras ips configuración:

Contenido de /etc/network/interfaces.d/10-static-ifaces.cfg
auto TU_INTERFAZ
iface TU_INTERFAZ inet static
	address TU_IPV4
	netmask TU_MASCARA
	post-up /sbin/ip route add TU_GATEWAY dev TU_INTERFAZ scope link
	post-up /sbin/ip route add default via TU_GATEWAY
	pre-down /sbin/ip route del default via TU_GATEWAY
	pre-down /sbin/ip route del TU_GATEWAY dev TU_INTERFAZ scope link

iface TU_INTERFAZ inet6 static
	address TU_IPV6
	netmask 24
	post-up /sbin/ip -f inet6 route add TU_GATEWAYIPV6 dev TU_INTERFAZ scope link
	post-up /sbin/ip -f inet6 route add default via TU_GATEWAYIPV6
	pre-down /sbin/ip -f inet6 route del default via TU_GATEWAYIPV6
	pre-down /sbin/ip -f inet6 route del TU_GATEWAYIPV6 dev TU_INTERFAZ scope link
Como ejemplo te pongo también mi fichero de configuración para que lo tengas más claro, pero recuerda que esto es el ejemplo con MIS datos, debes sustituir toda la información con los datos que correspondan a to servidor.
Ejemplo de mi /etc/network/interfaces.d/10-static-ifaces.cfg
auto ens3
iface ens3 inet static
	address 54.37.157.73
	netmask 255.255.255.255
	post-up /sbin/ip route add 54.37.156.1 dev ens3 scope link
	post-up /sbin/ip route add default via 54.37.156.1
	pre-down /sbin/ip route del default via 54.37.156.1
	pre-down /sbin/ip route del 54.37.156.1 dev ens3 scope link

iface ens3 inet6 static
	address 2001:41d0:0302:2200:0000:0000:0000:3e6b
	netmask 24
	post-up /sbin/ip -f inet6 route add 2001:41d0:0302:2200:0000:0000:0000:0001 dev ens3 scope link
	post-up /sbin/ip -f inet6 route add default via 2001:41d0:0302:2200:0000:0000:0000:0001
	pre-down /sbin/ip -f inet6 route del default via 2001:41d0:0302:2200:0000:0000:0000:0001
	pre-down /sbin/ip -f inet6 route del 2001:41d0:0302:2200:0000:0000:0000:0001 dev ens3 scope link

A continuación deshabilitamos la autoconfiguración ipv6 creando el fichero:

Contenido de /etc/sysctl.d/80-disable-autoconf-ipv6.conf
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0

Finalmente nos queda realizar la configuración DNS del resolvedor, la configuración como vimos en los comentarios del /etc/resolv.conf se realiza vía resolvconf. Para ello tenemos que modificar el contenido del siguiente fichero:

Contenido de /etc/resolvconf/resolv.conf.d/base
search luisguillen.com
nameserver 213.186.33.99
nameserver 8.8.8.8
nameserver 2001:4860:4860::8844
En mi configuración he optado por agregar un dns de google como secundario y un dns de ipv6 de google. Se libre de configurarlo como quieras, pero yo podría el que te suministra ovh como el primero en la lista.

Podríamos reiniciar las interfaces, hacer el hostname, el sysctl y el resolvconf oportunos, pero dado que todavía no proporcionamos ningún servicio…​ lo mejor es que reiniciemos el equipo con un reboot.

Recuerda que si tras reiniciar no puedes conectar es que probablemente has hecho algo mal, aun así puedes conectarte vía el KVM del panel de OVH.

3. Probando la configuración

Si podemos conectarnos por ssh es que el ipv4 funciona ok. Para testear la conectividad ipv6 nos basta con hacer un ping6:

Probando conectividad ipv6
root@vps01:~# ping6 -c 3 2001:4860:4860::8844
PING 2001:4860:4860::8844(2001:4860:4860::8844) 56 data bytes
64 bytes from 2001:4860:4860::8844: icmp_seq=1 ttl=55 time=4.55 ms
64 bytes from 2001:4860:4860::8844: icmp_seq=2 ttl=55 time=4.61 ms
64 bytes from 2001:4860:4860::8844: icmp_seq=3 ttl=55 time=4.59 ms

--- 2001:4860:4860::8844 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 4.554/4.586/4.611/0.081 ms

Finalmente comprobaría que resuelve correctamente los nombres lanzando un ping www.google.com.

4. Postconfiguración

Ahora ya es todo tuyo, te toca pilotar a ti. Yo lo primero que haría sería:

  • Hacer un dist-upgrade para poner todo al día

  • Crear otro usuario administrador (grupo sudo) y deshabilitar la password de root

  • Eliminar al usuario ubuntu que crea el despliegue de OVH de los grupos de sistema

  • Configurar un cortafuegos

  • Instalar fail2ban para todos los chinos y rusos que están todo el día con el ssh a fuerza bruta.

Referencias