don't resolve server addr for tun handler

This commit is contained in:
ginuerzh 2022-11-25 18:14:47 +08:00
parent 54ab717f6b
commit bcfff22669
2 changed files with 4 additions and 13 deletions

View File

@ -24,7 +24,7 @@ var (
magicHeader = []byte("GOST") 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) ip, _, err := net.ParseCIDR(config.Net)
if err != nil { if err != nil {
return err return err
@ -32,7 +32,7 @@ func (h *tunHandler) handleClient(ctx context.Context, conn net.Conn, addr net.A
for { for {
err := func() error { err := func() error {
cc, err := h.router.Dial(ctx, addr.Network(), addr.String()) cc, err := h.router.Dial(ctx, "udp", raddr)
if err != nil { if err != nil {
return err return err
} }

View File

@ -87,26 +87,17 @@ func (h *tunHandler) Handle(ctx context.Context, conn net.Conn, opts ...handler.
}).Infof("%s >< %s", conn.RemoteAddr(), conn.LocalAddr()) }).Infof("%s >< %s", conn.RemoteAddr(), conn.LocalAddr())
}() }()
network := "udp"
var raddr net.Addr
var err error
var target *chain.Node var target *chain.Node
if h.hop != nil { if h.hop != nil {
target = h.hop.Select(ctx) target = h.hop.Select(ctx)
} }
if target != nil { if target != nil {
raddr, err = net.ResolveUDPAddr(network, target.Addr)
if err != nil {
log.Error(err)
return err
}
log = log.WithFields(map[string]any{ 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) 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) log.Error(err)
} }
return nil return nil