$ sudo podman run -it --rm --annotation krun.use_passt=1 --annotation run.oci.handler=krun --name test --network=podman --userns auto alpine:latest
ERRO[0000] Failed to delete btrfs qgroup 5880 for /var/lib/containers/storage/btrfs/subvolumes/4ae7a69ad17b5a142408e0f436b3fc5edfb4f8121a4156cd2445e03340d9b29f: device or resource busy
/ # 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: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether ea:cb:7c:45:33:87 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc pfifo_fast state UP qlen 1000
link/ether 5a:94:ef:e4:0c:ee brd ff:ff:ff:ff:ff:ff
inet 169.254.2.1/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5894:efff:fee4:cee/64 scope link tentative
valid_lft forever preferred_lft forever
/ #
you can see that the container (with krun and passt network) was left in passt's default address mode, this means passt failed to learn the interface from the host and copy the address from it. This renders ipv6 unusable in the container.
however, similar command with rootless container results in working ip address passthrough:
podman run -it --rm --annotation krun.use_passt=1 --annotation run.oci.handler=krun --name test --network=podman alpine:latest
/ # 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: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 6e:d7:15:cb:a6:39 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc pfifo_fast state UP qlen 1000
link/ether 5a:94:ef:e4:0c:ee brd ff:ff:ff:ff:ff:ff
inet 10.89.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 2001:db8:1:0:5894:efff:fee4:cee/64 scope global dynamic flags 100
valid_lft forever preferred_lft forever
inet6 fe80::5894:efff:fee4:cee/64 scope link
valid_lft forever preferred_lft forever
following is just my assumption: this might be due to somehow, in rootful mode, podman spawns passt in the unshared namespace before the veth pair or the default route was set, and passt, when started without a default route to 0.0.0.0/0, fallbacks to default address mode and never recovers.
you can see that the container (with krun and passt network) was left in passt's default address mode, this means passt failed to learn the interface from the host and copy the address from it. This renders ipv6 unusable in the container.
however, similar command with rootless container results in working ip address passthrough:
following is just my assumption: this might be due to somehow, in rootful mode, podman spawns passt in the unshared namespace before the veth pair or the default route was set, and passt, when started without a default route to 0.0.0.0/0, fallbacks to default address mode and never recovers.