Brian Cunnie 5065229a03 Key-value store domain: kv.sslip.io → k-v.io
I didn't want a really long domain for the key-value store; I wanted a
short, easy-to-remember domain. And it cost $400 for ten years.

Many good domains (e.g. keyvalue.store, kv.io)
were taken, and some weren't easily registered (e.g. the Albanian
domain, keyv.al).

Browsing these domains that were never put into use is like strolling
along the Boulevard of Broken Dreams: high hopes dashed against the hard
rocks of reality.
2021-12-29 19:56:52 -08:00
2021-12-04 10:31:12 -08:00
2015-08-30 10:27:54 -07:00
2020-12-01 12:09:50 -08:00
2020-11-26 15:11:25 -08:00

sslip.io

Test Type Status
Production Nameservers ci.nono.io
DNS Server Unit Tests ci.nono.io

sslip.io is a DNS server that maps specially-crafted DNS A records to IP addresses (e.g. "127-0-0-1.sslip.io" maps to 127.0.0.1). It is similar to, and inspired by, xip.io.

If you'd like to use sslip.io as a service, refer to the website (sslip.io) for more information. This README targets developers; the website targets users.

  • src/ contains the source code to the DNS server.
  • ci/ contains the Concourse continuous integration (CI) pipeline and task.
  • spec/ contains the tests for the production nameservers. To run the tests locally:
    DOMAIN=sslip.io rspec --format documentation --color spec/
    
  • k8s/document_root/ contains the HTML content of the sslip.io website. Please run tidy -im -w 120 k8s/document_root/index.html before submitting pull requests.
  • bosh-release/ contains the BOSH release. BOSH is the mechanism we use to deploy the servers, and the sslip.io BOSH release is a packaging of the DNS server (analogous to a .msi, .pkg, .deb or .rpm)
  • conf/sslip.io+nono.io.yml (deprecated) contains the PowerDNS's pipe backend's configuration in YAML format for use with BOSH. The pdns_pipe key is the pipe backend script, and pdns_pipe_conf is its configuration file.

DNS Server

The DNS server is written in Golang and is not configurable without modifying the source:

  • it binds to port 53 (you can't change it)
  • it only binds to UDP (no TCP, sorry)
  • The SOA record is hard-coded with the exception of the MNAME (primary master name server) record, which is set to the queried hostname (e.g. dig big.apple.com @ns-aws.nono.io would return an SOA with an MNAME record of big.apple.com.
  • The NS records are hard-coded
  • The MX records are hard-coded to the queried hostname with a preference of 0, with the exception of sslip.io itself, which has custom MX records to enable email delivery to ProtonMail.
  • No TXT records are returned with the exception of sslip.io, which has custom records to enable email delivery
  • There are no SRV records

To run the unit tests:

cd src
go get github.com/onsi/ginkgo/ginkgo
go get github.com/onsi/gomega/...
ginkgo -r .

To run the server on, say, a Mac, you must first start the server:

cd src
go run main.go

And then, in another window, run a query, e.g.:

dig +short 127.0.0.1.sslip.io @localhost

Which will return the expected IP address:

127.0.0.1

You will also see a log message in the server window, similar to the following:

2020/11/22 03:45:44 ::1.62302 TypeA 127.0.0.1.sslip.io. ? 127.0.0.1

Acknowledgements

  • Sam Stephenson (xip.io), Roopinder Singh (nip.io), and the other DNS developers out there
  • The contributors (@normanr, @jpambrun come to mind) who improved sslip.io
  • Jenessa Petersen of Let's Encrypt who bumped the rate limits
  • Natalia Ershova of JetBrains who provided a free license for open source development
Description
基于 Golang 的 DNS 服务器,它将带有嵌入式 IP 地址的 DNS 记录映射到这些地址。
Readme Apache-2.0 2.8 MiB
Languages
Go 81%
HTML 14.2%
Ruby 2.6%
Dockerfile 1.8%
Shell 0.4%