Skip to content

Commit

Permalink
Add --p2p-host-dns flag to specify p2p external DNS (#4608)
Browse files Browse the repository at this point in the history
Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
  • Loading branch information
timmyers and rauljordan committed Jan 22, 2020
1 parent cc58b5a commit a1e3c2d
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 1 deletion.
1 change: 1 addition & 0 deletions beacon-chain/main.go
Expand Up @@ -51,6 +51,7 @@ var appFlags = []cli.Flag{
cmd.P2PUDPPort,
cmd.P2PTCPPort,
cmd.P2PHost,
cmd.P2PHostDNS,
cmd.P2PMaxPeers,
cmd.P2PPrivKey,
cmd.P2PWhitelist,
Expand Down
1 change: 1 addition & 0 deletions beacon-chain/node/node.go
Expand Up @@ -269,6 +269,7 @@ func (b *BeaconNode) registerP2P(ctx *cli.Context) error {
RelayNodeAddr: ctx.GlobalString(cmd.RelayNode.Name),
DataDir: ctx.GlobalString(cmd.DataDirFlag.Name),
HostAddress: ctx.GlobalString(cmd.P2PHost.Name),
HostDNS: ctx.GlobalString(cmd.P2PHostDNS.Name),
PrivateKey: ctx.GlobalString(cmd.P2PPrivKey.Name),
TCPPort: ctx.GlobalUint(cmd.P2PTCPPort.Name),
UDPPort: ctx.GlobalUint(cmd.P2PUDPPort.Name),
Expand Down
1 change: 1 addition & 0 deletions beacon-chain/p2p/config.go
Expand Up @@ -10,6 +10,7 @@ type Config struct {
Discv5BootStrapAddr []string
RelayNodeAddr string
HostAddress string
HostDNS string
PrivateKey string
DataDir string
TCPPort uint
Expand Down
11 changes: 11 additions & 0 deletions beacon-chain/p2p/options.go
Expand Up @@ -45,6 +45,17 @@ func buildOptions(cfg *Config, ip net.IP, priKey *ecdsa.PrivateKey) []libp2p.Opt
return addrs
}))
}
if cfg.HostDNS != "" {
options = append(options, libp2p.AddrsFactory(func(addrs []multiaddr.Multiaddr) []multiaddr.Multiaddr {
external, err := multiaddr.NewMultiaddr(fmt.Sprintf("/dns4/%s/tcp/%d", cfg.HostDNS, cfg.TCPPort))
if err != nil {
log.WithError(err).Error("Unable to create external multiaddress")
} else {
addrs = append(addrs, external)
}
return addrs
}))
}
return options
}

Expand Down
21 changes: 20 additions & 1 deletion beacon-chain/p2p/service.go
Expand Up @@ -217,7 +217,15 @@ func (s *Service) Start() {

p2pHostAddress := s.cfg.HostAddress
p2pTCPPort := s.cfg.TCPPort
logExternalIP4Addr(s.host.ID(), p2pHostAddress, p2pTCPPort)

if p2pHostAddress != "" {
logExternalIP4Addr(s.host.ID(), p2pHostAddress, p2pTCPPort)
}

p2pHostDNS := s.cfg.HostDNS
if p2pHostDNS != "" {
logExternalDNSAddr(s.host.ID(), p2pHostDNS, p2pTCPPort)
}
}

// Stop the p2p service and terminate all peer connections.
Expand Down Expand Up @@ -380,3 +388,14 @@ func logExternalIP4Addr(id peer.ID, addr string, port uint) {
).Info("Node started external p2p server")
}
}

func logExternalDNSAddr(id peer.ID, addr string, port uint) {
if addr != "" {
p := strconv.FormatUint(uint64(port), 10)

log.WithField(
"multiAddr",
"/dns4/"+addr+"/tcp/"+p+"/p2p/"+id.String(),
).Info("Node started external p2p server")
}
}
1 change: 1 addition & 0 deletions beacon-chain/usage.go
Expand Up @@ -95,6 +95,7 @@ var appHelpFlagGroups = []flagGroup{
Name: "p2p",
Flags: []cli.Flag{
cmd.P2PHost,
cmd.P2PHostDNS,
cmd.P2PMaxPeers,
cmd.P2PPrivKey,
cmd.P2PWhitelist,
Expand Down
6 changes: 6 additions & 0 deletions shared/cmd/flags.go
Expand Up @@ -94,6 +94,12 @@ var (
Usage: "The IP address advertised by libp2p. This may be used to advertise an external IP.",
Value: "",
}
// P2PHostDNS defines the host DNS to be used by libp2p.
P2PHostDNS = cli.StringFlag{
Name: "p2p-host-dns",
Usage: "The DNS address advertised by libp2p. This may be used to advertise an external DNS.",
Value: "",
}
// P2PPrivKey defines a flag to specify the location of the private key file for libp2p.
P2PPrivKey = cli.StringFlag{
Name: "p2p-priv-key",
Expand Down

0 comments on commit a1e3c2d

Please sign in to comment.