Fix ping timeout

This commit is contained in:
世界
2026-06-01 17:51:02 +08:00
parent 3d4616746c
commit da0cd68115
9 changed files with 18 additions and 10 deletions

View File

@@ -10,6 +10,7 @@ const (
ReadPayloadTimeout = 300 * time.Millisecond ReadPayloadTimeout = 300 * time.Millisecond
DNSTimeout = 10 * time.Second DNSTimeout = 10 * time.Second
UDPTimeout = 5 * time.Minute UDPTimeout = 5 * time.Minute
ICMPTimeout = 10 * time.Second
DefaultURLTestInterval = 3 * time.Minute DefaultURLTestInterval = 3 * time.Minute
DefaultURLTestIdleTimeout = 30 * time.Minute DefaultURLTestIdleTimeout = 30 * time.Minute
StartTimeout = 10 * time.Second StartTimeout = 10 * time.Second

View File

@@ -106,7 +106,8 @@ type Endpoint struct {
relayServerPort *uint16 relayServerPort *uint16
relayServerStaticEndpoints []netip.AddrPort relayServerStaticEndpoints []netip.AddrPort
udpTimeout time.Duration udpTimeout time.Duration
icmpTimeout time.Duration
systemInterface bool systemInterface bool
systemInterfaceName string systemInterfaceName string
@@ -258,6 +259,7 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
relayServerPort: options.RelayServerPort, relayServerPort: options.RelayServerPort,
relayServerStaticEndpoints: options.RelayServerStaticEndpoints, relayServerStaticEndpoints: options.RelayServerStaticEndpoints,
udpTimeout: udpTimeout, udpTimeout: udpTimeout,
icmpTimeout: C.ICMPTimeout,
systemInterface: options.SystemInterface, systemInterface: options.SystemInterface,
systemInterfaceName: options.SystemInterfaceName, systemInterfaceName: options.SystemInterfaceName,
systemInterfaceMTU: options.SystemInterfaceMTU, systemInterfaceMTU: options.SystemInterfaceMTU,
@@ -390,7 +392,7 @@ func (t *Endpoint) postStart() error {
if gErr != nil { if gErr != nil {
return gonet.TranslateNetstackError(gErr) return gonet.TranslateNetstackError(gErr)
} }
icmpForwarder := tun.NewICMPForwarder(t.ctx, ipStack, t, t.udpTimeout) icmpForwarder := tun.NewICMPForwarder(t.ctx, ipStack, t, t.icmpTimeout)
ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket)
ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket)
t.stack = ipStack t.stack = ipStack

View File

@@ -380,6 +380,7 @@ func (t *Inbound) Start(stage adapter.StartStage) error {
Tun: tunInterface, Tun: tunInterface,
TunOptions: t.tunOptions, TunOptions: t.tunOptions,
UDPTimeout: t.udpTimeout, UDPTimeout: t.udpTimeout,
ICMPTimeout: C.ICMPTimeout,
Handler: t, Handler: t,
Logger: t.logger, Logger: t.logger,
ForwarderBindInterface: forwarderBindInterface, ForwarderBindInterface: forwarderBindInterface,

View File

@@ -75,12 +75,13 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
udpTimeout = C.UDPTimeout udpTimeout = C.UDPTimeout
} }
wgEndpoint, err := wireguard.NewEndpoint(wireguard.EndpointOptions{ wgEndpoint, err := wireguard.NewEndpoint(wireguard.EndpointOptions{
Context: ctx, Context: ctx,
Logger: logger, Logger: logger,
System: options.System, System: options.System,
Handler: ep, Handler: ep,
UDPTimeout: udpTimeout, UDPTimeout: udpTimeout,
Dialer: outboundDialer, ICMPTimeout: C.ICMPTimeout,
Dialer: outboundDialer,
CreateDialer: func(interfaceName string) N.Dialer { CreateDialer: func(interfaceName string) N.Dialer {
return common.Must1(dialer.NewDefault(ctx, option.DialerOptions{ return common.Must1(dialer.NewDefault(ctx, option.DialerOptions{
BindInterface: interfaceName, BindInterface: interfaceName,

View File

@@ -28,6 +28,7 @@ type DeviceOptions struct {
System bool System bool
Handler tun.Handler Handler tun.Handler
UDPTimeout time.Duration UDPTimeout time.Duration
ICMPTimeout time.Duration
CreateDialer func(interfaceName string) N.Dialer CreateDialer func(interfaceName string) N.Dialer
Name string Name string
MTU uint32 MTU uint32

View File

@@ -93,7 +93,7 @@ func newStackDevice(options DeviceOptions) (*stackDevice, error) {
if options.Handler != nil { if options.Handler != nil {
ipStack.SetTransportProtocolHandler(tcp.ProtocolNumber, tun.NewTCPForwarder(options.Context, ipStack, options.Handler).HandlePacket) ipStack.SetTransportProtocolHandler(tcp.ProtocolNumber, tun.NewTCPForwarder(options.Context, ipStack, options.Handler).HandlePacket)
ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, tun.NewUDPForwarder(options.Context, ipStack, options.Handler, options.UDPTimeout).HandlePacket) ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, tun.NewUDPForwarder(options.Context, ipStack, options.Handler, options.UDPTimeout).HandlePacket)
icmpForwarder := tun.NewICMPForwarder(options.Context, ipStack, options.Handler, options.UDPTimeout) icmpForwarder := tun.NewICMPForwarder(options.Context, ipStack, options.Handler, options.ICMPTimeout)
icmpForwarder.SetLocalAddresses(inet4Address, inet6Address) icmpForwarder.SetLocalAddresses(inet4Address, inet6Address)
ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket)
ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket)

View File

@@ -78,7 +78,7 @@ func newSystemStackDevice(options DeviceOptions) (*systemStackDevice, error) {
if options.Handler != nil { if options.Handler != nil {
ipStack.SetTransportProtocolHandler(tcp.ProtocolNumber, tun.NewTCPForwarder(options.Context, ipStack, options.Handler).HandlePacket) ipStack.SetTransportProtocolHandler(tcp.ProtocolNumber, tun.NewTCPForwarder(options.Context, ipStack, options.Handler).HandlePacket)
ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, tun.NewUDPForwarder(options.Context, ipStack, options.Handler, options.UDPTimeout).HandlePacket) ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, tun.NewUDPForwarder(options.Context, ipStack, options.Handler, options.UDPTimeout).HandlePacket)
icmpForwarder := tun.NewICMPForwarder(options.Context, ipStack, options.Handler, options.UDPTimeout) icmpForwarder := tun.NewICMPForwarder(options.Context, ipStack, options.Handler, options.ICMPTimeout)
icmpForwarder.SetLocalAddresses(inet4Address, inet6Address) icmpForwarder.SetLocalAddresses(inet4Address, inet6Address)
ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket)
ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket)

View File

@@ -109,6 +109,7 @@ func NewEndpoint(options EndpointOptions) (*Endpoint, error) {
System: options.System, System: options.System,
Handler: options.Handler, Handler: options.Handler,
UDPTimeout: options.UDPTimeout, UDPTimeout: options.UDPTimeout,
ICMPTimeout: options.ICMPTimeout,
CreateDialer: options.CreateDialer, CreateDialer: options.CreateDialer,
Name: options.Name, Name: options.Name,
MTU: options.MTU, MTU: options.MTU,

View File

@@ -17,6 +17,7 @@ type EndpointOptions struct {
System bool System bool
Handler tun.Handler Handler tun.Handler
UDPTimeout time.Duration UDPTimeout time.Duration
ICMPTimeout time.Duration
Dialer N.Dialer Dialer N.Dialer
CreateDialer func(interfaceName string) N.Dialer CreateDialer func(interfaceName string) N.Dialer
Name string Name string