安装 dnsmasq

我家有公网 IP,所以很轻松的配置好了域名。但是对于看电影或者备份的场景,希望在外面的时候可以使用公网 IP 访问,在家的时候时候使用内网 IP 访问。

我目前的方式是配置了两个泛域名,*.pub.mynas.com*.pri.mynas.com,前者配置公网 IP,后者配置内网 IP。这样可以使用,但是比如在使用 jellyfin 时,往往需要我手动退出去切换域名。

因此决定搭建一个 DNS 服务,来内网场景下讲域名指向内网 IP。

docker 配置

现在服务我基本都使用 docker-compose 了

docker-compose.yaml

version: "3.8"

services:
  dnsmasq:
    image: jpillora/dnsmasq
    container_name: dnsmasq
    environment: # 登陆的账号密码
      HTTP_USER: admin
      HTTP_PASS: admin
    volumes:
      - ./dnsmasq.conf:/etc/dnsmasq.conf:ro
      - ./dnsmasq.resolv.conf:/etc/dnsmasq.resolv.conf
      - ./dnsmasq.d:/etc/dnsmasq.d
      - /etc/localtime:/etc/localtime:ro
    ports:
     - "53:53/udp"
     - "53:53/tcp"
     - "5380:8080"
    restart: always

dnsmasq.conf

#dnsmasq config, for a complete example, see:
#  http://oss.segetech.com/intra/srv/dnsmasq.conf
#log all dns queries
log-queries
#dont use hosts nameservers
no-resolv
#use cloudflare as default nameservers, prefer 1^4
server=1.0.0.1
server=1.1.1.1
server=/taobaocdn.com/223.5.5.5
server=/taobao.com/223.5.5.5
server=/aliyun.com/223.5.5.5
server=/github.com/223.5.5.5
server=/baidu.com/180.76.76.76
server=/qq.com/119.29.29.29
server=/tencent.com/119.29.29.29
server=/google.com/8.8.8.8
server=/google.com.hk/8.8.8.8

address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1

#serve all .company queries using a specific nameserver
#server=/company/10.0.0.1
#explicitly define host-ip mappings
address=/pub.mynas.com/192.168.1.100

# IP反查域名
bogus-priv

# 缓存条数,默认为150条,cache-size=0 禁用缓存。
cache-size=4096

# 不缓存未知域名缓存,默认情况下dnsmasq缓存未知域名并直接返回为客户端。
no-negcache

# 指定DNS同属查询转发数量
dns-forward-max=256

# 严格按照resolv.conf中的顺序进行查找
strict-order

# 向所有上游服务器发送查询,而不是一个
all-servers

# 重启后清空缓存
#clear-on-reload

resolv-file=/etc/dnsmasq.resolv.conf

log-queries
#log-facility=/var/log/dnsmasq.log
log-facility=/dev/null
log-async=20

这里有个重点配置,这里 192.168.1.100 是我的 nas 的 IP。

address/pub.mynas.com/192.168.1.100

dnsmasq.resolv.conf

nameserver 223.5.5.5
nameserver 180.76.76.76
nameserver 8.8.8.8

测试

dig home.pub.mynas.com.pub

这个命令应该看到的是公网的 IP。

dig @192.168.1.100 home.pub.mynas.com

这样看到的应该是内网 IP。

修改路由器

然后将路由器的 DNS 改成 nas 的 IP,可以第一个配置成 nas 的,后面继续配置以前的。