Если vpn не возможен (а именно с его помощью ваша задача решается легко) то вариант с nat (проброс портов) самый верный, что у вас сейчас и сделано
Сейчас доступ организован через NAT на роутере (IP:PORT).
Если нужно по именам, и настраивать это надо только на одной машине, то на этой машине (или в ее локальной сети), где нужен этот доступ необходимо так же настроить проброс портов уже в обратную сторону, на локальный адрес, добавив статически сразу несколько ip адресов в своей локальной сети, определив каждой машине из целевой сети свой ip адрес и делая перенаправление портов в сторону роутера (не уверен умеет ли майкрософтовский так, он кажется слушает сразу все интерфейсы при перенаправлении но с linux таких проблем не будет), т.е. к примеру в вашей целевой сети сервис требует порт 123, три машины 192.168.0.100, 192.168.0.101 и 192.168.0.102 то на роутере определяете перенаправление портов 123100 -> 192.168.0.100:123, 123101 -> 192.168.0.101:123, 123102 -> 192.168.0.102:123 и на локальной машине 192.168.1.100:123 -> ip_роутера:123100, 192.168.1.101:123 -> ip_роутера:123101 и 192.168.1.:123 -> ip_роутера:123102 тут вторая локальная сеть имеет другие ip но это не принципиально
Сделать это можно прямо средствами роутера (он должен уметь добавлять самому себе несколько ip адресов из локальной сети) уже на стороне клиента либо установив в виртуалке дополнительно linux машину.
Если в целевой локальной сети есть доступный ssh сервер то все можно сделать с помощью port mapping (даже на windows).
Имена разрулить через локальный hosts.
В очень похожей ситуации я именно так и делал (все перенаправления делал с помощью ssh), но это жутко неудобно было потом плюнул и поднял обратный vpn (целевой сервер подключался к моему домашнему vpn серверу ибо не имел в принципе внешнего ip, а только пара перенаправленных портов)
p.s. майкрософтовскую файловую сеть так не перекинуть, точнее можно но будут глюки с именами (wins требует броадкаст в локальной сети), т.е. только по ip