A cross platform local DNS server written in rust to obtain the fastest website
IP for the best Internet experience, support DoT, DoQ, DoH, DoH3.
# SmartDNS-rs
.
[![GitHub release (latest by date including
.
.
English |
.
SmartDNS-rs 🐋 is a local DNS server imspired by [C
from local clients, obtains DNS query results from multiple upstream DNS
servers, and returns the fastest access results to clients. Avoiding DNS
pollution and improving network access speed, supports high-performance ad
filtering.
.
.
.
## Features
.
- **Multiple upstream DNS servers**
.
Supports configuring multiple upstream DNS servers and query at the same
time.the query will not be affected, Even if there is a DNS server exception.
.
- **Return the fastest IP address**
.
Supports finding the fastest access IP address from the IP address list of
the domain name and returning it to the client to avoid DNS pollution and
improve network access speed.
.
- **Support for multiple query protocols**
.
Supports UDP, TCP, DoT, DoQ, DoH, DoH3 queries and service, and non-53 port
queries, effectively avoiding DNS pollution and protect privacy, and support
query DNS over socks5, http proxy.
.
- **Domain IP address specification**
.
Supports configuring IP address of specific domain to achieve the effect of
advertising filtering, and avoid malicious websites.
.
- **DNS domain forwarding**
.
Supports DNS forwarding, ipset and nftables. Support setting the domain
result to ipset and nftset set when speed check fails.
.
- **Windows / MacOS / Linux multi-platform support**
.
Supports installing as a service and running it at startup.
.
- **Support IPV4, IPV6 dual stack**
.
Supports IPV4, IPV6 network, support query A, AAAA record, dual-stack IP
selection, and filter IPV6 AAAA record.
.
- **DNS64**
.
Supports DNS64 translation.
.
- **High performance, low resource consumption**
.
Tokio-based multi-threaded asynchronous I/O model; caches query results;
supports most-used domain name expired prefetching, query **'0'**
milliseconds, without eliminating the impact of DoH and DoT encryption.
.
supports **Linux**, while **MacOS and Windows** can only be supported through
Docker or WSL. Therefore, I want to develop a rust version of SmartDNS that
supports compiling to Windows, MacOS, Linux and Android Termux environment to
run, and is compatible with its configuration.
.
---
.
**It is still under development, please do not use it in production
environment, welcome to try and provide feedback.**
.
Please refer to
function coverage
.
.
.
## Installing
.
- MacOS
.
following command to install.
.
```shell
brew update
brew install smartdns
```
.
.
The command `sudo smartdns service start` for `brew` installed `smartdns` is
the same as `sudo brew services start smartdns`.
.
If you don't have `brew` installed, just download the compiled program
compression package and install it as below.
.
- Windows / Linux
.
the package and decompress it.
.
1. Get help
.
```shell
./smartdns help
```
.
2. Run as foreground, easy to check the running status
.
```shell
./smartdns run -c ./smartdns.conf -v
```
.
- `-v` is enabled to print debug logs.
.
3. Run as background service, run automatically at startup
.
Get help of service management commands.
.
```shell
./smartdns service help
```
.
required.*
.
*Service management is compatible with all systems, call
on Windows; call `launchctl` or `brew` on MacOS; call `Systemd` or `OpenRc` on
Linux.*
.
## Configuration
.
The following is the simplest example configuration
.
```conf
# Listen on local port 53
.
# Configure bootstrap-dns, if not configured, call the system_conf,
# it is recommended to configure, so that it will be encrypted.
.
# Configure default upstream server
.
# Configure the Office(Home) upstream server
server 192.168.1.1 -exclude-default-group -group office
.
# Domain names ending with ofc are forwarded to the office group for resolution
nameserver /ofc/office
.
# Set static IP for domain name
address /test.example.com/1.2.3.5
.
# Block Domains (Ad Blocking)
address /ads.example.com/#
.
# The following features are not yet supported in the [C
SmartDNS-rs.
# Configure DoH3
server-h3 1.1.1.1
.
# Configure DoQ
server-quic unfiltered.adguard-dns.com
```
.
For more advanced configurations, please refer to
for the function coverage.
.
## Building
.
Assuming you have installed
.
```shell
cd smartdns-rs
.
cargo install just
.
# build
just build
.
# print help
./target/release/smartdns --help
.
# run
sudo ./target/release/smartdns run -c ./etc/smartdns/smartdns.conf
```
.
For cross-compilation, it is recommended to use
.
## Acknowledgments !!!
.
.
.
## License
.
This software contains codes from
which is licensed under either of
.
- Apache License, Version 2.0, (LICENSE-APACHE or
- MIT license (LICENSE-MIT or
.
And other codes is licensed under
.
- GPL-3.0 license (LICENSE-GPL-3.0 or
.
## Contribution
.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the GPL-3.0 license, shall be
licensed as above, without any additional terms or conditions.