(All these commands should be executed on the Linux router.)
Step 1: Create the bridge normally, as if it were to route all traffic between the two interfaces.
ip link add name br0 type bridge ip link set br0 up ip link set eth0 master br0 ip link set eth1 master br1br0 Step 2: Through ebtables rules, tell the kernel that IPv4 traffic should be bridged, and that IPv6 traffic should be routed.
ebtables -t broute -A BROUTING -p ipv4 -j ACCEPT ebtables -t broute -A BROUTING -p ipv6 -j DROP (In the BROUTING chain, "ACCEPT" means bridge and "DROP" means ignore the bridge.)
None of the Linux router's interfaces need IPv4 addresses.
This solution should not be tested on Virtualbox VMs, because there's some bridging bug somewhere that prevents br0 from working at all.