Instalando o dcrseeder
1. Introdução
O serviço dcrseeder é o agregador da rede Decred, que expõe uma lista de nodes confiáveis usando um servidor de DNS interno. O dcrd se conecta nos servidores DNS da rede e procura nodes válidos. É esse serviço que frequentemente valida os nodes conhecidos e disponibiliza essa informação para outros nodes, que por sua vez passam a outros e assim por diante.
Figura 1 - dcrd consulta dcrseeder para atualizar informações sobre nodes
Para saber mais, veja o artigo A estrutura do Decred.
Pré-requisito
A linguagem Go 1.9 deve estar instalada. Para instalar, veja o artigo Instalando o Go (golang).
2. Instalação
Os passos a seguir foram executados em um Debian 9 64-bit.
a) Clone o repositório do dcrseeder:
$ git clone https://github.com/decred/dcrseeder $HOME/go/src/github.com/decred/dcrseeder
Se não possui o git instalado:
$ sudo apt-get install git
b) Entre no diretório que acabou de ser criado, execute o Dep para verificar as dependências e compile:
$ cd $HOME/go/src/github.com/decred/dcrseeder
$ dep ensure
$ go build
ou
$ /usr/local/bin/go/bin/dep ensure
$ /usr/local/bin/go/bin/go build
c) Se não ocorreu nenhum erro, deve haver um arquivo dcrseeder
com atributo executável. Tente visualizar a mensagem de ajuda do dcrseeder:
$ ./dcrseeder --help
d) Para ter uma instalação permanente, instale o dcrseeder através do Go:
$ go install . ./cmd/...
3. Execução
O dcrd guarda informações sobre outros nodes dcrd no arquivo peers.json
, que fica no diretório padrão do dcrd, dentro do diretório da rede (mainnet
, testnet2
). Quando busca outros nodes na rede o dcrd lê esse arquivo e tenta se conectar nos nodes já conhecidos. Depois de um tempo sem executar o dcrd, é possível que todos aqueles nodes conhecidos tenham sido desligados ou que seus endereços IP já tenham mudado.
Figura 2 - dcrd usa dcrseeder para localizar outros nodes da rede
Para resolver isso o dcrd se conecta nos servidores DNS da rede e procura nodes válidos. É o serviço dcrseeder que frequentemente valida os nodes conhecidos e disponibiliza essa informação para outros nodes e assim por diante.
Figura 3 - Um esquema simplificado das consultas DNS
Servidores DNS se comunicam usando a porta UDP/53. Para evitar ataques que comprometam todo o sistema, o dcrseeder é executado como um usuário comum e por isso só pode escutar em portas não privilegiadas, acima de 1024. Será necessário redirecionar o tráfego DNS com origem na Internet, padrão UDP/53, para essa porta, como UDP/5354, por exemplo.
Figura 4 - PAT configurado no firewall
$ sudo iptables -t nat -A PREROUTING -i $INTERFACE -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:5354
A variável $INTERFACE
deve ser substituída pelo nome do dispositivo no sistema operacional (eth0, wlan0, ens33, etc.).
Além dessa modificação no firewall local, será necessário modificar também o roteador de borda, que faz a conexão com a Internet. Será necessário configurar no roteador pelo menos um NAT (Network Address Translation), que é uma tradução de endereços IP. Quando chegar no endereço IP público um pacote para a porta UDP/53, o roteador encaminhará o pacote para o endereço IP do servidor onde o dcrseeder está sendo executado.
Também é possível executar ambas as configurações no roteador de borda para não precisar configurar o PAT (Port Address Translation) no iptables local. Dessa forma o pacote chega na interface externa do roteador de borda em UDP/53 e sai na rede interna com destino ao dcrseeder na porta UDP/5354. Tradução de endereço IP e porta em uma única configuração, também chamada de PAT.
Também será necessário criar uma regra de firewall no iptables local que permita a entrada de pacotes na porta UDP/5354:
$ sudo iptables -A INPUT -p udp --dport 5354 -m comment --comment "dcrseeder" -j ACCEPT
Para executar o dcrseeder na porta UDP/5354:
$ ./dcrseeder -H dnsseed.mydcrdomain.com -n ns.mydcrdomain.com -s 127.0.0.1
As opções -H
, -n
e -s
são obrigatórias:
-H <host> Nome de host para registro do DNS Seed
-n <ns> Nome de host do Servidor DNS do domínio
-s <host> Nome de host para conexão do dcrseeder
--testnet Funcionar como DNS Seeder da Testnet
4. Atualização
Para atualizar uma instalação existente:
$ cd $GOPATH/src/github.com/decred/dcrseeder
$ git pull
$ dep ensure
$ go install . ./cmd/...