SimpleTunnel Visual Representation Clarification

I was wondering if I could get a visual clarification on how the SimpleTunnel is set up to work. I created a per-app vpn client based off of SimpleTunnel and want to ensure I understand its inner workings.

This is how I currently believe SimpleTunnel works:


App (Attempting to reach internet/some server)

^

| (Re-routed via device kernal to Packet Flow of vpn client)

v

VPN Client App < - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > tunnel_server

(Packets get sent to and from tunnel_server via tunnel) ^ |

| | (Packets get forwarded to utun interface)

***(response gets forwarded to tunnel_server) | v

utun interface

^ |

***(response gets forwarded to utun interface) | | (packets get forwarded to actual server)

| v

internet/some server


*** = packets get dropped so it doesnt necessarily reach this stage but ideally it would



So is there only one utun interface which the tunnel_server uses to reach the requested server?

SimpleTunnel Visual Representation Clarification
 
 
Q