Wrong source ip

I’m trying to estblish udp connection inside openvpn network. There’s openvpn server running on ubuntu. Also Navio 2 that connects to that server over 4G and qgroundcontrol computer that does the same. The connection is tap type, meaning all clients get local ip address.
However, when connecting ardupilot to qgroundcontrol, udp packets sent from ardupilot have wrong source ip (belonging to 4G adapter, not vpn IP). The result, qgroundcontrol sends data back to wrong address.
How to force ardupilot using vpn ip address?

Use MAVProxy or mavlink-router

NO thank you.
I guess it’s Ardupilot’s bug. It takes source ip from one adapter, but packets are sent through another. I’m using our home-breed MavRoute software, which works very well. But packets have clearly wrong source IP.
I can of course spoof the IP address with iptables, but that’s not solution.

I have a TUN interface setup to stream mavlink data. Any reason why you went with TAP instead? I haven’t gotten TUN working yet, so any input would be great.