Bug report: intermittent `host.containers.internal` forwarding timeout on rootful macOS Podman machines
Issue Description
On a rootful macOS Podman machine, a Squid proxy running under podman compose intermittently fails to reach a host listener via its cache_peer at host.containers.internal (192.168.127.254): about 40% of requests through the proxy fail (Squid HIER_NONE/502) even though the host listener is healthy the whole time. The same Compose topology on a rootless machine on the same host never fails. This points to a rootful-specific problem in the container→host forwarding path (libkrun / gvproxy / netavark).
The reproduction deliberately uses the realistic topology — a Squid cache_peer targeting host.containers.internal, started via podman compose — because simpler setups (a direct connection, a bare podman run) were more reliable in our testing. The failure surfaces through the Squid + Compose path, so the reproducer keeps that full stack rather than reducing it to a bare connection.
Steps to reproduce the issue
See attached script. It is self-contained: it creates a disposable VM, runs N cycles, then removes it and restores the previous machine. Each cycle starts a fresh host HTTP listener, brings up a small Compose stack, and makes container→host requests via host.containers.internal.
podman-host-forwarding-repro.public.sh
Requirements: podman, python3, and curl in PATH, and internet access to pull two public images (docker.io/curlimages/curl and docker.io/ubuntu/squid). No sudo needed. Runs entirely from a macOS terminal.
Warning — it changes your Podman state (and restores it on exit): the script stops your currently running Podman machine, creates a disposable machine, and switches the default connection to it for the duration. On exit (including Ctrl-C) it removes the disposable machine and restarts the original machine and default connection.
1. bash podman-host-forwarding-repro.public.sh --mode rootful --cycles 20
2. bash podman-host-forwarding-repro.public.sh --mode rootless --cycles 20
3. rootful reports ~40% failed cycles; rootless reports 0.Describe the results you received
On a rootful machine, requests through the Squid proxy fail intermittently (~40% of cycles), while the host still reaches its own listener:
- Agent request through Squid: HTTP 502 (
curl: (22)), and the CONNECT tunnel fails the same way. - Squid's log for the same request:
TCP_MISS_ABORTED/502 ... HIER_NONE— Squid never established a connection to the host peer. - Host self-check during the same failing cycle:
curl http://127.0.0.1:PORT/returns200, so the listener is up. /etc/hostsmaps192.168.127.254 host.containers.internal; VM routing is normal.
Passing and failing cycles interleave, so it is a per-connection intermittency, not a warmup effect.
Describe the results you expected
Every container→host connection to host.containers.internal should succeed while the host listener is up — as it does 100% of the time on rootless.
podman info output
Client:
APIVersion: 6.1.2
BuildOrigin: pkginstaller
Built: 1789516849
BuiltTime: Tue Sep 15 20:00:49 2026
GitCommit: 04f3aa430e6df81bea059978bc5bafbc846ba3e7
GoVersion: go1.27.1
Os: darwin
OsArch: darwin/arm64
Version: 6.1.2
host:
arch: arm64
buildahVersion: 1.45.1
cdiSpecDirs:
- /etc/cdi
- /var/run/cdi
cgroupControllers:
- cpuset
- cpu
- io
- memory
- pids
- rdma
- misc
- dmem
cgroupManager: systemd
cgroupVersion: v2
conmon:
package: conmon-2.2.1-2.fc44.aarch64
path: /usr/bin/conmon
version: 'conmon version 2.2.1, commit: '
cpuUtilization:
idlePercent: 93.74
systemPercent: 4.57
userPercent: 1.69
cpus: 5
databaseBackend: sqlite
distribution:
distribution: fedora
variant: podman-machine-os
version: "44"
emulatedArchitectures:
- linux/386
- linux/amd64
- linux/arm64be
eventLogger: journald
freeLocks: 2046
hostname: localhost.localdomain
idMappings:
gidmap: null
uidmap: null
kernel: 7.1.10-200.fc44.aarch64
linkmode: dynamic
logDriver: journald
memAvailable: 1525014528
memFree: 890949632
memTotal: 2033741824
networkBackend: netavark
networkBackendInfo:
backend: netavark
defaultNetwork: podman
dns:
package: aardvark-dns-2.1.0-1.fc44.aarch64
path: /usr/libexec/podman/aardvark-dns
version: aardvark-dns 2.1.0
package: netavark-2.1.0-1.fc44.aarch64
path: /usr/libexec/podman/netavark
version: netavark 2.1.0
ociRuntime:
name: crun
package: crun-1.29.1-1.fc44.aarch64
path: /usr/bin/crun
version: |-
crun version 1.29.1
commit: f0d911de5587342cfeb16473bf32ecdfeaf25957
rundir: /run/crun
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +LIBKRUN +WASM:wasmedge +JSON_C
os: linux
pasta:
executable: /usr/bin/pasta
package: passt-0^20260728.gf8df3f1-2.fc44.aarch64
version: |
pasta 0^20260728.gf8df3f1-2.fc44.aarch64-pasta
Copyright Red Hat
GNU General Public License, version 2 or later
<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
remoteSocket:
exists: true
path: unix:///run/podman/podman.sock
rootlessNetworkCmd: pasta
rootlessPortForwarder: rootlessport
security:
apparmorEnabled: false
capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
rootless: false
seccompEnabled: true
seccompProfilePath: /usr/share/containers/seccomp.json
selinuxEnabled: true
serviceIsRemote: true
swapFree: 0
swapTotal: 0
uptime: 0h 0m 37.00s
variant: v8
plugins:
authorization: null
log:
- k8s-file
- none
- passthrough
- journald
network:
- bridge
- macvlan
- ipvlan
volume:
- local
registries:
search:
- docker.io
store:
containerStore:
number: 0
paused: 0
running: 0
stopped: 0
graphDriverName: overlay
graphOptions:
additionalImageStores:
- /usr/lib/containers/storage
imagestore: /usr/lib/containers/storage
overlay.mountopt: nodev,metacopy=on
graphRoot: /var/lib/containers/storage
graphRootAllocated: 106769133568
graphRootUsed: 4276781056
graphStatus:
Backing Filesystem: xfs
Native Overlay Diff: "false"
Supports d_type: "true"
Supports shifting: "true"
Supports volatile: "true"
Using metacopy: "true"
imageCopyTmpDir: /var/tmp
imageStore:
number: 2
runRoot: /run/containers/storage
transientStore: false
volumePath: /var/lib/containers/storage/volumes
version:
APIVersion: 6.1.2
BuildOrigin: 'Copr: packit/podman-container-tools-podman-29779'
Built: 1789430400
BuiltTime: Mon Sep 14 20:00:00 2026
GitCommit: 04f3aa430e6df81bea059978bc5bafbc846ba3e7
GoVersion: go1.26.8-X:nodwarf5
Os: linux
OsArch: linux/arm64
Version: 6.1.2Podman in a container
No
Privileged Or Rootless
Privileged
Upstream Latest Release
Yes
Additional environment details
M5 Macbook Air, macOS 26.5.1
Additional information
No response
Source: podman-container-tools/podman