diff --git a/handler/tun/client.go b/handler/tun/client.go index c5c21c6..eb29bec 100644 --- a/handler/tun/client.go +++ b/handler/tun/client.go @@ -24,7 +24,7 @@ var ( magicHeader = []byte("GOST") ) -func (h *tunHandler) handleClient(ctx context.Context, conn net.Conn, addr net.Addr, config *tun_util.Config, log logger.Logger) error { +func (h *tunHandler) handleClient(ctx context.Context, conn net.Conn, raddr string, config *tun_util.Config, log logger.Logger) error { ip, _, err := net.ParseCIDR(config.Net) if err != nil { return err @@ -32,7 +32,7 @@ func (h *tunHandler) handleClient(ctx context.Context, conn net.Conn, addr net.A for { err := func() error { - cc, err := h.router.Dial(ctx, addr.Network(), addr.String()) + cc, err := h.router.Dial(ctx, "udp", raddr) if err != nil { return err } diff --git a/handler/tun/handler.go b/handler/tun/handler.go index d4a42d3..abfc333 100644 --- a/handler/tun/handler.go +++ b/handler/tun/handler.go @@ -87,26 +87,17 @@ func (h *tunHandler) Handle(ctx context.Context, conn net.Conn, opts ...handler. }).Infof("%s >< %s", conn.RemoteAddr(), conn.LocalAddr()) }() - network := "udp" - var raddr net.Addr - var err error - var target *chain.Node if h.hop != nil { target = h.hop.Select(ctx) } if target != nil { - raddr, err = net.ResolveUDPAddr(network, target.Addr) - if err != nil { - log.Error(err) - return err - } log = log.WithFields(map[string]any{ - "dst": fmt.Sprintf("%s/%s", raddr.String(), raddr.Network()), + "dst": fmt.Sprintf("%s/%s", target.Addr, "udp"), }) log.Debugf("%s >> %s", conn.RemoteAddr(), target.Addr) - if err := h.handleClient(ctx, conn, raddr, config, log); err != nil { + if err := h.handleClient(ctx, conn, target.Addr, config, log); err != nil { log.Error(err) } return nil