Title: A Basic Guide/Tutorial for Creating DNS Seeders Post by: PereguineBerty on May 07, 2014, 07:03:56 PM These can be a serious pain in the ass to get working and let’s face it – the information available on them is rather fragmented and vague at best, even if you are already accustomed to the workings of currencies.
This guide is divided into three parts: 1) Adapting the seeder software 2) The web stuff 3) Running the seeder Before doing anything else, it would be best to have a web address in mind for your seeder. Most of them use subdomains i.e. dnsseed.yourcoin.org rather than regular page links such as yourcoin.org/dnsseed (this is for DNS record reasons). You don’t have to call yours dnsseed; in fact you can call it what the hell you like. Adapting the Software 1.1) In your currency’s net.cpp enter the address that will be used for your seeder i.e. Code: static const char *strMainNetDNSSeed[][2] = { You will need to recompile all your wallets before release for these changes to take effect, so make sure you settle for something that won’t need to be changed later. 1.2) Download or make a fork of the Litecoin Seeder https://github.com/pooler/litecoin-seeder (https://github.com/pooler/litecoin-seeder) which is based on sipa’s Bitcoin Seeder https://github.com/sipa/bitcoin-seeder (https://github.com/sipa/bitcoin-seeder)). You can use either version and it doesn’t matter whether your coin is SHA-256, Scrypt, X-11 etc. The LTC version is used here for demonstration purposes because it has already been customized and the most relevant/important stuff has already been changed. This means there’s commit history and it’s much easier to show changes using GitHub as it has color coded syntax highlighting - which isn’t possible on this forum. Whichever version you use, read the README to familiarize yourself with the process. 1.3) Using this Litecoin Seeder historical commit as a reference: https://github.com/pooler/litecoin-seeder/commit/3c64ed5ab35f597480712818a27d442100332719#diff-4ed1bfdfd26731997cfdb6c1085c6692 (https://github.com/pooler/litecoin-seeder/commit/3c64ed5ab35f597480712818a27d442100332719#diff-4ed1bfdfd26731997cfdb6c1085c6692), you need to alter your own seeder code with your coin’s ports, magic bytes (pchMessageStart stuff), protocol version, seeder name and the web address of your of your DNS seed. Note: When adding your domain name in the seeder’s main.cpp, if you only have one site to enter, use the following syntax in full: Code: static const string mainnet_seeds[] = {"dnsseed.yourcoin.org", ""}; Otherwise you will get segmentation faults when compiling later. 1.4) Upload your repo to GitHub. The Web Stuff The main point of this stage is to (very loosely put it) redirect traffic from your website by creating a DNS 'NS Record' and an 'A record' to instruct where the resources can be found. This will enable your web address to forward to a host somewhere else, such as a VPS running the DNS Seeder software. 2.1) In your website host’s admin panel website, create a subdomain. If you are self-hosting you probably might not need to create a subdomain and can just use DNS records to achieve the desired result. Use the address entered in your currency’s main.cpp i.e dnsseed.yourcoin.org. Web host admin panels vary tremendously, so you may need to Google how to do this on yours. This link has useful info on creating an NS record http://help.dnsmadeeasy.com/spry_menu/ns-record/ (http://help.dnsmadeeasy.com/spry_menu/ns-record/) You might need to do this twice – once for dnsseed.yourcoin.org and again for www.dnsseed.yourcoin.org. Alternatively, if you self-host, you will need to use the run in this Linux terminal command to create the NS record: Code: dnsseed.yourcoin.org 86400 IN NS 192.168.0.1 (Obviously changing the dnsseed.yourcoin.org and 192.168.0.1 to the relevant domain name and IP address of your VPS). 2.2) Create an 'A Record' (Address record) that points your dnsseed.yourcoin.org to the IP address of your VPS. You can check the DNS status by typing the following into a Windows/Linux/Mac command prompt/terminal, even on your home PC: Code: nslookup dnsseed.yourcoin.org The IP address of your VPS should be displayed if the record is working correctly but be aware it may take a while for the DNS record to propagate, so please be patient. Please note that some web hosts do not allow you to create NS records on shared hosting plans, so if the option to create one isn't available, send their support team a message. They create one for you or may tell you that you need to upgrade your hosting plan. Try your luck with just an A record instead and see if it works. Running the seeder The seeder has to be compiled before it can be used! 3.1) Clone your seeder’s GitHub repository onto the VPS/server that will be running it and navigate into the seeder’s main folder. 3.2) If you are using 64-bit operating systems, make sure that initial compiler flags in the Makefile are set to: Code: CXXFLAGS = -O3 -g0 (i.e. remove –march=native because this will cause architecture issues) 3.3) To compile, type the following the terminal: Code: make 3.4) Now you need to instruct the seeder to run and look up the host and name server, so in the terminal you need to enter something along the lines of the following but (obviously!!)..... change dnsseed.yourcoin.org to your seeder’s website address and the 192.168.0.1 to your server/VPS IP address. Code: ./dnsseed -h dnsseed.yourcoin.org -n 192.168.0.1 This guide isn’t a definitive guide and WILL need some improvements so if you come across any problems, please post them in here rather than PM me as I don’t have time to help everybody. Hopefully people who have come across similar issues too will be able to help out and turn this thread into something that is a useful resource. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: YarkoL on May 07, 2014, 10:06:20 PM Great guide!
Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: elbandi on May 08, 2014, 12:10:30 AM Just a note.
You sould create a NS domain record not an A record. Becase this seeder act as a dns server, and answer for the request with 3-4 valid ips. Elbandi Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: behzadtala on June 16, 2014, 07:50:06 AM is that possible to run yourcoind and software seeder software together on one server?
Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: morinpa on June 28, 2014, 12:51:16 PM Yes, it is possible. They use different ports.
Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: morinpa on June 28, 2014, 12:57:19 PM Hey PereguineBerty
Thanks for the guide, it was helpful. But I still have a question. What does this do? static inline int GetRequireHeight(const bool testnet = fTestNet) { return testnet ? 0 : 470000; } Return 0 when on testnet and return 470000 when on mainnet, I guess, but what does in control exactly? Trying to adapt this for another coin and I don't quite understand this part. Thanks Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: psionin on July 04, 2014, 07:54:05 PM Awesome stuff, thanks for posting this. How can one check to see if it works? Are there any stats that can be read either from the directory or by sending commands to the process?
Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: YarkoL on July 04, 2014, 10:49:57 PM Return 0 when on testnet and return 470000 when on mainnet, I guess, but what does in control exactly? Trying to adapt this for another coin and I don't quite understand this part. Nodes that have blocks less than that number are discarded by the crawler as not good candidates, see IsGood db.h:108 Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: esotericizm on July 04, 2014, 11:30:55 PM If you have a server running a form of *nix you can install and setup bind9. That way all you have to do is add some nodes to your zone file. No need to use bitcoin seeder.
Of course this will require manually updating your zone file to add new nodes. Good guide otherwise. Awesome stuff, thanks for posting this. How can one check to see if it works? Are there any stats that can be read either from the directory or by sending commands to the process? Easy way to test is to use a site like https://www.whatsmydns.net and search the A record. If its working it should display a list of your peers/nodes or you can use 'dig' if on a *nix machine. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: PereguineBerty on July 06, 2014, 07:18:18 PM Awesome stuff, thanks for posting this. How can one check to see if it works? Are there any stats that can be read either from the directory or by sending commands to the process? When the seeder is initialy run, it displays a real-time update of the stats of connected peers although the info it provides isn't always 100% reliable (at least not in my experience). I find the best way is to check if it's working is by running your wallet, making sure that no nodes are available in yourcoin.config file. If the wallet doesn't pick up any new connections after a few seconds (but give it a minute or two to test), something isn't configured correctly. Return 0 when on testnet and return 470000 when on mainnet, I guess, but what does in control exactly? Trying to adapt this for another coin and I don't quite understand this part. Nodes that have blocks less than that number are discarded by the crawler as not good candidates, see IsGood db.h:108 Excellent answer, Yarkol. This will be added to the instructions. Most of the important changes needed are included in the git commit history mentioned above and also in the seeder instructions but this one hasn't been mentioned. It could cause a real pain for devs if the seeder starts kicking nodes at specific blocks, so they should be made aware of this. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: PereguineBerty on July 06, 2014, 07:28:14 PM If you have a server running a form of *nix you can install and setup bind9. That way all you have to do is add some nodes to your zone file. No need to use bitcoin seeder. Of course this will require manually updating your zone file to add new nodes. Good guide otherwise. Awesome stuff, thanks for posting this. How can one check to see if it works? Are there any stats that can be read either from the directory or by sending commands to the process? Easy way to test is to use a site like https://www.whatsmydns.net and search the A record. If its working it should display a list of your peers/nodes or you can use 'dig' if on a *nix machine. Thanks, esotericizm - yours is an interesting approach to seeder setup and may be an alternative for people who have difficulties with the Sipa seeder. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: puchisupport on January 29, 2018, 03:44:11 AM Recently I face a similar problem and find this other useful doc in dogecoin seeder code:
Code: ./dnsseed -h dnsseed.example.com -n vps.example.com Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: lpxcc on September 04, 2018, 03:24:24 AM Can anyone tell me how to run dns seeder as service on ubuntu? I want to be sure that my dns seeder is automatically running after server reboot
Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: alias420 on September 16, 2018, 01:43:43 AM I'm a little confused as to how one customizes the seeder software itself so that it crawls a specified altcoin on a specified port. Is there anywhere the shows what you have to customize so that the seeder is crawling the proper network?
Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: dbkeys on September 16, 2018, 02:23:10 PM Can anyone tell me how to run dns seeder as service on ubuntu? I want to be sure that my dns seeder is automatically running after server reboot What version of Ubuntu are you running ? On Ubuntu 14.04 LTS & 16.04 LTS, run DNS seeder via /etc/rc.local I ilke to start a detached screen session, (called seeder-screen) everytime on boot. (Note: on Ubuntu 18.04 LTS, systemd has eliminated /etc/rc.local setups. In this OS, you can set up a systemd unit file in /etc/systemd/system, but it's not possible to pass parameters via the 'ExecStart' spec, so the binary should be hardcoded with your particular parameters, such as name of sub-domain served and the hosting IP address, etc.) example: Code: #!/bin/sh -e You can check functioning of the seeder by attaching to the seeder-screen session. Code: screen -dr seeder-screen Code: Bitmark (MARKS) DNS Seeder Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: dbkeys on September 16, 2018, 03:13:07 PM I'm a little confused as to how one customizes the seeder software itself so that it crawls a specified altcoin on a specified port. Is there anywhere the shows what you have to customize so that the seeder is crawling the proper network? The OP, PereguineBerty's Guide (https://bitcointalk.org/index.php?topic=599623.0) is very useful, but could use some copy-editing. Start with the latest source code, (from the original author, SIPA (Peter Wuille), as written for bitcoin) Code: git clone https://github.com/sipa/bitcoin-seeder.git You can compare what we've done for Bitmark: https://github.com/sipa/bitcoin-seeder/compare/master...project-bitmark:master Basically, you should customize which node versions your seeder will report as good, the required blockheight, the protocol version, the fixed seed nodes your seeder needs to get started, the "magic" bytes of pchMessageStart[] and of course, the P2P port for your coin. PM me if you need more help. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: CubitDev on September 25, 2018, 10:40:41 PM Can anyone tell me how to run dns seeder as service on ubuntu? I want to be sure that my dns seeder is automatically running after server reboot crontab is your friend ;) sudo crontab -e # You're starting the seeder as root Then add the line : @reboot /<dir>/<application> [-]<parameters> That should do it. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: Walter_ on September 26, 2018, 08:02:39 AM You can also make a systemd service.
nano /etc/systemd/system/seed.service put this in, customize where needed: [Unit] Description=COIN dns seeder After=network.target [Service] WorkingDirectory=/<LOCATION>/coin-seeder ExecStart=/<LOCATION>/coin-seeder/dnsseed -h <HOSTNAME> -n <IP> -m email@mail.com Restart=on-failure RestartSec=10 User=root StandardOutput=syslog StandardError=syslog SyslogIdentifier=COIN-seeder [Install] WantedBy=multi-user.target save & exit systemctl daemon-reload systemctl enable seed systemctl start seed Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: Kalkulus on November 20, 2018, 12:15:34 PM I'm a little confused as to how one customizes the seeder software itself so that it crawls a specified altcoin on a specified port. Is there anywhere the shows what you have to customize so that the seeder is crawling the proper network? The OP, PereguineBerty's Guide (https://bitcointalk.org/index.php?topic=599623.0) is very useful, but could use some copy-editing. Start with the latest source code, (from the original author, SIPA (Peter Wuille), as written for bitcoin) Code: git clone https://github.com/sipa/bitcoin-seeder.git You can compare what we've done for Bitmark: https://github.com/sipa/bitcoin-seeder/compare/master...project-bitmark:master Basically, you should customize which node versions your seeder will report as good, the required blockheight, the protocol version, the fixed seed nodes your seeder needs to get started, the "magic" bytes of pchMessageStart[] and of course, the P2P port for your coin. PM me if you need more help. Thats' looks very helpful, but still not able to have anything working :D Just pm'ed you! Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: Crazyhead90 on December 14, 2018, 07:31:00 PM Hey guys,
I've been trying to get a bitcoin-seeder working myself, but i keep getting stuck trying to set up a nameserver.. The things i have: 1. VPS where i want to run the dnsseed on (12.345.678.90) 2. Sub-domain (seed.example.com) 3. Sub-domain2 (ns0.example.com) The steps i took are: 1. Go to the subdomain seed.example.com and go to DNS settings. 2. Select NS-record and put "ns0.example.com" in it 3. Go to sub-domain "ns0.example.com" and put a A-record with the VPS ip "12.345.678.90" When i run "dig -t NS seed.example.com" i get an servfail and it wont show anything: Code: dig -t NS seed.helix-crypto.com When i run "dig -t A ns0.example.com" i do get the A record forwarding to the VPS IP: Code: dig -t A ns0.helix-crypto.com When i try to run the dnsseed program it wont find my any seeds either this way: ./dnsseed -h seed.example.com -n ns0.example.com -p 5353 https://i.gyazo.com/f2b52ec55e1b8d6ce3737e08feb47a5f.png When i go back to the sub-domain seed.example.com and remove the NS record and change it with a A record directly to the VPS i get: Code: dig -t NS seed.example.com And when i run dnsseed with the following parameters it does find seeds, but it wont broadcast them to the dns: ./dnsseed -h seed.example.com -n 12.345.678.90 -p 5353 https://i.gyazo.com/04db23b1de72e8080aa45ceb15e1d2fc.png It seems like whatever i try, i keep getting servfail when i set a NS to anything. Does anyone have any clue what i'm doing wrong and what i should change to get it working? Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: hey_connor on March 20, 2019, 11:31:27 AM The variable "clientVersion" is compared with REQUIRE_VERSION(which is a protocol version) in the function IsGood,
Code: if (clientVersion && clientVersion < REQUIRE_VERSION) return false; Code: if (clientVersion && clientVersion < 31900) { return 604800; } Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: suprnurd on June 27, 2019, 04:42:58 PM I believe clientVersion is the protocol version - I believe the seeder is only saving the "protocolversion" from the nodes it connects to and does not do anything with the "version" (i.e. from -getinfo)
If you check you'll see that clientVersion doesn't get overwritten with a different value for each if statement so it will always contain the protocol version. Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: Epssos on December 30, 2019, 12:20:17 PM Hi,
I'm trying to setup bitcoin seeder, but i'm having problem with correct DNS setup. Domain is registered in Goddady, and i have DNS record: Code: NS @ ns1.seederio.com 1h VPS in Vultr, with IPv6 and reverse DNS Code: xxxxxxxxxxxxxxxxxxxxxxxxxxx ns1.seederio.com Command to run seeder (with root priv): Code: ./dnsseed -h seederio.com -n ns1.seederio.com -m admin@seederio.com -t 2 -d 1 But after command: Code: dig -t A ns1.seederio.com I've got following message: Code: ;; OPT PSEUDOSECTION: For Code: dig -t NS ns1.seederio.com Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: suprnurd on January 03, 2020, 04:15:18 PM I got it working on my end by using a subdomain so something like this:
Code: A ns 111.222.333.444 1h Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: Epssos on February 17, 2020, 08:54:50 PM I got it working on my end by using a subdomain so something like this: Still no result. When i put Code: A ns 111.222.333.444 1h Code: dig +trace @8.8.8.8 seeder.seederio.com any Code: ;; Connection to 2001:41d0:xxxxxxxx#53(2001:41d0:xxxxxx) for seeder.seederio.com failed: connection refused. Seeder is working on port 53. UFW is disable Code: Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: joe@exor on May 07, 2020, 11:53:48 PM Hi, I'm trying to setup bitcoin seeder, but i'm having problem with correct DNS setup. Domain is registered in Goddady, and i have DNS record: Code: NS @ ns1.seederio.com 1h VPS in Vultr, with IPv6 and reverse DNS Code: xxxxxxxxxxxxxxxxxxxxxxxxxxx ns1.seederio.com Command to run seeder (with root priv): Code: ./dnsseed -h seederio.com -n ns1.seederio.com -m admin@seederio.com -t 2 -d 1 But after command: Code: dig -t A ns1.seederio.com I've got following message: Code: ;; OPT PSEUDOSECTION: For Code: dig -t NS ns1.seederio.com You are missing some steps in your DNS setup. First of all, you are required to create both an NS and "A" record, and it looks like you have only created an NS record (and even that I don't think is true because you seem to be trying to use your domains default ns1 nameserver). Next, your NS record must point to the "A" record, and your "A" record must point to the ip address of your vps. And lastly, your arguments for running the seeder app are mixed up a bit. To correct your current setup I would do something like this: 1) Create an "A" record that points to the ip address for your vps (ex: 111.222.123.231). You can give it any name you want but for this example lets call it vps.seederio.com 2) Create a new NS record and point it to the "A" record you just created. The NS record can also be called whatever you want but for this example lets call it seeder.seederio.com 3) On your vps, setup the DNS seeder app according to the instructions (I believe you already did this step) 4) Run the following cmd on the vps to start crawling your coins network and simultaneously start listening for DNS requests: Code: ./dnsseed -h seeder.seederio.com -n vps.seederio.com -m email.example.com 5) Wait a few minutes to allow the seeder to find the "good" nodes on your network. 6) You can test that your seeder is working by using the following cmd, but keep in mind that these values can be cached and may not always give a good result even if it is working: Code: nslookup seeder.seederio.com If all is working it should return a list of "good" ip addresses that are valid seed nodes for your network. An alternative to using the nslookup cmd is to use an online service to check if your seeder is working. You can visit this page after your seeder is running to see if it is working (you should see lots of ip addresses and green checkmarks. Seeing no ip addresses and red X's means something isnt working): https://www.whatsmydns.net/#A/seeder.seederio.com (https://www.whatsmydns.net/#A/seeder.seederio.com) 7) That's it! You are done! :) Title: Re: A Basic Guide/Tutorial for Creating DNS Seeders Post by: joe@exor on May 08, 2020, 12:19:42 AM I would like to say a BIG THANK YOU to the original creator of this thread @PereguineBerty, as this has served as the main setup guide for the bitcoin-seeder for exactly 6 years to the day!
A lot has changed since then, and earlier this year I took it upon myself to improve the functionality of the seeder app and also took the time to write a complete step-by-step guide for its use. All details, including a copy of the full guide can be found here: https://bitcointalk.org/index.php?topic=5239304.0 (https://bitcointalk.org/index.php?topic=5239304.0) |