I haven't tested this, but this is what I would try.
Create a new bridge on the host with brctl
brctl addbr br0
Configure the VM with bridged networking connected to this bridge
Assign a private subnet to the bridge and give the host an IP on it
ip addr add 192.168.1.1/24 dev br0
ip route add 192.168.1.0/24 dev br0
Either statically configure the VM with an IP on this range (e.g. 192.168.1.2), or setup a DHCP server on the host (e.g. dnsmasq or VirtualBox's dhcpserver).
Attach the static IP to eth0 on the host
ip addr add 1.0.2.30/24 dev eth0
Check that you can connect to the host on the additional IP from outside
Enable IP forwarding on the host
echo 1 > /proc/sys/net/ipv4/ip_forward
Configure iptables to SNAT outgoing packets from the VM
iptables --table nat --append POSTROUTING --source 192.168.1.0/24 --jump SNAT --to 1.0.2.30
iptables --append FORWARD --source 192.168.1.0/24 --jump ACCEPT
Check that the VM has connectivity to the Internet
Configure iptables to DNAT packets to the additional IP to the VM
iptables --table nat --append PREROUTING --destination 1.0.2.30 --to-destination 192.168.1.2
iptables --append FORWARD --destination 192.168.1.2 --jump ACCEPT
Убедитесь, что вы можете подключиться к виртуальной машине по дополнительному IP извне.