%20e%20IPv6.png)
Estoy alquilando un servidor dedicado en Hetzner e instalé el servidor Ubuntu 18.04 LTS en él. Tengo dos direcciones IPv4 públicas llamadas xxxx y yyyy y un bloque IPv6/64 para conectar mis redes privadas a Internet. Yo uso NAT para IPv4.
Mi red está configurada usando Netplan de la siguiente manera:
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- x.x.x.x/32
- y.y.y.y/32
- a.a.a.a::2/64
routes:
- on-link: true
to: 0.0.0.0/0
via: z.z.z.z
gateway6: fe80::1
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
bridges:
xenbr0:
interfaces: []
addresses:
- 192.168.0.1/24
- a.a.a.a::3/64
parameters:
forward-delay: 0
stp: false
xenbr1:
interfaces: []
addresses:
- 192.168.1.1/24
- a.a.a.a::4/64
parameters:
forward-delay: 0
stp: false
La instalación y configuración de XEN:
sudo apt-get install xen-hypervisor-amd64 xen-tools
sudo reboot
sudo vim /etc/default/grub
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=min:1024M,max:1024M dom0_max_vcpus=2 dom0_vcpus_pin"
sudo vim /etc/xen/xl.conf
autoballoon=0
sudo update-grub
sudo reboot
Las máquinas virtuales deben ser accesibles desde y hacia Internet mediante reenvío de IP y NAT.
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p /etc/sysctl.conf
sudo apt-get install iptables-persistent
La parte NAT:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Reenviar solicitudes HTTP y HTTPS a nuestro servidor VM2:
sudo iptables -A PREROUTING -t nat -p tcp -i eth0 -d x.x.x.x --dport 80 -j DNAT --to 192.168.0.11:80
sudo iptables -A PREROUTING -t nat -p tcp -i eth0 -d x.x.x.x --dport 443 -j DNAT --to 192.168.0.11:443
No queremos ningún tráfico entre 192.168.0.x <-> 192.168.0.y, por lo que descartamos todos los paquetes de datos con algunas reglas simples. Esto bloquea la comunicación entre los puentes:
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -i eth0 -o xenbr0 -j ACCEPT
sudo iptables -A FORWARD -i xenbr0 -o eth0 -s 192.168.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o xenbr1 -j ACCEPT
sudo iptables -A FORWARD -i xenbr1 -o eth0 -s 192.168.1.0/24 -j ACCEPT
La parte de IPv4 funciona perfectamente pero la de IPv6 no. Asigné una dirección IPv6 manualmente a mis máquinas virtuales. Cuando inicié sesión en VM1, puedo hacer ping a xenbr0 en la dirección ::3 y a VM2 en la dirección ::11, pero no puedo hacer ping a eth0 en la dirección ::2. Es como si el puente impidiera que el tráfico IPv6 salga de la red pero no pudiera entender por qué.
Respuesta1
He logrado resolverlo. La clave es utilizar una dirección ipv6 con máscara de red /128 que funcionará como puerta de enlace para sus máquinas virtuales. Comencemos modificando la configuración de Netplan:
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- x.x.x.x/32
- y.y.y.y/32
- a.a.a.a::00/128
- a.a.a.a::10/128
routes:
- on-link: true
to: 0.0.0.0/0
via: z.z.z.z
gateway6: fe80::1
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
bridges:
xenbr0:
interfaces: []
addresses:
- 192.168.0.1/24
- a.a.a.a::00/125
parameters:
forward-delay: 0
stp: false
xenbr1:
interfaces: []
addresses:
- 192.168.1.1/24
- a.a.a.a::10/125
parameters:
forward-delay: 0
stp: false
Preste atención a las direcciones ipv6 asignadas a las interfaces eth0, xenbr0 y xenbr1. Eth0 obtiene dos direcciones ipv6 únicas (/128), mientras que xenbr0 y xenbr1 obtienen un bloque de ocho direcciones (/125) que pueden usarse para sus máquinas virtuales. La configuración de red VM1 se ve así:
# The loopback network interface
auto lo
iface lo inet loopback
iface lo0 inet6 loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.1
iface eth0 inet6 static
address a:a:a:a::01
netmask 125
gateway a:a:a:a::00
Y la configuración de VM3 que usa otro puente:
# The loopback network interface
auto lo
iface lo inet loopback
iface lo0 inet6 loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
gateway 192.168.1.1
iface eth0 inet6 static
address a:a:a:a::11
netmask 125
gateway a:a:a:a::10
Por último, pero no menos importante, no olvide habilitar el reenvío de IP para ipv6.
sudo vim /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
sudo sysctl -p /etc/sysctl.conf