Thank you both for your feedback. Your feedback was enough to give me inspiration to keep trying.
I have been following
https://freebsdfoundation.org/wp-content/uploads/2020/03/Jail-vnet-by-Examples.pdf by OLIVIER COCHARD-LABBÉ. He uses an epair with side A on the bridge and side B into the jail. I don't think it matters which end is connected to the bridge.
I retried my example, only this time it worked. I think I forgot the UP keyword when creating the epair. In addition, I added a route inside my jail to my home network (192.168.32.0/24) through the host's gateway (10.0.0.1 which is the wifibox), and a default route to the same gateway (probably don't need the local network route with the default). I can use jexec to ping the host, ping devices on my home network (192.168.32.32 for example), and ping google.com using their IP address.
The commands (as root on the host):
#ifconfig create epair up <-- created epair0a and epair0b
#ifconfig wifibox0 addm epari0a <-- adds the A side of the epair to the wifibox0 bridge
Create the jail and assign ip 10.0.0.3/24 to the epairb inside the jail.
#jail -c name=jail0 host.hostname=jail0 persist vnet vnet.interface=epair0b
#jexec jail0 ifconfig epair0b inet 10.0.0.3/24 up
#jexec jail0 ifconfig epair0b inet <-- you should see epair0b assigned address 10.0.0.3
Try to ping the jail from the jail, and the host from the jail. Now this works for me.
#jexec jail0 ping -c 2 10.0.0.3 <-- should ping the jail twice
#jexec jail0 ping -c 2 10.0.0.2 <-- should ping the host twice
Now add a route to the jail so the jail can find the home network using the host's gateway which is the wifibox 10.0.0.1. For those of you who don't know, the route means any address asked for on the network 192.168.32.0/24, route to address 10.0.0.1.
#jexec jail0 route add -net 192.168.32.0/24 10.0.0.1
Now ping a device on your home network, like your home network's gateway or iphone. If the iphone's screen is black, it won't answer the ping. I found the IP of my iphone by looking at the connected devices on my home network's router (gateway).
#jexec jail0 ping -c 2 192.168.32.1 <-- should ping the gateway twice
#jexec jail0 ping -c 2 192.168.32.105 <-- this pinged my iphone twice
Now add a default route (could probably do this instead of adding the home network route) so any address not known to the jail's routing table will go to the host's gateway (10.0.0.1)
#jexec jail0 route add default 10.0.0.1
Get the address of google.com (or any other web URL) by pinging it from your host. The reply is google's IP.
#ping google.com
64 bytes from 64.233.185.100 <-- use this address
Now Ping google from the jail
#jexec jail0 ping -c 2 64.233.185.100 <-- should ping google twice
So the above works, but I know I'm breaking a DHCP rule here. The wifibox has a dhcp server handing out addresses. The dhcp server handed my host 10.0.0.2. The IP address I chose, 10.0.0.3, is in the range of addresses handed out by the dhcp server. Now these are my jails and I am the almighty on my network, so I can get away with it. However, to do this correctly, I need to have the jail somehow ask for an IP (can that be done with an epair ?) or hard code it like I am currently, but configure wifibox to know about the assigned IP address, and any other jails I create.