Skip to content

krun with passt can result in default address mode #2199

Description

@karuboniru
$ 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions