Xen auf Ubuntu 18.04 mit IPv4 (NAT) und IPv6

Xen auf Ubuntu 18.04 mit IPv4 (NAT) und IPv6

Ich miete einen dedizierten Server bei Hetzner und habe Ubuntu Server 18.04 LTS darauf installiert. Ich habe zwei öffentliche IPv4-Adressen namens xxxx und yyyy und einen IPv6 /64-Block für die Verbindung meiner privaten Netzwerke mit dem Internet. Ich verwende NAT für IPv4.

XEN-Schema Mein Netzwerk ist mit Netplan wie folgt konfiguriert:

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

Die Installation und Konfiguration von 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

VMs sollten über IP-Weiterleitung und NAT vom und zum Internet zugänglich sein.

sudo vim /etc/sysctl.conf
   net.ipv4.ip_forward=1
sudo sysctl -p /etc/sysctl.conf
sudo apt-get install iptables-persistent

Der NAT-Teil:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Leiten Sie HTTP- und HTTPS-Anfragen an unseren VM2-Server weiter:

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

Wir möchten keinen Datenverkehr zwischen 192.168.0.x <-> 192.168.0.y, also löschen wir alle Datenpakete mit einigen einfachen Regeln. Dies blockiert die Kommunikation zwischen den Brücken:

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

Der IPv4-Teil funktioniert einwandfrei, aber der IPv6-Teil nicht. Ich habe meinen VMs manuell eine IPv6-Adresse zugewiesen. Wenn ich bei VM1 angemeldet bin, kann ich xenbr0 an Adresse ::3 und VM2 an Adresse ::11 anpingen, aber nicht eth0 an Adresse ::2. Es ist, als ob die Brücke den IPv6-Verkehr daran hindert, das Netzwerk zu verlassen, aber ich kann nicht herausfinden, warum.

Antwort1

Ich habe es herausgefunden. Der Schlüssel ist, eine IPv6-Adresse mit /128-Netzmaske zu verwenden, die als Gateway für Ihre VMs fungiert. Beginnen wir mit der Änderung der Netplan-Konfiguration:

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

Achten Sie auf die IPv6-Adressen, die den Schnittstellen eth0, xenbr0 und xenbr1 zugewiesen sind. Eth0 erhält zwei einzelne IPv6-Adressen (/128), während xenbr0 und xenbr1 einen Block von acht Adressen (/125) erhalten, die für Ihre VMs verwendet werden können. Die Netzwerkkonfiguration von VM1 sieht folgendermaßen aus:

# 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

Und VM3-Konfiguration, die eine andere Brücke verwendet:

# 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

Vergessen Sie nicht, die IP-Weiterleitung für IPv6 zu aktivieren.

sudo vim /etc/sysctl.conf
    net.ipv6.conf.all.forwarding=1
sudo sysctl -p /etc/sysctl.conf

verwandte Informationen