mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 10:27:46 +08:00
* feat(dns): resolve libp2p.direct addresses locally without network I/O p2p-forge hostnames encode IP addresses directly (e.g., 1-2-3-4.peerID.libp2p.direct -> 1.2.3.4), so DNS queries are wasteful. kubo now parses these IPs in-memory. - applies to both default libp2p.direct and custom AutoTLS.DomainSuffix - TXT queries still delegate to network for ACME DNS-01 compatibility - https://github.com/ipfs/kubo/pull/11140#discussion_r2683477754 use fallback to network DNS instead of returning errors when local parsing fails, ensuring forward compatibility with future DNS records - https://github.com/ipfs/kubo/pull/11140#discussion_r2683512408 add peerID validation using peer.Decode(), matching libp2p.direct server behavior, with fallback on invalid peerID - https://github.com/ipfs/kubo/pull/11140#discussion_r2683521930 document interaction with DNS.Resolvers in config.md - https://github.com/ipfs/kubo/pull/11140#discussion_r2683526647 add AutoTLS.SkipDNSLookup config flag to disable local resolution (useful for debugging or custom DNS override scenarios) - https://github.com/ipfs/kubo/pull/11140#discussion_r2683533462 add E2E test verifying libp2p.direct resolves locally even when DNS.Resolvers points to a broken server additional improvements: - use madns.BasicResolver interface instead of custom basicResolver - add compile-time interface checks for p2pForgeResolver and madns.Resolver - refactor tests: merge IPv4/IPv6, add helpers, use config.DefaultDomainSuffix - improve changelog to explain public good benefit (reducing DNS load) Fixes #11136
55 lines
2.4 KiB
Go
55 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"time"
|
|
|
|
p2pforge "github.com/ipshipyard/p2p-forge/client"
|
|
)
|
|
|
|
// AutoTLS includes optional configuration of p2p-forge client of service
|
|
// for obtaining a domain and TLS certificate to improve connectivity for web
|
|
// browser clients. More: https://github.com/ipshipyard/p2p-forge#readme
|
|
type AutoTLS struct {
|
|
// Enables the p2p-forge feature and all related features.
|
|
Enabled Flag `json:",omitempty"`
|
|
|
|
// Optional, controls if Kubo should add /tls/sni/.../ws listener to every /tcp port if no explicit /ws is defined in Addresses.Swarm
|
|
AutoWSS Flag `json:",omitempty"`
|
|
|
|
// Optional, controls whether to skip network DNS lookups for p2p-forge domains.
|
|
// Applies to resolution via DNS.Resolvers, including /dns* multiaddrs in go-libp2p.
|
|
// When enabled (default), A/AAAA queries for *.libp2p.direct are resolved
|
|
// locally by parsing the IP directly from the hostname, avoiding network I/O.
|
|
// Set to false to always use network DNS (useful for debugging).
|
|
SkipDNSLookup Flag `json:",omitempty"`
|
|
|
|
// Optional override of the parent domain that will be used
|
|
DomainSuffix *OptionalString `json:",omitempty"`
|
|
|
|
// Optional override of HTTP API that acts as ACME DNS-01 Challenge broker
|
|
RegistrationEndpoint *OptionalString `json:",omitempty"`
|
|
|
|
// Optional Authorization token, used with private/test instances of p2p-forge
|
|
RegistrationToken *OptionalString `json:",omitempty"`
|
|
|
|
// Optional registration delay used when AutoTLS.Enabled is not explicitly set to true in config
|
|
RegistrationDelay *OptionalDuration `json:",omitempty"`
|
|
|
|
// Optional override of CA ACME API used by p2p-forge system
|
|
CAEndpoint *OptionalString `json:",omitempty"`
|
|
|
|
// Optional, controls if features like AutoWSS should generate shorter /dnsX instead of /ipX/../sni/..
|
|
ShortAddrs Flag `json:",omitempty"`
|
|
}
|
|
|
|
const (
|
|
DefaultAutoTLSEnabled = true // with DefaultAutoTLSRegistrationDelay, unless explicitly enabled in config
|
|
DefaultDomainSuffix = p2pforge.DefaultForgeDomain
|
|
DefaultRegistrationEndpoint = p2pforge.DefaultForgeEndpoint
|
|
DefaultCAEndpoint = p2pforge.DefaultCAEndpoint
|
|
DefaultAutoWSS = true // requires AutoTLS.Enabled
|
|
DefaultAutoTLSShortAddrs = true // requires AutoTLS.Enabled
|
|
DefaultAutoTLSSkipDNSLookup = true // skip network DNS for p2p-forge domains
|
|
DefaultAutoTLSRegistrationDelay = 1 * time.Hour
|
|
)
|