Sign inSign up

lhstack/small-dns

By lhstack

•Updated over 2 years ago

小巧轻量的dns服务器,支持正则域名解析IP,正则ip反向解析域名,支持内网解析,公网解析

Image
1

1.8K

lhstack/small-dns repository overview

⁠3.0.0及后续版本

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

⁠1.0.0版本

{
  "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

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
⁠k8s
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,dns等功能
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


Tag summary

Content type

Image

Digest

sha256:323ced7b7…

Size

18.8 MB

Last updated

over 2 years ago

docker pull lhstack/small-dns