mirror of
https://github.com/cunnie/sslip.io.git
synced 2025-10-16 12:40:37 +08:00

To make room for the k-v.io HTML website, we rename the `document_root` of the sslip.io website to the more explicit `document_root_sslip.io`.
87 lines
3.4 KiB
Markdown
87 lines
3.4 KiB
Markdown
# sslip.io
|
|
|
|
| Test Type | Status |
|
|
|---|---|
|
|
| Production Nameservers | [](https://ci.nono.io/teams/main/pipelines/sslip.io) |
|
|
| DNS Server Unit Tests | [](https://ci.nono.io/teams/main/pipelines/sslip.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](http://xip.io/).
|
|
|
|
If you'd like to use sslip.io _as a service_, refer to the website
|
|
([sslip.io](https://sslip.io)) for more information. This README targets
|
|
developers; the website targets users.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
git clone git@github.com:cunnie/sslip.io.git
|
|
cd sslip.io/src/sslip.io-dns-server/
|
|
sudo go run main.go
|
|
# sudo is required on Linux, but not on macOS, to bind to privileged port 53
|
|
```
|
|
|
|
In another window:
|
|
```bash
|
|
dig @localhost 192.168.0.1.sslip.io +short
|
|
# should return "192.168.0.1"
|
|
```
|
|
|
|
## Quick Start Tests
|
|
|
|
```bash
|
|
go install github.com/onsi/ginkgo/v2/ginkgo@latest
|
|
go get github.com/onsi/gomega/...
|
|
sudo ~/go/bin/ginkgo -r .
|
|
# sudo is required on Linux, but not on macOS, to bind to privileged port 53
|
|
```
|
|
|
|
## Directory Structure
|
|
|
|
- `src/` contains the source code to the DNS server
|
|
- `ci/` contains the [Concourse](https://concourse.ci/) continuous integration
|
|
(CI) pipeline and task
|
|
- `spec/` contains the tests for the production nameservers. To run
|
|
the tests locally:
|
|
```bash
|
|
DOMAIN=sslip.io rspec --format documentation --color spec/
|
|
```
|
|
- `k8s/document_root_sslip.io/` contains the HTML content of the sslip.io website. Please
|
|
run `tidy -im -w 120 k8s/document_root_sslip.io/index.html` before submitting pull
|
|
requests
|
|
- `bosh-release/` _[deprecated]_ contains the [BOSH](https://bosh.io/docs/)
|
|
release. BOSH is the mechanism we previously used 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`)
|
|
|
|
## DNS Server
|
|
|
|
The DNS server is written in Golang and is not configurable without modifying
|
|
the source:
|
|
|
|
- it binds to port 53, but can be overridden on the command line with the
|
|
`-port`, e.g. `go run main.go -port 9553`
|
|
- 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 (`ns-aws.sslip.io`, `ns-azure.sslip.io`,
|
|
`ns-gce.sslip.io`). Exception: `_acme-challenge` records are handled
|
|
differently to accommodate the procurement of Let's Encrypt wildcard
|
|
certificates; you can read more about that procedure [here](docs/wildcard.md)
|
|
- 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
|
|
- There are no SRV records
|
|
|
|
### 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](https://www.jetbrains.com/community/opensource/#support)
|