IPv4 und IPv6 sind die beiden Internet-Protokolle für die Adressierung von Geräten. IPv6 löst das Adressknappheitsproblem von IPv4 und bringt zusätzliche Verbesserungen.

Grundlegende Unterschiede

Übersicht

| Merkmal | IPv4 | IPv6 | |---------|------|------| | Adresslänge | 32 Bit | 128 Bit | | Notation | Dezimal (192.168.1.1) | Hexadezimal (2001:db8::1) | | Adressen | ~4,3 Milliarden | ~340 Sextillionen | | NAT | Üblich | Nicht nötig | | Checksumme | Im Header | Keine | | Broadcast | Ja | Nein (Multicast) | | IPsec | Optional | Integriert |

Adressformat

IPv4: 192.168.1.100
       └─┬─┘ └─┬─┘
       Netz   Host

IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
      └────┬────┘ └────┬────┘ └────────┬────────┘
       Präfix      Subnetz     Interface ID

IPv6-Kurzschreibweise

Volle Adresse:    2001:0db8:0000:0000:0000:0000:0000:0001
Führende Nullen:  2001:db8:0:0:0:0:0:1
Doppel-Kolon:     2001:db8::1

Regeln:
- Führende Nullen pro Block weglassen
- Zusammenhängende 0-Blöcke durch :: ersetzen (nur einmal)

IPv6-Adresstypen

Unicast-Adressen

| Typ | Präfix | Verwendung | |-----|--------|------------| | Global Unicast | 2000::/3 | Öffentliche Adressen | | Link-Local | fe80::/10 | Lokale Kommunikation | | Unique Local | fc00::/7 | Private Netzwerke | | Loopback | ::1/128 | Localhost |

Beispiele

# Global Unicast (öffentlich)
2001:db8:1234:5678::1

# Link-Local (automatisch)
fe80::1

# Unique Local (privat)
fd00:1234:5678::1

# Loopback
::1

IPv6 auf Linux konfigurieren

Status prüfen

# IPv6-Adressen anzeigen
ip -6 addr show

# IPv6-Routing
ip -6 route show

# Kernel-Modul
sysctl net.ipv6.conf.all.disable_ipv6

Statische IPv6-Adresse

# Temporär
ip -6 addr add 2001:db8::1/64 dev eth0
ip -6 route add default via 2001:db8::ffff

# Permanent (Debian/Ubuntu mit Netplan)

Netplan-Konfiguration

# /etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.10/24
        - 2001:db8::10/64
      routes:
        - to: default
          via: 192.168.1.1
        - to: default
          via: 2001:db8::1
      nameservers:
        addresses:
          - 8.8.8.8
          - 2001:4860:4860::8888
netplan apply

Interfaces-Datei (Debian)

# /etc/network/interfaces

auto eth0
iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1

iface eth0 inet6 static
    address 2001:db8::10
    netmask 64
    gateway 2001:db8::1

CentOS/RHEL

# /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes

# IPv4
IPADDR=192.168.1.10
PREFIX=24
GATEWAY=192.168.1.1

# IPv6
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR=2001:db8::10/64
IPV6_DEFAULTGW=2001:db8::1

Dual-Stack

Konzept

Dual-Stack = IPv4 + IPv6 gleichzeitig

Server lauscht auf beiden Protokollen
Clients verbinden über bevorzugtes Protokoll

Webserver Dual-Stack

# Nginx
server {
    listen 80;
    listen [::]:80;

    listen 443 ssl;
    listen [::]:443 ssl;

    server_name example.com;
    # ...
}
# Apache
<VirtualHost *:80>
    ServerName example.com
</VirtualHost>

<VirtualHost [::]:80>
    ServerName example.com
</VirtualHost>

SSH auf beiden Protokollen

# /etc/ssh/sshd_config

ListenAddress 0.0.0.0
ListenAddress ::

# Oder spezifisch
ListenAddress 192.168.1.10
ListenAddress 2001:db8::10

DNS-Konfiguration

A und AAAA Records

; Zone file
example.com.    IN    A       192.168.1.10
example.com.    IN    AAAA    2001:db8::10

www             IN    A       192.168.1.10
www             IN    AAAA    2001:db8::10

mail            IN    A       192.168.1.20
mail            IN    AAAA    2001:db8::20

Reverse DNS

; IPv4 Reverse (in-addr.arpa)
10.1.168.192.in-addr.arpa.    IN    PTR    server.example.com.

; IPv6 Reverse (ip6.arpa)
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.    IN    PTR    server.example.com.

Firewall

UFW

# IPv6 aktivieren in UFW
# /etc/default/ufw
IPV6=yes

# Regeln (gelten für beide)
ufw allow 22
ufw allow 80
ufw allow 443

iptables/ip6tables

# IPv4
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# IPv6 (separater Befehl!)
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT

nftables (kombiniert)

#!/usr/sbin/nft -f

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # Loopback
        iif lo accept

        # Established
        ct state established,related accept

        # ICMPv6 (wichtig!)
        meta l4proto ipv6-icmp accept

        # SSH, HTTP, HTTPS
        tcp dport { 22, 80, 443 } accept
    }
}

ICMPv6

Wichtige Typen

| Typ | Name | Funktion | |-----|------|----------| | 128 | Echo Request | Ping | | 129 | Echo Reply | Ping-Antwort | | 133 | Router Solicitation | Router suchen | | 134 | Router Advertisement | Router ankündigen | | 135 | Neighbor Solicitation | Nachbarn suchen | | 136 | Neighbor Advertisement | Nachbar ankündigen |

Firewall-Regeln

# ICMPv6 NICHT komplett blocken!
# Mindestens diese Typen erlauben:

ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT

Troubleshooting

Konnektivität testen

# Ping IPv6
ping6 2001:db8::1
ping -6 google.com

# Traceroute
traceroute6 google.com

# DNS-Auflösung
dig AAAA example.com
host -t AAAA example.com

# Verbindung testen
curl -6 https://ipv6.google.com
curl -6 http://[2001:db8::1]/

Probleme diagnostizieren

# IPv6-Routing prüfen
ip -6 route

# Neighbor Cache
ip -6 neigh show

# Listening Ports
ss -6 -tlnp

# Verbindungen
ss -6 -tnp

Häufige Probleme

# IPv6 deaktiviert?
sysctl net.ipv6.conf.all.disable_ipv6
# 0 = aktiv, 1 = deaktiviert

# Aktivieren
sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl -w net.ipv6.conf.default.disable_ipv6=0

# Permanent
echo "net.ipv6.conf.all.disable_ipv6 = 0" >> /etc/sysctl.conf

IPv6 Privacy Extensions

Konzept

Standard IPv6: Interface ID basiert auf MAC-Adresse
Privacy Extensions: Zufällige, temporäre Adressen

Für Server meist deaktivieren (stabile Adresse gewünscht)

Deaktivieren

# /etc/sysctl.conf

net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
sysctl -p

Server-Anwendungen

MySQL/MariaDB

# /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
bind-address = ::
-- Benutzer für IPv6
CREATE USER 'user'@'2001:db8::%' IDENTIFIED BY 'password';
GRANT ALL ON db.* TO 'user'@'2001:db8::%';

PostgreSQL

# /etc/postgresql/15/main/postgresql.conf
listen_addresses = '*'

# /etc/postgresql/15/main/pg_hba.conf
host    all    all    2001:db8::/32    md5

Nginx

server {
    listen [::]:80;
    listen [::]:443 ssl;

    # IPv6 only (kein Dual-Stack)
    # Oder mit ipv6only=on
    listen [::]:80 ipv6only=on;
}

Apache

Listen 80
Listen [::]:80

<VirtualHost *:80 [::]:80>
    ServerName example.com
</VirtualHost>

Migration zu IPv6

Schritt-für-Schritt

1. IPv6-Adresse vom Provider erhalten
2. DNS AAAA-Records hinzufügen
3. Firewall-Regeln anpassen
4. Dienste für IPv6 konfigurieren
5. Testen mit IPv6-only Clients
6. Monitoring einrichten

Testen

# IPv6-Test-Websites
curl -6 https://ipv6-test.com/api/myip.php
curl -6 https://test-ipv6.com/

# Von außen prüfen
# https://ipv6-test.com/
# https://ready.chair6.net/

Zusammenfassung

| Merkmal | IPv4 | IPv6 | |---------|------|------| | Format | 192.168.1.1 | 2001:db8::1 | | Bits | 32 | 128 | | Private | 192.168.x.x | fd00::/8 | | Loopback | 127.0.0.1 | ::1 | | Broadcast | Ja | Nein |

| Konfiguration | IPv4 | IPv6 | |---------------|------|------| | Netplan | addresses: - 192.168.1.1/24 | addresses: - 2001:db8::1/64 | | Firewall | iptables | ip6tables | | Ping | ping | ping6 | | DNS | A Record | AAAA Record |

| Dienst | IPv6-Listen | |--------|-------------| | Nginx | listen [::]:80; | | Apache | Listen [::]:80 | | SSH | ListenAddress :: | | MySQL | bind-address = :: |

Fazit

IPv6 ist die Zukunft des Internets und sollte auf jedem Server aktiviert sein. Dual-Stack ermöglicht Kompatibilität mit beiden Protokollen. Die Konfiguration ist etwas komplexer als bei IPv4, aber gut dokumentiert. ICMPv6 darf nicht komplett geblockt werden, da es für grundlegende Netzwerkfunktionen erforderlich ist. Privacy Extensions sollten auf Servern deaktiviert werden.