I do exactly this. My zwave controller is connected to a Raspberry Pi in my livingroom, while OH runs on a in a VM. I have the zstick’s serial port shared with ser2net. There is a udev rule that names my zwave controller /dev/zstick.
ser2net.conf:
7000:raw:0:/dev/zstick:115200 8DATABITS NONE 1STOPBIT
Originally OH ran in a Linux VM. I used socat to connect the port shared with ser2net to a pty:
/usr/bin/socat PTY,link=/dev/zwave,group=dialout,mode=660 TCP:192.168.55.33:7000
This worked fairly well. The biggest problem I had is that if communication is interrupted between the VM and the pi socat dies and I have to restart both it and OH. There may be a way around this, but I ended up moving OH to a Windows VM and using Netburner Virtual Comm Port instead. This wasn’t my ideal solution, but it’s been much more reliable (I can unplug my zwave controller from the pi, pair a device, then plug the controller back in and the zwave will still function without having to touch a thing).