Skip to content

Commit def3347

Browse files
committed
feat: refactor wss and instead of using wss port use entire wss addr
1 parent c512355 commit def3347

File tree

9 files changed

+69
-49
lines changed

9 files changed

+69
-49
lines changed

cmd/bee/cmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ const (
8484
optionSkipPostageSnapshot = "skip-postage-snapshot"
8585
optionNameMinimumGasTipCap = "minimum-gas-tip-cap"
8686
optionAutoTLSEnabled = "autotls-enabled"
87-
optionP2PWSSPort = "p2p-wss-port"
87+
optionP2PWSSAddr = "p2p-wss-addr"
8888
optionNATWSSAddr = "nat-wss-addr"
8989
optionAutoTLSStorageDir = "autotls-storage-dir"
9090
optionAutoTLSDomain = "autotls-domain"
@@ -301,7 +301,7 @@ func (c *command) setAllFlags(cmd *cobra.Command) {
301301
cmd.Flags().Bool(optionSkipPostageSnapshot, false, "skip postage snapshot")
302302
cmd.Flags().Uint64(optionNameMinimumGasTipCap, 0, "minimum gas tip cap in wei for transactions, 0 means use suggested gas tip cap")
303303
cmd.Flags().Bool(optionAutoTLSEnabled, false, "Enable AutoTLS for secure WebSocket connections")
304-
cmd.Flags().String(optionP2PWSSPort, "1635", "p2p wss port")
304+
cmd.Flags().String(optionP2PWSSAddr, ":1635", "p2p wss address")
305305
cmd.Flags().String(optionNATWSSAddr, "", "WSS NAT exposed address")
306306
cmd.Flags().String(optionAutoTLSStorageDir, "./p2p-tls-certs", "Data directory for certificate storage (default ./p2p-tls-certs)")
307307
cmd.Flags().String(optionAutoTLSDomain, p2pforge.DefaultForgeDomain, "autotls domain")

cmd/bee/cmd/start.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ func buildBeeNode(ctx context.Context, c *command, cmd *cobra.Command, logger lo
282282
AllowPrivateCIDRs: c.config.GetBool(optionNameAllowPrivateCIDRs),
283283
APIAddr: c.config.GetString(optionNameAPIAddr),
284284
AutoTLSEnabled: c.config.GetBool(optionAutoTLSEnabled),
285-
WSSPort: c.config.GetString(optionP2PWSSPort),
285+
WSSAddr: c.config.GetString(optionP2PWSSAddr),
286286
AutoTLSStorageDir: c.config.GetString(optionAutoTLSStorageDir),
287287
BlockchainRpcEndpoint: c.config.GetString(optionNameBlockchainRpcEndpoint),
288288
BlockProfile: c.config.GetBool(optionNamePProfBlock),

packaging/bee.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ password-file: "/var/lib/bee/password"
122122
# withdrawal-addresses-whitelist: []
123123
## enable autotls (default: false)
124124
# autotls-enabled: false
125-
## wss port (default: 1635)
126-
# p2p-wss-port: "1635"
125+
## wss address (default: :1635)
126+
# p2p-wss-addr: :1635
127127
## WSS NAT exposed address
128128
# nat-wss-addr: ""
129129
## autotls certificate storage directory (default: ./p2p-tls-certs)

packaging/homebrew-amd64/bee.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ password-file: "/usr/local/var/lib/swarm-bee/password"
122122
# withdrawal-addresses-whitelist: []
123123
## enable autotls (default: false)
124124
# autotls-enabled: false
125-
## wss port (default: 1635)
126-
# p2p-wss-port: "1635"
125+
## wss address (default: :1635)
126+
# p2p-wss-addr: :1635
127127
## WSS NAT exposed address
128128
# nat-wss-addr: ""
129129
## autotls certificate storage directory (default: ./p2p-tls-certs)

packaging/homebrew-arm64/bee.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ password-file: "/opt/homebrew/var/lib/swarm-bee/password"
122122
# withdrawal-addresses-whitelist: []
123123
## enable autotls (default: false)
124124
# autotls-enabled: false
125-
## wss port (default: 1635)
126-
# p2p-wss-port: "1635"
125+
## wss address (default: :1635)
126+
# p2p-wss-addr: :1635
127127
## WSS NAT exposed address
128128
# nat-wss-addr: ""
129129
## autotls certificate storage directory (default: ./p2p-tls-certs)

packaging/scoop/bee.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ password-file: "./password"
122122
# withdrawal-addresses-whitelist: []
123123
## enable autotls (default: false)
124124
# autotls-enabled: false
125-
## wss port (default: 1635)
126-
# p2p-wss-port: "1635"
125+
## wss address (default: :1635)
126+
# p2p-wss-addr: :1635
127127
## WSS NAT exposed address
128128
# nat-wss-addr: ""
129129
## autotls certificate storage directory (default: ./p2p-tls-certs)

pkg/node/bootstrap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func bootstrapNode(
101101
NATAddr: o.NATAddr,
102102
EnableWS: o.EnableWS,
103103
AutoTLSEnabled: o.AutoTLSEnabled,
104-
WSSPort: o.WSSPort,
104+
WSSAddr: o.WSSAddr,
105105
AutoTLSStorageDir: o.AutoTLSStorageDir,
106106
AutoTLSDomain: o.AutoTLSDomain,
107107
AutoTLSRegistrationEndpoint: o.AutoTLSRegistrationEndpoint,

pkg/node/node.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ type Options struct {
129129
AllowPrivateCIDRs bool
130130
APIAddr string
131131
AutoTLSEnabled bool
132-
WSSPort string
132+
WSSAddr string
133133
AutoTLSStorageDir string
134134
BlockchainRpcEndpoint string
135135
BlockProfile bool
@@ -660,7 +660,7 @@ func NewBee(
660660
NATAddr: o.NATAddr,
661661
EnableWS: o.EnableWS,
662662
AutoTLSEnabled: o.AutoTLSEnabled,
663-
WSSPort: o.WSSPort,
663+
WSSAddr: o.WSSAddr,
664664
AutoTLSStorageDir: o.AutoTLSStorageDir,
665665
AutoTLSDomain: o.AutoTLSDomain,
666666
AutoTLSRegistrationEndpoint: o.AutoTLSRegistrationEndpoint,

pkg/p2p/libp2p/libp2p.go

Lines changed: 55 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ type Options struct {
144144
WSSNATAddr string
145145
EnableWS bool
146146
AutoTLSEnabled bool
147-
WSSPort string
147+
WSSAddr string
148148
AutoTLSStorageDir string
149149
AutoTLSCAEndpoint string
150150
AutoTLSDomain string
@@ -161,43 +161,38 @@ type Options struct {
161161
}
162162

163163
func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay swarm.Address, addr string, ab addressbook.Putter, storer storage.StateStorer, lightNodes *lightnode.Container, logger log.Logger, tracer *tracing.Tracer, o Options) (*Service, error) {
164-
host, port, err := net.SplitHostPort(addr)
164+
parsedAddr, err := parseAddress(addr)
165165
if err != nil {
166-
return nil, fmt.Errorf("address: %w", err)
166+
return nil, err
167167
}
168168

169-
ip4Addr := "0.0.0.0"
170-
ip6Addr := "::"
171-
172-
if host != "" {
173-
ip := net.ParseIP(host)
174-
if ip4 := ip.To4(); ip4 != nil {
175-
ip4Addr = ip4.String()
176-
ip6Addr = ""
177-
} else if ip6 := ip.To16(); ip6 != nil {
178-
ip6Addr = ip6.String()
179-
ip4Addr = ""
169+
var listenAddrs []string
170+
if parsedAddr.IP4 != "" {
171+
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip4/%s/tcp/%s", parsedAddr.IP4, parsedAddr.Port))
172+
if o.EnableWS {
173+
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip4/%s/tcp/%s/ws", parsedAddr.IP4, parsedAddr.Port))
180174
}
181175
}
182176

183-
var listenAddrs []string
184-
if ip4Addr != "" {
185-
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip4/%s/tcp/%s", ip4Addr, port))
177+
if parsedAddr.IP6 != "" {
178+
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip6/%s/tcp/%s", parsedAddr.IP6, parsedAddr.Port))
186179
if o.EnableWS {
187-
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip4/%s/tcp/%s/ws", ip4Addr, port))
188-
if o.AutoTLSEnabled {
189-
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip4/%s/tcp/%s/tls/sni/*.%s/ws", ip4Addr, o.WSSPort, o.AutoTLSDomain))
190-
}
180+
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip6/%s/tcp/%s/ws", parsedAddr.IP6, parsedAddr.Port))
191181
}
192182
}
193183

194-
if ip6Addr != "" {
195-
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip6/%s/tcp/%s", ip6Addr, port))
196-
if o.EnableWS {
197-
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip6/%s/tcp/%s/ws", ip6Addr, port))
198-
if o.AutoTLSEnabled {
199-
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip6/%s/tcp/%s/tls/sni/*.%s/ws", ip6Addr, o.WSSPort, o.AutoTLSDomain))
200-
}
184+
if o.AutoTLSEnabled {
185+
parsedWssAddr, err := parseAddress(o.WSSAddr)
186+
if err != nil {
187+
return nil, err
188+
}
189+
190+
if parsedWssAddr.IP4 != "" {
191+
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip4/%s/tcp/%s/tls/sni/*.%s/ws", parsedWssAddr.IP4, parsedWssAddr.Port, o.AutoTLSDomain))
192+
}
193+
194+
if parsedWssAddr.IP6 != "" {
195+
listenAddrs = append(listenAddrs, fmt.Sprintf("/ip6/%s/tcp/%s/tls/sni/*.%s/ws", parsedWssAddr.IP6, parsedWssAddr.Port, o.AutoTLSDomain))
201196
}
202197
}
203198

@@ -476,7 +471,7 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay
476471

477472
if o.AutoTLSEnabled && o.EnableWS {
478473
// Check reachability for AutoTLS
479-
logger.Debug("Reachability for AutoTLS: ", autoNAT.Status())
474+
logger.Debug("Reachability for AutoTLS: ", "status", autoNAT.Status().String())
480475
if autoNAT.Status() != network.ReachabilityPublic {
481476
logger.Warning("Node not publicly reachable; AutoTLS may fail")
482477
}
@@ -518,6 +513,37 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay
518513
return s, nil
519514
}
520515

516+
type parsedAddress struct {
517+
IP4 string
518+
IP6 string
519+
Port string
520+
}
521+
522+
func parseAddress(addr string) (*parsedAddress, error) {
523+
host, port, err := net.SplitHostPort(addr)
524+
if err != nil {
525+
return nil, fmt.Errorf("address: %w", err)
526+
}
527+
528+
res := &parsedAddress{
529+
IP4: "0.0.0.0",
530+
IP6: "::",
531+
Port: port,
532+
}
533+
534+
if host != "" {
535+
ip := net.ParseIP(host)
536+
if ip4parsed := ip.To4(); ip4parsed != nil {
537+
res.IP4 = ip4parsed.String()
538+
res.IP6 = ""
539+
} else if ip6parsed := ip.To16(); ip6parsed != nil {
540+
res.IP6 = ip6parsed.String()
541+
res.IP4 = ""
542+
}
543+
}
544+
return res, nil
545+
}
546+
521547
func (s *Service) reachabilityWorker() error {
522548
sub, err := s.host.EventBus().Subscribe([]any{new(event.EvtLocalReachabilityChanged)})
523549
if err != nil {
@@ -847,14 +873,8 @@ func (s *Service) Addresses() (addresses []ma.Multiaddr, err error) {
847873

848874
s.logger.Debug("host listen addresses", "addresses", uniqueAddrs)
849875

850-
// if a resolver is configured, add resolved addresses.
851876
if s.advertisableAddresser != nil {
852-
// Iterate over non-loopback listen addresses to resolve them.
853877
for _, addr := range s.host.Addrs() {
854-
if manet.IsIPLoopback(addr) {
855-
continue
856-
}
857-
858878
resolved, err := s.advertisableAddresser.Resolve(addr)
859879
if err != nil {
860880
s.logger.Warning("could not resolve address", "addr", addr, "error", err)

0 commit comments

Comments
 (0)