小巧轻量的dns服务器,支持正则域名解析IP,正则ip反向解析域名,支持内网解析,公网解析
1.8K
docker-compose.yaml
services:
dns:
image: lhstack/small-dns:3.0.0
container_name: small-dns
restart: always
ports:
- "5300:53/udp"
- "80:80"
deploy:
resources:
limits:
cpus: "0.1"
memory: "8M"
volumes:
- ./logs:/app/logs
environment:
LOG_OUT_TYPE: '1'
ENABLE_CACHE: "true"
REDIS_HOST: "192.168.17.128:6379"
REDIS_PASS: "123456"
REDIS_DB: "1"
DB_USERNAME: "root"
DB_PASSWORD: "123456"
DB_HOST: "192.168.17.128:3306"
DB_NAME: "dns"
DB_LOG_LEVEL: "4"
HTTP_SERVER_LISTEN_PORT: 80
HTTP_SERVER_BASIC_ENABLE: true
3.0.0及后续版本使用mysql数据库(自动建表,使用gorm)存储域名解析数据,redis做缓存(可配置开启关闭缓存)
以下是环境变量配置
环境变量: LOG_OUT_TYPE
设置日志的输出类型 0: 不输出日志 1: 输出到控制台 2: 输出到文件,默认值: 2
当前值: 2
环境变量: ENABLE_CACHE
设置是否开启缓存,默认值: false
当前值: false
环境变量: REDIS_HOST
设置redis地址,如果ENABLE_CACHE为true,则使用此参数,默认值: localhost:6379
当前值: localhost:6379
环境变量: REDIS_PASS
设置redis密码,如果ENABLE_CACHE为true,则使用此参数,默认值: 空
当前值:
环境变量: REDIS_DB
设置使用的第几个数据库,默认值: 1
当前值: 1
环境变量: DB_USERNAME
设置数据库用户名,默认值: root
当前值: dns
环境变量: DB_PASSWORD
设置数据库密码,默认值: 123456
当前值: sdRLucWi^lu7r(*
环境变量: DB_HOST
设置数据库地址,默认值: 127.0.0.1:3306
当前值: 192.168.3.225:3306
环境变量: DB_NAME
设置数据库名称,默认值: dns
当前值: dns
环境变量: DB_MAX_IDLE_CONNS
设置空闲连接池中的最大连接数,默认值: 5
当前值: 5
环境变量: DB_MAX_OPEN_CONNS
设置数据库的最大打开连接数,默认值: 5
当前值: 10
环境变量: DB_LOG_LEVEL
设置sql日志打印级别 1: Silent(不打印) 2: Error 3: Warn 4: Info,默认值: 4
当前值: 4
环境变量: DB_CONN_MAX_IDLE_TIME_SECONDS
设置空闲连接池连接最大空闲时间,默认值: 1800秒
当前值: 1800
环境变量: DB_CONN_MAX_LIFE_TIME_SECONDS
设置连接可以重复使用的最长时间,默认值: 3600秒
当前值: 3600
环境变量: FORWARD_DNS_SERVERS
设置当dns服务没有匹配到能用的域名之后将请求转发到此环境变量的域名服务地址,多个通过,分割,默认值: 114.114.114.114:53,8.8.8.8:53,8.8.4.4:53
当前值: 114.114.114.114:53,8.8.8.8:53,8.8.4.4:53
环境变量: HTTP_SERVER_LISTEN_PORT
设置http服务监听端口,默认值: 8080
当前值: 8080
环境变量: HTTP_SERVER_BASIC_USERNAME
设置http服务basic认证用户名,默认值: admin
当前值: admin
环境变量: HTTP_SERVER_BASIC_PASSWORD
设置http服务basic认证密码,默认值: 123456
当前值: 123456
环境变量: HTTP_SERVER_BASIC_ENABLE
是否开启http服务basic认证,默认值: false
当前值: false
环境变量: DNS_SERVER_UDP_LISTEN_PORT
设置DNS udp服务的监听端口,默认值: 53
当前值: 53
{
"ptr": {
"192.168.2.37": [
"www.lhstack.com",
"www.lhstack.com.cn",
"www.lhstack.com.cnn",
"lhstack.com"
]
},
"domainResolve": {
"www.lhstack.cm": [
"192.168.101.5",
"192.168.101.170",
"192.168.2.39",
"192.168.2.36",
"192.168.2.30"
]
}
}
docker run --name small-dns --restart=always -p 53:53/udp -v ${PWD}/config:/config -e LOCAL_DNS_RESOLVE_CONFIG="/config/config.json" -d lhstack/small-dns:1.0.0
version: '3'
services:
small-dns:
image: lhstack/small-dns:1.0.0
restart: always
container_name: small-dns
ports:
- '53:5300/udp'
environment:
DNS_LISTEN_ADDRESS: ":5300"
LOCAL_DNS_RESOLVE_CONFIG: "/config/config.json"
DNS_REMOTE_RESOLVE_ADDRESS: "114.114.114.114:53,8.8.8.8:53"
volumes:
- ./config:/config #修改宿主机下对应的config/config.json,会自动更新dns
logging:
options:
max-file: '1'
max-size: 16k
deploy:
resources:
limits:
cpus: '0.1'
memory: 16M
2.0.0兼容1.0.0的所有功能,2.0.0支持正则解析,泛域名
[
{
"type": "Ptr",
"names": [
"127.0.0.1",
"192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1"
],
"ttl": 600,
"values": [
"www.lhstack.com",
"www.lhstack.cm",
"lhstack.com"
],
"ordered": 1
},
{
"type": "Ipv4",
"names": [
"[\\d\\w]*\\.lhstack\\.com"
],
"ttl": 300,
"values": [
"192.168.2.188"
],
"ordered": 2
}
]
version: '3'
services:
small-dns:
image: lhstack/small-dns:2.0.0
restart: always
container_name: small-dns
network_mode: host
environment:
DNS_LISTEN_ADDRESS: ":53"
DNS_REPO_TYPE: HighLevelLocal
HIGH_LEVEL_LOCAL_DNS_RESOLVE_CONFIG: "/config/config.json"
DNS_REMOTE_RESOLVE_ADDRESS: "114.114.114.114:53,8.8.8.8:53"
HIGH_LEVEL_LOCAL_DNS_RESOLVE_CONFIG_CHECK_INTERVAL_SECONDS: "5"
volumes:
- ./config:/config
logging:
options:
max-file: '1'
max-size: 16k
deploy:
resources:
limits:
cpus: '0.1'
memory: 16M
apiVersion: v1
kind: Namespace
metadata:
name: dns
---
apiVersion: v1
kind: ConfigMap
metadata:
name: dns
namespace: dns
data:
config.json: |
[
{
"type": "Ptr",
"names": [
"127.0.0.1",
"192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1",
"10.43.53.53"
],
"ttl": 600,
"values": [
"www.lhstack.com",
"www.lhstack.cm",
"lhstack.com"
]
},
{
"type":"Ipv4",
"names":[
"www.github.com",
"github.com",
"github.lhstack.com"
],
"ttl":600,
"values":[
"20.205.243.166",
"140.82.112.4",
"140.82.114.4",
"140.82.121.4",
"52.69.186.44",
"52.78.231.108",
"20.248.137.48"
],
"ordered": 2
}
]
---
apiVersion: v1
kind: ConfigMap
metadata:
name: small-dns-env
namespace: dns
data:
DNS_LISTEN_ADDRESS: ":53"
DNS_REPO_TYPE: HighLevelLocal
HIGH_LEVEL_LOCAL_DNS_RESOLVE_CONFIG: "/config/config.json"
DNS_REMOTE_RESOLVE_ADDRESS: "10.43.0.10:53,114.114.114.114:53,8.8.8.8:53"
HIGH_LEVEL_LOCAL_DNS_RESOLVE_CONFIG_CHECK_INTERVAL_SECONDS: "60"
---
apiVersion: v1
kind: Pod
metadata:
name: dns
namespace: dns
labels:
app: dns
spec:
containers:
- name: small-dns
image: lhstack/small-dns
imagePullPolicy: IfNotPresent
ports:
- name: udp
containerPort: 53
protocol: UDP
envFrom:
- configMapRef:
name: small-dns-env
volumeMounts:
- name: config
mountPath: /config
resources:
requests:
cpu: 20m
memory: 8Mi
ephemeral-storage: 5Mi
limits:
cpu: 20m
memory: 16Mi
ephemeral-storage: 10Mi
volumes:
- name: config
configMap:
name: dns
---
apiVersion: v1
kind: Service
metadata:
name: dns
namespace: dns
spec:
type: ClusterIP
ports:
- name: udp
port: 53
protocol: UDP
selector:
app: dns
clusterIP: 10.43.53.53
nslookup www.baidu.com 192.168.2.188
服务器: www.lhstack.com
Address: 192.168.2.188
非权威应答:
名称: www.a.shifen.com
Addresses: 14.215.177.38
14.215.177.39
Aliases: www.baidu.com
nslookup gogs.lhstack.com 192.168.2.188
服务器: www.lhstack.com
Address: 192.168.2.188
非权威应答:
名称: gogs.lhstack.com
Address: 192.168.2.188
nslookup -q=ptr 192.168.2.188 192.168.2.188
服务器: www.lhstack.com
Address: 192.168.2.188
非权威应答:
www.lhstack.com internet address = 192.168.2.188
www.lhstack.cm internet address = 192.168.2.188
lhstack.com internet address = 192.168.2.188
Content type
Image
Digest
sha256:323ced7b7…
Size
18.8 MB
Last updated
over 2 years ago
docker pull lhstack/small-dns