Thanks to @michacassola and @tomp for your help on this IPv6 Odyssey.
In the hopefully near future i am going to write a summary blog post about my: Ovirt (VPS) > LXD-HOST > LXDContainer IPv6 adventure and link to it. Host and Container running Ubuntu 20.04 LTS.
Right now, i can only report how far i have gone with this trial and error,… plus i would like to add i am on an Ovirt datacenter + OpnSense Router, but as IPv6 communication arrives as expected from an OpnSense Interface i guess this is working correctly.
What i could not achieve:
- ens3 and lxdbr0 in the same /64 network.
- I could not get a long term stable communication when both ens3 and lxdbr0 are on the same /64 ipv6 network. Even not if ens3 is /128 in netplan. Even not when i created route to /128 for ens3 and no other routes to ens3 where present. While the lxdbr0 got the /64 network. It worked some minutes but after a while i got error messages such as ICMPv6 Beyond Scope of Source Address
- More on this in the upcoming blog post.
What i kind of could achieve:
- Expend the interface on the Router (OpnSense) from /64 to /63
- Put ens3 into the /64 network such as 2a02:1748:1234:ABC0::11/64
- Put lxdbr0 into the other /64 network 2a02:1748:1234:ABC1::21/64
lxc network show lxdbr0
config:
ipv4.address: 10.251.186.1/24
ipv4.dhcp: "true"
ipv4.dhcp.ranges: 10.251.186.100-10.251.186.140
ipv4.nat: "true"
ipv6.address: 2a02:1748:1234:ABC1::21/64
ipv6.dhcp: "false"
ipv6.dhcp.ranges: 2a02:1748:1234:ABC1:216:3eff:fe65:8000-2a02:1748:1234:ABC1:216:3eff:fe65:81ff
ipv6.dhcp.stateful: "true"
ipv6.nat: "false"
ipv6.routing: "true"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/instances/c1
- /1.0/instances/c2
- /1.0/instances/c3
- /1.0/instances/c4
- /1.0/instances/vsftpd
- /1.0/profiles/default
managed: true
status: Created
locations:
- none
And at first glance i thought this setup works perfect. Besides the sad fact that i had to use a /63 network for this setup. Not a big deal from my provider we do get a /60 ipv6 network provided, but it would have been nice to know a working solution where /64 was sufficient. But i couldn’t.
Why it was not perfect?
- i still had to manually add the proxy command after reboot:
ip -6 neigh add proxy 2a02:1748:1234:ABC1:216:3eff:fe65:806e dev ens3
- Even first tests where great. Pinging from inside C1 and from outside (from the router interface or the www) Online_IPv6_ICMP_Test worked perfect. After about 2 hours i tried once more. And again ping from C1 to the outside world worked, ping from the router interface to C1 worked, BUT ping from Online_IPv6_ICMP_Test to the container did not.
And the reason is: In debugging via ICMP the working ping communication uses global IPv6 communication. But some how the broken IPv6 communication from the outside switched for the neighbor solicitation request from global IP to link-local fe80**** IP. And this never gets answered with neighbor advertisement response!
working neighbor solicitation request: (icmp on ens3)
2a02:1748:1234:ABC0::10 > 2a02:1748:1234:ABC1:216:3eff:fe65:806e: ICMP6, neighbor solicitation, who has 2a02:1748:1234:ABC1:216:3eff:fe65:806e, length 32
broken request (will not get answered by neighbor advertisment): (icmp on ens3)
fe80::a236:9fff:fe85:7fbf > ff02::1:ff65:806e: ICMP6, neighbor solicitation, who has 2a02:1748:1234:ABC0:216:3eff:fe65:806e, length 32
So the neigh proxy added to ens3 seems to work for global IPv6 addresses but not answer neighbour solicitation requests sent by link-local fe80::a236:9fff:fe85:7fbf router interface.
ip -6 neigh show proxy
Output:
2a02:1748:1234:ABC1:216:3eff:fe65:806e dev ens3 proxy
Could i solve this with ndppd? Or can i force the OpnSense Router Interface to not send solicitation requests via link-local but always with global IP? which sounds odd.
I guess i just should fix the ubuntu20.04 LXD 4.21 host to answer the IP6 fe80::a236:9fff:fe85:7fbf > ff02::1:ff65:806e: ICMP6, neighbor solicitation, who has 2a02:1748:1234:ABC1:216:3eff:fe65:806e, length 32.
Could someone help me out with this last FE80 neighbour solicitation not getting answered issue?
Is this a ubuntu 20.04 Bug?
As you can see i already added the neigh proxy to ens3. Why does it answer neighbor solicitation if the requester has global ipv6 but not if the requester uses fe80 link-local IP address?
Thanks for all your help!
Kind regards,
Raphael