gulden-seeder ============== Gulden-seeder is a crawler for the Gulden 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 old nodes to request new IP addresses from, but only reports recent nodes. * keeps statistics to base decisions on. * very low memory (a few tens of megabytes) and cpu requirements. * crawlers run in parallel (by default 24 threads simultaneously). REQUIREMENTS ------------ $ sudo apt-get install build-essential libboost-all-dev libssl-dev COMPILING --------- Compiling will require boost and ssl. On debian systems, these are provided by `libboost-dev` and `libssl-dev` respectively. $ make This will produce the `dnsseed` binary. BASIC USAGE/SETUP ----- Assuming you want to run a dns seed on seed.MYURL.com, you will need an authorative NS record in MYURL.com's domain record, pointing to for example vps.MYURL.com: $ dig -t NS seed.MYURL.com ;; ANSWER SECTION seed.MYURL.com. 86400 IN NS vps.MYURL.com. On the system vps.MYURL.com, you can now run dnsseed: ./dnsseed -h seed.MYURL.com -n vps.MYURL.com If you want the DNS server to report SOA records, please provide an e-mail address (with the @ part replaced by .) using -m. 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 dnsseed in userspace, using the -p 5353 option. See also the example at the bottom which gives a working example of how to do this on ubuntu. PERMANENT SETUP ____ For a more robust/permanent setup - that auto starts on server reboot. 1) Modify variables in dnsseed_service.sh 2) sudo cp dnsseed_service.sh /etc/init.d/guldendnsseed 3) sudo chmod +x /etc/init.d/guldendnsseed 4) sudo service guldendnsseed start 5) sudo update-rc.d guldendnsseed defaults ADDITIONAL SETUP ________________ The seeders periodically scan for two files "nodes4.txt" (ipv4); "nodes6.txt" (ipv6). (Plain text files with one ip per line - no port numbering) If these files are present, the seeders will use these as an additional source of IPs to feed into the crawler, this can help get better network coverage. For best seeder performance, it is advised to acquire an external source that can provide such a list of IPs and then use a cronjob to have it periodically place new versions of the lists in these files. EXAMPLE SETUP - RUNNING TWO DNS SEEDS ON ONE UBUNTU SERVER USING TWO IPS (testnet + mainnet) __________________________________________________________________ Basic setup to run two DNS seeds from one box (one for mainnet one for testnet) Assumes ufw is already set up and enabled. Please ensure there is not already a service on port 53 (dnsmasq/avahi) if there is that must first be removed. Assuming two external IPs for the box, with NS records already set up: 104.233.1.1 seed.example.com vps.example.com 104.233.1.2 testseed.example.com testvps.example.com Place the following in /etc/ufw/before.rules to forward the incoming traffic to different ports based on the IPs: *nat :PREROUTING ACCEPT [0:0] -F PREROUTING -A PREROUTING -d 104.233.1.1 -p udp --dport 53 -j REDIRECT --to-port 5454 -A PREROUTING -d 104.233.1.1 -p tcp --dport 53 -j REDIRECT --to-port 5454 -A PREROUTING -d 104.233.1.2 -p udp --dport 53 -j REDIRECT --to-port 5455 -A PREROUTING -d 104.233.1.2 -p tcp --dport 53 -j REDIRECT --to-port 5455 COMMIT Allow ports through ufw: sudo ufw allow 53 && sudo ufw allow 5454 && sudo ufw allow 5455 && sudo ufw reload Set up init scripts: sudo cp dnsseed_service.sh /etc/init.d/guldendns sudo cp dnsseed_service.sh /etc/init.d/guldendnstestnet Configure init scripts: Open guldendns script and set the variables in it. PREFIX1=seed PREFIX2=vps PORT=5454 URL=example.com Open guldendnstestnet and set the variables in it. PREFIX1=testseed PREFIX2=testvps PORT=5455 URL=example.com Note that you must also set the APPROOT for each of the above, to seperate folders, you will need two copies of the folder one for each app to run in. Finally run the init scripts and wait a while. You can confirm from the inside if everything works by running tail -f on the log file. You can confirm (from the outside) if everything works via nslookup.