diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index aaf563d863221a664b0a72364784bf60975043ec..3765acf6c7cb58aaf4e4d4c77ed672aac3ac06a4 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -1317,13 +1317,16 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
             // for client only
             case VPN_PACKET_OP_CODE_VPN_RECV:{
                 a_ch->stream->esocket->last_ping_request = time(NULL); // not ping, but better  ;-)
+                //ch_sf_tun_client_send(CH_VPN(a_ch), l_vpn_pkt->data, l_vpn_pkt->header.op_data.data_size);
+                dap_events_socket_t *l_es = dap_chain_net_vpn_client_tun_get_esock();
                 // Find tun socket for current worker
-                ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id];
+                ch_sf_tun_socket_t *l_tun =  l_es ? l_es->_inheritor : NULL;
+                //ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id];
                 assert(l_tun);
                 s_stream_session_esocket_send(l_srv_session, l_tun->es, l_vpn_pkt->data, l_vpn_pkt->header.op_data.data_size);
             } break;
 
-            // for servier only
+            // for server only
             case VPN_PACKET_OP_CODE_VPN_SEND: {
                 ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id];
                 assert(l_tun);
diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
index ca890bcfc029c4cf4b47e4cc8844dac5dec5096f..1d1dc7e4efbf7e612f8f33fc131e5bf9ab63fa95 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
@@ -253,6 +253,32 @@ static void m_client_tun_write(dap_events_socket_t * a_es, void * arg)
 //    log_it(L_WARNING, __PRETTY_FUNCTION__);
 }
 
+void m_client_tun_new(dap_events_socket_t * a_es, void * arg)
+{
+    (void) arg;
+    ch_sf_tun_socket_t * l_tun_socket = DAP_NEW_Z(ch_sf_tun_socket_t);
+    if ( l_tun_socket ){
+        l_tun_socket->worker = a_es->worker;
+        l_tun_socket->worker_id = l_tun_socket->worker->id;
+        l_tun_socket->es = a_es;
+        //s_tun_sockets_queue_msg[a_es->worker->id] = dap_events_socket_create_type_queue_ptr_unsafe(a_es->worker, s_tun_recv_msg_callback );
+        //s_tun_sockets[a_es->worker->id] = l_tun_socket;
+
+        a_es->_inheritor = l_tun_socket;
+        //s_tun_attach_queue( a_es->fd );
+        {
+            struct ifreq ifr;
+            memset(&ifr, 0, sizeof(ifr));
+            ifr.ifr_flags = IFF_ATTACH_QUEUE;
+            ioctl(a_es->fd, TUNSETQUEUE, (void *)&ifr);
+        }
+        log_it(L_NOTICE,"New TUN event socket initialized for worker %u" , l_tun_socket->worker_id);
+
+    }else{
+        log_it(L_ERROR, "Can't allocate memory for tun socket");
+    }
+}
+
 static void m_client_tun_read(dap_events_socket_t * a_es, void * arg)
 {
     const static int tun_MTU = 100000; /// TODO Replace with detection of MTU size
@@ -304,6 +330,10 @@ static void m_client_tun_error(dap_events_socket_t * a_es, int a_arg)
   log_it(L_WARNING, " TUN client problems: code %d", a_arg);
 }
 
+dap_events_socket_t* dap_chain_net_vpn_client_tun_get_esock(void) {
+    return s_tun_events_socket;
+}
+
 int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char *a_ipv4_gw_str)
 {
     //    char dev[IFNAMSIZ] = { 0 };
@@ -412,6 +442,7 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char
     pthread_mutex_init(&s_clients_mutex, NULL);
 
     static dap_events_socket_callbacks_t l_s_callbacks = {
+            .new_callback = m_client_tun_new,//m_es_tun_new;
             .read_callback = m_client_tun_read,// for server
             .write_callback = m_client_tun_write,// for client
             .error_callback = m_client_tun_error,
@@ -421,6 +452,7 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char
     s_tun_events_socket = dap_events_socket_wrap_no_add(dap_events_get_default(), s_fd_tun, &l_s_callbacks);
     s_tun_events_socket->type = DESCRIPTOR_TYPE_FILE;
     dap_worker_add_events_socket_auto(s_tun_events_socket);
+    //dap_events_socket_assign_on_worker_mt(l_es, a_worker);
     s_tun_events_socket->_inheritor = NULL;
 
     //return 0;
diff --git a/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h b/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h
index 054b7642ad81f23f99e7787d692349cc0c1d459f..1697d3b6c5f595d24961bfd94c8358991e4c3341 100644
--- a/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h
+++ b/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h
@@ -26,6 +26,7 @@
 #include "dap_chain_net_srv_vpn.h"
 
 int dap_chain_net_vpn_client_tun_init(const char *a_ipv4_gw_str);
+dap_events_socket_t* dap_chain_net_vpn_client_tun_get_esock(void);
 int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char *a_ipv4_gw_str);
 int dap_chain_net_vpn_client_tun_delete(void);
 int dap_chain_net_vpn_client_tun_status(void);