Jump to content

Search the Community

Showing results for tags 'dns seeder'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News & Announcements
    • Announcements
  • Denarius Discussions
    • General Discussion
    • Tutorials & Help
    • Marketing & PR
    • Development
    • Mining & Staking
    • Trading & Exchanges
    • Marketplace
    • FPGA Forums
  • Other Discussions
    • The Lounge
    • Cryptocurrencies

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 1 result

  1. Spent some time with the DNS seeders and there is very little info so I was playing with cloudflare and wondered if I could automate the DNS seeds somehow. I assume this works on any coins that has a peer list with minor tweaks. The basic idea is getpeerinfo from the daemon into a json file and then send line by line of that into an A record on your seeder domain name. I am hopeful some others will see this and have a better idea how to automate this by making it easier to setup and run on generic coin. https://github.com/buzzkillb/duct-tape-dns-seeder Make a cloudflare account and point your domain denarius.pro at the cloudflare nameservers from your domain host control panel. Now we can edit records on cloudflare and the changes are almost immediate. Cloudflare API Key is here, top right Icon -> My Profile -> View Global API Key #Install Python Cloudflare sudo apt install python-pip git clone https://github.com/cloudflare/python-cloudflare cd python-cloudflare ./setup.py build sudo ./setup.py install #Create a config file for your cloudflare API, change email and token (API KEY) mkdir ~/.cloudflare nano ~/.cloudflare/cloudflare.cfg [CloudFlare] email = <[email protected]> token = <API KEY> certtoken = v1.0-... extras = #test this works. change the ipv4 and denarius.pro to your stuff. dnsseed.denarius.pro is what my example will show. cli4 --post name="dnsseed" type="A" content="73.218.220.108" /zones/:denarius.pro/dns_records now we want to store a couple text files somewhere. you choose this for now I will use /root/ #create seed.sh and edit denarius.pro to your domain name. still using dnsseed.denarius.pro for this example. #!/bin/sh grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' "${1:?}" | while read IP do echo "$IP" cli4 --post name="dnsseed" type="A" content="$IP" /zones/:denarius.pro/dns_records done make this file executable chmod +x seed.sh now how to grab and put the ipv4's into the domain A records. denariusd daemon send peerinfo into a json file. then jq parses the json for the addr array and then we remove some junk and put that into peers.txt. From there the bash file uses regex to make the ipv4's pretty. denariusd getpeerinfo > peer.json jq '.[] | .addr' -r peer.json | sed 's/[][]//g' > peers.txt ./seed.sh peers.txt This can be updated as much as the cloudflare API limits gives. But how to remove A records and try to keep this list fresh? Lets make a delete file from python cloudflare examples. https://github.com/cloudflare/python-cloudflare/blob/master/examples/example_delete_zone_entry.py #create delete.py and chmod+x this, and then put this inside. #!/usr/bin/env python """Cloudflare API code - example""" from __future__ import print_function import os import sys import re import json import requests sys.path.insert(0, os.path.abspath('..')) import CloudFlare def main(): """Cloudflare API code - example""" try: zone_name = sys.argv[1] dns_name = sys.argv[2] except IndexError: exit('usage: example_delete_zone_entry.py zone dns_record') cf = CloudFlare.CloudFlare() # grab the zone identifier try: params = {'name':zone_name} zones = cf.zones.get(params=params) except CloudFlare.exceptions.CloudFlareAPIError as e: exit('/zones %d %s - api call failed' % (e, e)) except Exception as e: exit('/zones.get - %s - api call failed' % (e)) if len(zones) == 0: exit('/zones.get - %s - zone not found' % (zone_name)) if len(zones) != 1: exit('/zones.get - %s - api call returned %d items' % (zone_name, len(zones))) zone = zones[0] zone_id = zone['id'] zone_name = zone['name'] print('ZONE:', zone_id, zone_name) try: params = {'name':dns_name + '.' + zone_name} dns_records = cf.zones.dns_records.get(zone_id, params=params) except CloudFlare.exceptions.CloudFlareAPIError as e: exit('/zones/dns_records %s - %d %s - api call failed' % (dns_name, e, e)) found = False for dns_record in dns_records: dns_record_id = dns_record['id'] dns_record_name = dns_record['name'] dns_record_type = dns_record['type'] dns_record_value = dns_record['content'] print('DNS RECORD:', dns_record_id, dns_record_name, dns_record_type, dns_record_value) try: dns_record = cf.zones.dns_records.delete(zone_id, dns_record_id) print('DELETED') except CloudFlare.exceptions.CloudFlareAPIError as e: exit('/zones.dns_records.delete %s - %d %s - api call failed' % (dns_name, e, e)) found = True if not found: print('RECORD NOT FOUND') exit(0) if __name__ == '__main__': main() to run the deleter, and it appears this only deletes 10-15 records at a time, so you might need to run this 5 times before sending a fresh list. This is only deleting records from dnsseed.denarius.pro. Nothing else on denarius.pro. Magical. ./delete.py denarius.pro dnsseed Right now I am trying to think how frequent to send new ip's and delete the list and start over. Once I get that down I will post a sample cronjob to use. Otherwise this should work with basically any bitcoin fork daemon, maybe minor tweaks. I also need a better regex to parse ipv6 so we can also make some on the fly AAAA records. Use the github as that shows the crontab for adding and deleting the A records
×
×
  • Create New...