diff --git a/internal/net/dialer_source.go b/internal/net/dialer_source.go
index e6a142a08..3d94dedc7 100644
--- a/internal/net/dialer_source.go
+++ b/internal/net/dialer_source.go
@@ -58,6 +58,20 @@ func (s *DialerSource) GrpcContextDialer() func(context.Context, string) (net.Co
 	return nil
 }
 
+// NetContextDialer returns net.DialContext dial function.
+// Returns nil if multinet disabled.
+func (s *DialerSource) NetContextDialer() func(context.Context, string, string) (net.Conn, error) {
+	s.guard.RLock()
+	defer s.guard.RUnlock()
+
+	if s.c.Enabled {
+		return func(ctx context.Context, network, address string) (net.Conn, error) {
+			return s.md.DialContext(ctx, network, address)
+		}
+	}
+	return nil
+}
+
 func (s *DialerSource) Update(c Config) error {
 	s.guard.Lock()
 	defer s.guard.Unlock()
diff --git a/pkg/morph/client/constructor.go b/pkg/morph/client/constructor.go
index 60b5b4b97..2313222f0 100644
--- a/pkg/morph/client/constructor.go
+++ b/pkg/morph/client/constructor.go
@@ -4,10 +4,12 @@ import (
 	"context"
 	"errors"
 	"fmt"
+	"net"
 	"time"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/metrics"
+	internalNet "git.frostfs.info/TrueCloudLab/frostfs-node/internal/net"
 	morphmetrics "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/metrics"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
 	lru "github.com/hashicorp/golang-lru/v2"
@@ -46,6 +48,8 @@ type cfg struct {
 	switchInterval time.Duration
 
 	morphCacheMetrics metrics.MorphCacheMetrics
+
+	dialerSource *internalNet.DialerSource
 }
 
 const (
@@ -153,10 +157,15 @@ func (c *Client) newCli(ctx context.Context, endpoint Endpoint) (*rpcclient.WSCl
 	if err != nil {
 		return nil, nil, fmt.Errorf("read mtls certificates: %w", err)
 	}
+	var netDialContext func(ctx context.Context, network, addr string) (net.Conn, error)
+	if c.cfg.dialerSource != nil { // TODO fix after IR
+		netDialContext = c.cfg.dialerSource.NetContextDialer()
+	}
 	cli, err := rpcclient.NewWS(ctx, endpoint.Address, rpcclient.WSOptions{
 		Options: rpcclient.Options{
 			DialTimeout:     c.cfg.dialTimeout,
 			TLSClientConfig: cfg,
+			NetDialContext:  netDialContext,
 		},
 	})
 	if err != nil {
@@ -291,3 +300,9 @@ func WithMorphCacheMetrics(morphCacheMetrics metrics.MorphCacheMetrics) Option {
 		c.morphCacheMetrics = morphCacheMetrics
 	}
 }
+
+func WithDialerSource(ds *internalNet.DialerSource) Option {
+	return func(c *cfg) {
+		c.dialerSource = ds
+	}
+}