If I connect an OpenVPN client (to the server listening on 5.5.5.1), then try to hit
http://5.5.5.2 from the client, I see this in the output of "pfctl -s state" (the web page never loads):
ALL tcp 5.5.5.2:80 <- 10.0.88.6:53458 SYN_SENT:ESTABLISHED
ALL tcp 5.5.5.2:80 <- 10.0.88.6:53460 SYN_SENT:ESTABLISHED
The status stays like that for a bit, then changes to TIME_WAIT:TIME_WAIT, then finally times out. Nothing shows up in the apache access log for 5.5.5.2:80, so apparently the request isn't making it from the OpenVPN tunnel to the public IP.
If I connect an L2TP VPN client, to the same server interface, and hit the same URL, I get this (the web page loads):
ALL tcp 5.5.5.2:80 <- 10.0.77.35:53491 ESTABLISHED:ESTABLISHED
I include this info because the pf rules, as far as I can tell, are identical for the two private networks, in fact nothing is blocked for the private networks at all. And again, general internet access works just fine for the OpenVPN clients, they're just unable to access services on the server's other public IPs. So the NAT function is working, and no outgoing traffic is being blocked, but something is preventing traffic flow between the other public IPs and the OpenVPN tunnel.