LXC bekommt IPv6 adresse, kann IPv6 aber nicht nutzen?

dekiesel

Member
Apr 30, 2023
63
6
13
Hi,

Ich brauche ipv6 für zwei meiner Container (da ich openthread und matter nutzen möchte).

Ich habe einen Container aufgestellt und dieser bekommt auch eine ipv6:


Bash:
python-matter-server:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth101@if279: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 22:29:80:4f:c0:cc brd ff:ff:ff:ff:ff:ff
    inet 10.1.101.180/24 brd 10.1.101.255 scope global eth101
       valid_lft forever preferred_lft forever
    inet6 fd54:bac3:aabe:339d:2029:80ff:fe4f:c0cc/64 scope global dynamic flags 100
       valid_lft 1672sec preferred_lft 1672sec
    inet6 fe80::2029:80ff:fe4f:c0cc/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:5a:b0:f0:e2 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

Leider kann ich nichts via ipv6 pingen:

Bash:
python-matter-server:~# ping -c 2 2a01:4f8:121:24cc::102
PING 2a01:4f8:121:24cc::102 (2a01:4f8:121:24cc::102): 56 data bytes
ping: sendto: Network unreachable

Da ich leider nicht wirklich viel Ahnung von ipv6 habe bin ich nicht sicher wie sich das beheben lässt, über Hilfe wäre ich sehr dankbar.

Ist ipv6 auf dem Host auch nötig? Dort ist ipv6 deaktiviert, was ich als Grund vermuten würde, hätte ich nicht Threads gesehen in denen Leute sagen ihre container hätten ipv6, ihr host aber nicht.

Code:
root@pve:/etc/sysctl.d# cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0.100
iface vmbr0.100 inet static
        address  10.1.100.12/24
        gateway  10.1.100.1

auto vmbr0
iface vmbr0 inet manual
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

Danke!
 
Hallo @dekiesel,

dein Container hat mit der fd54:... Adresse nur eine Unique Local Address (ULA) bekommen. Diese ist, ähnlich wie eine private IPv4-Adresse, nicht im Internet routbar.

Deine Vermutung ist korrekt. Damit dein Container eine öffentliche, routbare IPv6-Adresse von deinem Router erhalten kann, muss das Forwarding für IPv6 auf dem Proxmox Host aktiviert sein.

Füge dazu auf dem PVE Host in der Datei /etc/sysctl.conf (oder in einer neuen Datei unter /etc/sysctl.d/) folgende Zeilen hinzu:net.ipv6.conf.all.forwarding=1net.ipv6.conf.default.forwarding=1

Anschließend die Konfiguration mit sysctl -p neu laden. Nach einem Neustart des Containers (oder des Netzwerks im Container) sollte dieser eine zusätzliche, öffentliche IPv6-Adresse erhalten und damit auch pingen können.
 
Hi @Bu66as,

Danke für deine Hilfe. Ich habe die Änderungen durchgeführt und es hat sich etwas getan, aber ich kann leider immer noch nicht via ipv6 anpingen:

Bash:
root@pve:~# grep -v '^\s*$\|^\s*\#' /etc/sysctl.conf
vm.swappiness = 10
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.vmbr0.forwarding=1
net.ipv6.conf.vmbr0.accept_ra=2
net.ipv6.conf.vmbr0.accept_ra_rt_info_max_plen = 64
root@pve:~# sysctl -n net.ipv6.conf.default.forwarding
1
root@pve:~# ping6 google.com
PING google.com(fra24s04-in-x0e.1e100.net (2a00:1450:4001:827::200e)) 56 data bytes
From fe80::b20c:d1ff:fe62:a619%vmbr0 (fe80::b20c:d1ff:fe62:a619%vmbr0) icmp_seq=1 Destination unreachable: Address unreachable
From fe80::b20c:d1ff:fe62:a619%vmbr0 (fe80::b20c:d1ff:fe62:a619%vmbr0) icmp_seq=2 Destination unreachable: Address unreachable
From fe80::b20c:d1ff:fe62:a619%vmbr0 (fe80::b20c:d1ff:fe62:a619%vmbr0) icmp_seq=3 Destination unreachable: Address unreachable
^C
--- google.com ping statistics ---
6 packets transmitted, 0 received, +3 errors, 100% packet loss, time 5120ms

root@pve:~#

Das gleiche gilt für den Container, aber ich bin schon mal sehr froh, dass sich etwas getan hat!
 
Dein Host hat selbst noch keine öffentliche IPv6-Adresse und versucht daher, von seiner nicht routbaren Link-Local-Adresse (fe80::...) aus zu pingen.

Damit der PVE-Host für die Container routen kann, benötigt er eine eigene öffentliche IPv6-Adresse. Ergänze dazu bitte den Block für vmbr0 in deiner /etc/network/interfaces um die folgende Zeile:iface vmbr0 inet6 auto

Nachdem du die Netzwerkkonfiguration neu geladen hast (ifreload -a oder Neustart), sollte der Host eine öffentliche IPv6-Adresse erhalten. Prüfe das und teste den Ping vom Host aus erneut, bevor du es im Container versuchst.