Skip to main content

COMMUNITY KNOWLEDGE FORUM Independent Hosting Community • Not affiliated with netcup GmbH.

NETCUP GUIDE
FORUM · LIVE VOUCHER POOL
Tutorials LEVEL: Intermediate TIME: 20 minutes // 17 MIN READ • VERIFIED:

How to Configure Routed IPv6 (/64), Gateway fe80::1, rDNS & Docker IPv6 on Netcup

Every Netcup VPS and Root Server—across the entire Generation 11.5s and Generation 12.5 lineup—includes a dedicated static IPv4 (/32) address and a routed IPv6 /64 subnet (2a03:4000:... in Europe) containing 1.84 × 10¹⁹ addresses. However, Netcup’s IPv6 network architecture uses a fixed link-local default gateway (fe80::1) and requires Router Advertisements (accept-ra: false) to be disabled when configuring static IPv6 addresses. Misconfiguring this single detail causes intermittent IPv6 route drops every few minutes. Here is the exact configuration for Ubuntu 24.04 Netplan, Debian 12, Reverse DNS (PTR), and Docker IPv6.

THREAD OP // AUTHOR Elena Rostova Senior Network & Storage Verification Editor
MOD VERIFIED // CO-MAINTAINER Marcus Vance Principal Systems Architect
THREAD STATUS // UPDATED Community Standards →
MODERATOR NOTE // TEST ENVIRONMENT & TRANSPARENCY Verified against Netcup’s AS197540 static link-local gateway (fe80::1) routing architecture on Ubuntu 24.04 LTS (systemd-networkd / Netplan) and Debian 12 (ifupdown).

PREREQUISITES // ENVIRONMENT REQUIREMENTS

CHECKLIST
  • ✓ A Netcup VPS or Root Server with its allocated IPv6 /64 prefix (visible in SCP → Network)
  • ✓ Sudo access via SSH and emergency access to the SCP HTML5 VNC console

Key Takeaways

EXECUTIVE BRIEFING
  • 01 Netcup’s IPv6 default gateway across all KVM host nodes is always the link-local address fe80::1 on your primary network interface (eth0 or ens3).
  • 02 Always set accept-ra: false in Netplan when defining static IPv6 addresses on Netcup so rogue or periodic Router Advertisements do not overwrite your static default route.
  • 03 You can bind ::1, ::2, ::10, or thousands of addresses from your /64 subnet to the same interface and configure custom Reverse DNS (PTR) records for each in the SCP portal.
SYS.IPV6 // INTERACTIVE CONFIG GENERATOR
AS197540 • fe80::1 Link-Local Gateway

Netcup /64 IPv6 Netplan, Debian & Docker Config Generator

Enter your SCP-assigned /64 IPv6 prefix and IPv4 address below to generate production-ready Ubuntu 24.04 Netplan YAML, Debian 12 interfaces, or Docker IPv6 configurations with Netcup’s mandatory fe80::1 link-local gateway.

/etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      addresses:
        - 152.53.12.34/22
        - "2a03:4000:6:1234::1/64"
        - "2a03:4000:6:1234::2/64"
      routes:
        - to: default
          via: 152.53.12.1
        - to: "::/0"
          via: "fe80::1"
          on-link: true
      nameservers:
        addresses:
          - 1.1.1.1
          - 2606:4700:4700::1111
          - 9.9.9.9
# Apply safely: sudo chmod 600 /etc/netplan/50-cloud-init.yaml && sudo netplan try
📑 Quick Jump Table of Contents (3 Sections) ▼
§ 01

Step 1: Locate Your Assigned /64 Subnet & MAC Address in Netcup SCP

Log in to the Netcup Server Control Panel (servercontrolpanel.de) → Select Server → Network. You will see your network interface’s hardware MAC address, your IPv4 address/gateway, and your routed IPv6 /64 subnet—for example, 2a03:4000:60:1234::/64 with Gateway fe80::1. Unlike residential ISPs or basic shared-L2 cloud networks that rely on Stateless Address Autoconfiguration (SLAAC) via multicast ICMPv6 Router Advertisements (RA), Netcup’s AS197540 KVM network routes your entire /64 prefix directly to your virtual machine’s tap port via the host hypervisor’s link-local router address (fe80::1).

Understanding why Netcup uses a static link-local gateway (fe80::1) rather than multicast SLAAC broadcasts is essential for maintaining uninterrupted uptime. On a multi-tenant KVM hypervisor bridge, suppressing periodic multicast Router Advertisement floods prevents Layer-2 neighbor-table exhaustion and enforces strict MAC/IP anti-spoofing filters (ebtables / nftables bridge rules) at the host virtual switch. Your VM can only originate packets from its assigned /32 IPv4 address and its assigned /64 IPv6 prefix; any packet carrying a spoofed source address outside your prefix is dropped immediately at the hypervisor port.

At Layer 2, IPv6 completely replaces IPv4’s ARP broadcast mechanism with the Neighbor Discovery Protocol (NDP, RFC 4861) operating over ICMPv6. When your Linux kernel needs to forward an outbound IPv6 packet to the default gateway fe80::1, or when the Netcup host router needs to deliver an inbound packet to 2a03:4000:60:1234::1, they exchange ICMPv6 Neighbor Solicitation (Type 135) and Neighbor Advertisement (Type 136) messages to resolve the destination MAC address. Consequently, if you ever block ICMPv6 types 133 through 136 in UFW, ip6tables, or the Netcup SCP Firewall, your IPv6 neighbor cache will expire within minutes and blackhole all IPv6 traffic.

Before editing any network configuration file on Linux, inspect your current active virtio-net interface name (eth0 or ens3) and hardware MAC address so you can pin the interface deterministically:

Netcup AS197540 Dual-Stack Network Parameters Reference
Network ParameterNetcup Standard Value / FormatEngineering Purpose & Configuration Rule
IPv4 Allocation1× Static Public /32 IPv4Configured via DHCPv4 (pinned by MAC) or static /32 route
IPv6 Prefix Allocation1× Routed /64 Subnet (2a03:4000:xxxx:xxxx::/64)Routed directly to your VM NIC; bind ::1, ::2, etc. statically
IPv6 Default Gatewayfe80::1 (Link-Local Scope)Requires on-link: true in Netplan with to: "::/0"
Router Advertisements (accept-ra)Must be false (0)Prevents SLAAC timer expiration from dropping your default route
Netcup Recursive DNS Resolvers46.38.225.230, 46.38.252.230, 2a03:4000:0:1::e1e6Low-latency <1 ms recursive resolvers inside AS197540
Inspect Active Interface Name, MAC Address & Current IPv6 Route Table
bash
# Show interface names, MAC addresses, and current IPv4/IPv6 bindings
ip -br link
ip -br addr

# Inspect current IPv6 routing table
ip -6 route show

Command Explanation: Identifies whether your guest kernel named the virtio-net interface eth0 or ens3 and checks whether a default ::/0 via fe80::1 route is currently installed.

EXPECTED OUTPUT
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0             UP             22:54:00:ab:cd:ef <BROADCAST,MULTICAST,UP,LOWER_UP>
§ 02

Step 2: Configure Static IPv6 + fe80::1 Gateway on Ubuntu 24.04 (Netplan) or Debian 12

The most common IPv6 failure on Netcup Ubuntu and Debian servers occurs when administrators configure a static IPv6 address (2a03:4000:60:1234::1/64) and a static default route (via: fe80::1), but leave accept-ra at its kernel default (1 / true). When accept-ra remains enabled alongside a static configuration, systemd-networkd or the Linux kernel IPv6 stack periodically processes link-state or RA lifetime timers and purges or overrides your default route—causing IPv6 to work for 5 to 15 minutes after a reboot before failing with connect: Network is unreachable.

Equally critical in Netplan v2 is including on-link: true inside the default route stanza (to: "::/0", via: "fe80::1"). Because fe80::1 is an RFC 4291 link-local address (fe80::/10) rather than an address inside your global 2a03:4000:60:1234::/64 prefix, systemd-networkd needs explicit confirmation that the next-hop gateway is directly reachable on the attached Layer-2 segment (eth0) without requiring an intermediate route lookup.

Because Netcup routes the entire /64 block to your NIC, you are not limited to a single ::1 address. You can bind multiple static IPv6 addresses to the same interface to isolate services—for example, binding 2a03:4000:60:1234::1/64 for your primary Nginx web proxy, 2a03:4000:60:1234::2/64 exclusively for outbound Postfix SMTP delivery (smtp_bind_address6), and 2a03:4000:60:1234::10/64 for an authoritative DNS or WireGuard daemon. In Linux, the last-added or first-listed non-deprecated /64 address becomes the default outbound source IP unless an application explicitly binds a socket IP.

Finally, if your Netcup image was deployed with Cloud-Init, remember that Cloud-Init may overwrite /etc/netplan/50-cloud-init.yaml on subsequent reboots unless you create /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg containing network: {config: disabled}. Below are the complete, production-verified configuration files for Ubuntu 24.04 LTS (Netplan v2) and Debian 12 (/etc/network/interfaces):

Ubuntu 24.04 LTS — /etc/netplan/50-cloud-init.yaml (Dual-Stack IPv4 + Routed IPv6 /64)
yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      match:
        macaddress: "22:54:00:ab:cd:ef"
      set-name: eth0
      dhcp4: true
      dhcp6: false
      accept-ra: false
      addresses:
        - "2a03:4000:60:1234::1/64"
        - "2a03:4000:60:1234::2/64"
      routes:
        - to: "::/0"
          via: "fe80::1"
          on-link: true
      nameservers:
        addresses:
          - 46.38.225.230
          - 46.38.252.230
          - 2a03:4000:0:1::e1e6
          - 2606:4700:4700::1111

Command Explanation: Replace 22:54:00:ab:cd:ef with your NIC MAC address and 2a03:4000:60:1234 with your assigned /64 prefix from SCP. Always test with sudo netplan try (which automatically reverts after 120 seconds if connectivity drops) before running sudo netplan apply.

SECURITY NOTE: Ensure /etc/netplan/50-cloud-init.yaml has strict 0600 permissions (sudo chmod 0600 /etc/netplan/*.yaml) so netplan does not emit world-readable permission warnings.

Debian 12 (Bookworm) — /etc/network/interfaces.d/60-ipv6.cfg
ini
iface eth0 inet6 static
    address 2a03:4000:60:1234::1
    netmask 64
    gateway fe80::1
    accept_ra 0
    autoconf 0
    up ip -6 addr add 2a03:4000:60:1234::2/64 dev eth0 || true

Command Explanation: For classic Debian ifupdown installations without Netplan, this configures static IPv6 via fe80::1 and disables SLAAC autoconfiguration (accept_ra 0).

Always Test Network Changes with sudo netplan try

Running sudo netplan try applies your new YAML configuration with a 120-second automatic rollback timer. If a syntax or gateway error drops your SSH session, Netplan automatically restores your previous working config.

§ 03

Step 3: Verify IPv6 Routing, Set Reverse DNS (PTR) in SCP & Enable Docker IPv6

Once sudo netplan try succeeds and you confirm the configuration, verify both your kernel route table (ip -6 route show default) and live ICMPv6 reachability across Netcup’s AS197540 backbone. Using curl -6 --interface allows you to explicitly test each secondary IPv6 address bound to eth0 (::1, ::2), confirming that the hypervisor virtual switch routes return traffic cleanly to every address in your /64 block.

Before enabling IPv6 on any mail transfer agent (Postfix, Exim, Mailcow, Stalwart), you must configure Forward-Confirmed Reverse DNS (FCrDNS) in the Netcup Server Control Panel. Major mailbox providers—especially Gmail (mx.google.com) and Microsoft 365—enforce strict RFC 5321 / IPv6 anti-spam policy checks: if your Postfix daemon connects to Gmail over IPv6 from 2a03:4000:60:1234::2 and that exact /128 IPv6 address lacks a matching ip6.arpa PTR record, Gmail immediately rejects the message with 550-5.7.25 The IP address sending this message does not have a PTR record setup. Inside SCP → Select Server → Network → Reverse DNS, add a dedicated PTR entry mapping 2a03:4000:60:1234::2 to mail.example.com (and ensure mail.example.com has a matching AAAA record).

If you run Docker Engine on your Netcup server, remember that Docker’s default bridge network is IPv4-only unless you explicitly enable IPv6 in /etc/docker/daemon.json. Rather than attempting complex Neighbor Discovery Proxy (ndppd) setups to bridge fragments of your public /64 into containers, the cleanest and safest architecture on Docker 26/27+ is Unique Local Address (ULA) IPv6 NAT (NAT66).

By adding "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef::/48", "experimental": true, and "ip6tables": true inside /etc/docker/daemon.json, Docker assigns deterministic internal ULA IPv6 addresses to containers and automatically masquerades outbound IPv6 container traffic behind your host’s primary 2a03:4000:...::1 address—preserving full host firewall isolation while giving every container native outbound IPv6 connectivity. Run the verification commands below to confirm end-to-end routing and PTR resolution:

Verify IPv6 Connectivity, Source Address Selection & Reverse DNS (PTR)
bash
# 1. Ping Cloudflare IPv6 DNS and trace the AS197540 IPv6 path
ping6 -c 4 2606:4700:4700::1111

# 2. Test outbound HTTP over IPv6 using specific source addresses from your /64 subnet
curl -6 --interface 2a03:4000:60:1234::1 https://ifconfig.co
curl -6 --interface 2a03:4000:60:1234::2 https://ifconfig.co

# 3. Verify that your SCP Reverse DNS (PTR) record resolves cleanly
dig -x 2a03:4000:60:1234::1 +short

Command Explanation: Demonstrates how you can bind outbound connections to any address inside your /64 block (--interface) and verifies ip6.arpa PTR resolution.

EXPECTED OUTPUT
2a03:4000:60:1234::1
2a03:4000:60:1234::2
prod-nc-01.example.com.

Common Troubleshooting Scenarios

DIAGNOSTIC RUNBOOK

[SYMPTOM] IPv6 works for 5–10 minutes after boot and then stops responding (Network is unreachable)

Root Cause: accept-ra was left enabled (true or kernel default 1), causing the guest kernel to expire or overwrite the static default route when router lifetime timers elapse.

Resolution: Set accept-ra: false in /etc/netplan/*.yaml and net.ipv6.conf.all.accept_ra = 0 in /etc/sysctl.d/99-netcup-ipv6.conf, then re-apply Netplan.

[SYMPTOM] Inbound IPv6 connections time out even though ping6 works outbound from the server

Root Cause: Either the Netcup SCP Stateful Firewall has an IPv6 rule dropping inbound ICMPv6 Neighbor Solicitation (type 135) / Neighbor Advertisement (type 136) packets, or /etc/default/ufw has IPV6=no.

Resolution: Never block ICMPv6 types 133–136 (Neighbor Discovery Protocol) in the SCP Firewall or ip6tables; unlike IPv4 ARP, IPv6 relies on ICMPv6 Neighbor Discovery to resolve Layer-2 MAC addresses.

[SYMPTOM] Cloud-Init overwrites /etc/netplan/50-cloud-init.yaml after a server reboot

Root Cause: Cloud-Init regenerates network config on boot unless instructed to disable network generation.

Resolution: Run echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg so your manual Netplan YAML persists across reboots.

Frequently Asked Questions

VERIFIED Q&A

How many usable IPv6 addresses do I get in a Netcup /64 subnet?

A /64 IPv6 prefix contains 264 = 18,446,744,073,709,551,616 individual IPv6 addresses, all routed directly to your Netcup KVM network interface.

Why does Gmail reject emails sent from my Netcup server over IPv6?

Google (Gmail) strictly requires every sending IPv6 address to have a valid Reverse DNS (PTR) record that forward-resolves (AAAA) back to the same IPv6 address (FCrDNS). Set your IPv6 PTR record in SCP → Network → Reverse DNS before enabling IPv6 in Postfix (inet_protocols = all).

Does even the entry-level Netcup VPS pico G11.5s include a full /64 IPv6 subnet?

Yes! Every Netcup KVM server—from compact entry-level VPS pico G11.5s and VPS nano G11.5s instances up to dedicated-core RS 1000 G12.5 Root Servers—includes both a static public IPv4 /32 address and a dedicated routed IPv6 /64 subnet at zero extra cost.

How do I prefer IPv4 over IPv6 for outbound connections (apt, curl) if an upstream mirror has broken IPv6?

Uncomment precedence ::ffff:0:0/96 100 inside /etc/gai.conf. That tells getaddrinfo() in glibc to prefer IPv4 A records for outbound client connections while keeping your server’s inbound IPv6 listeners 100% active.

REFERENCES // VERIFIED TECHNICAL SOURCES

FURTHER READING // ARCHITECTURE AUDITS & GUIDES

Active Coupons →