I’ve no idea if I know what I am doing or not.
I vaguely remember concluding that it depended on what sort of communication with the apps was required. If you want to receive responses to requests via the parse() method of a DTH the device network ID needs to be either the MAC address of the remote network interface or a hex version of the IP address:port. If you don’t need or only need parsed responses, I think I’ve found that a single IP address with multiple ports works fine.
However if you want the remote app to be able to initiate messages to the hub then you may well need to use the MAC address as the DNI as you are unlikely to be sending from the server port number. Once one DTH has the MAC address that takes priority over the hex IP address:port and all the responses go in that direction. That is what screws things up.
There is probably a way of having a service manager SmartApp or master DTH dealing with the remote device, but it might need surgery on other SmartApps or DTH.
Creating multiple IP addresses on a network interface is usually possible but I’d have thought you really need multiple MAC addresses to gain anything, and then there is the problem of forcing different apps to use different addresses/interfaces to talk to the same IP address and port on the hub.