美文网首页
使 nip.io 域名在纯内网环境可用

使 nip.io 域名在纯内网环境可用

作者: AlphaHinex | 来源:发表于2023-02-18 15:33 被阅读0次
cover

原文地址:https://alphahinex.github.io/2023/02/19/make-nip-io-available-in-intranet/


description: "比如 K8s 集群内部,或没有 DNS 服务的内网环境"
date: 2023.02.19 10:34
categories:
- Web
- Go
tags: [DNS, Web, Go, CoreDNS]
keywords: DNS, lvh.me, localtest.me, nip.io, sslip.io, coredns


简单,却伟大 中,我们介绍了几个非常简单,但又非常强大的 DNS 解析服务,如 nip.iosslip.iolocaltest.me 等。

然而在 K8s 集群内部,或没有 DNS 服务的纯内网环境中,我们却无法直接使用这些服务。

那就只能回归到挨个域名配置 host 的原始方式了吗?不!有一个能解析这类域名的 DNS 服务就可以了。

CoreDNS

CoreDNS 是一个用 Go 编写的灵活可扩展的 DNS 服务器,是 CNCF 的毕业项目。可通过 Kubernetes 插件 集成至 Kubernetes 中作为 Kubernetes 集群 DNS,Releases 页面 也有面向各种环境的可执行文件。

CoreDNS 有丰富的 官方插件三方插件,可通过配置文件 Corefile 对 CoreDNS 进行配置。

使用 CoreDNS 解析 nip.io 之类的域名,就可以通过 template 插件来实现。

template plugin

在 template 插件的文档页面中,给出了这样一个 例子

. {
    forward . 8.8.8.8

    template IN A example {
      match "^ip-(?P<a>10)-(?P<b>[0-9]*)-(?P<c>[0-9]*)-(?P<d>[0-9]*)[.]dc[.]example[.]$"
      match "^(?P<a>[0-9]*)[.](?P<b>[0-9]*)[.](?P<c>[0-9]*)[.](?P<d>[0-9]*)[.]ext[.]example[.]$"
      answer "{{ .Name }} 60 IN A {{ .Group.a}}.{{ .Group.b }}.{{ .Group.c }}.{{ .Group.d }}"
      fallthrough
    }
}

作用是根据输入的包含 IP 的域名,进行正则匹配,并将捕捉到的 IP 作为响应输出。

可以仿照上例,写出使 CoreDNS 支持 nip.io 类域名解析的配置:

nip.io {
    template IN A {
      match (?P<a>[0-9]*)[.-](?P<b>[0-9]*)[.-](?P<c>[0-9]*)[.-](?P<d>[0-9]*).nip.io
      answer "{{ .Name }} 3600 IN A {{ .Group.a }}.{{ .Group.b }}.{{ .Group.c }}.{{ .Group.d }}"
    }
}

将上面内容保存为 Corefile 文件,放置在 CoreDNS 的可执行文件路径下,运行 CoreDNS,即可获得一个能够解析 nip.io 域名的 DNS 服务器。

这里 有一个可以用 Docker Compose 启动的环境,实现了相同功能,并可按照其 README 中方式进行测试:

# 10.0.0.1
$ nslookup 10.0.0.1.nip.io 127.0.0.1

# 192.168.1.250
$ nslookup 192-168-1-250.nip.io 127.0.0.1

# 10.8.0.1
$ nslookup app.10.8.0.1.nip.io 127.0.0.1

# 116.203.255.68
$ nslookup app-116-203-255-68.nip.io 127.0.0.1

# 10.0.0.1
$ nslookup customer1.app.10.0.0.1.nip.io 127.0.0.1

# 127.0.0.1
$ nslookup customer2-app-127-0-0-1.nip.io 127.0.0.1
$ nslookup magic.127.0.0.1.nip.io 127.0.0.1
$ nslookup magic-127-0-0-1.nip.io 127.0.0.1

K8s 集群内部环境

在 K8s 集群内部,想在容器中能够解析 nip.io 域名时,可以参照 自定义 DNS 服务,在 ConfigMap 中调整 CoreDNS 的 Corefile 配置。

其他环境

如果已经有了一个 K8s 集群内的,可以解析 nip.io 域名的 DNS 服务,那么能否使用这个服务作为 K8s 集群外部的 DNS 服务器呢?

简单来说,很难。

因为在 K8s 中,会使用 NodeLocal DNSCache 在集群节点上作为 DaemonSet 运行 DNS 缓存代理来提高集群 DNS 性能,所以 DNS 服务默认的 53 端口在集群内各个节点已被占用,这样的话就只能使用非默认端口。

虽然一些工具可以使用非默认端口的 DNS 服务进行域名解析,如:

# dns 服务监听在本地 54 端口
$ dig test.192.168.1.80.nip.io @127.0.0.1 -p 54

但想给 Windows 或 Linux 系统配置使用非默认端口的 DNS 服务,并不是一件容易的事

所以没必要为难自己,在非 K8s 集群环境,找台机器(比如本地)直接启动一个 CoreDNS 服务就好了。

相关文章

  • 纯内网环境需上网操作

    内网上网操作: 1.场景纯内网环境,上外网需要申请,申请通过后的操作 2.操作如下: 域名解析 vi /etc/r...

  • Flutter 跨端网络抓包 (以Android 为例)

    背景 在很多公司测试环境使用的是内网测试,我们公司也是。 但是我们有点扯的是内网的域名没有配置内网域名解析,必须手...

  • 无标题文章

    # **域名** 环境| 外网地址|内网地址 :----------- | :-----------: | 线下测...

  • 2018-03-05

    # **域名** 环境| 外网地址|内网地址 :----------- | :-----------: | 线下测...

  • 【dns】DNS泛域名解析应用(nip.io/sslip.io)

    DNS泛域名解析应用(nip.io/sslip.io) https://www.cnblogs.com/shany...

  • 使用frp穿透内网远程访问

    只要1个域名,就可以穿透内网 1.首先要准备好域名,内网部署好服务,比如自己写的网站部署在内部的web服务。2.使...

  • Nginx使用事项

    在开发项目中,一般会用Nginx管理内网项目的多个域名+端口,我们称为反向代理服务,本文仅作Nginx日常使...

  • 修改 hosts 文件实现快速访问站点的需求

    正文 这个示例实际是为了解决内网访问不了改域名的问题 使本机可以通过相应的域名访问到相应的站点;下面是详细的操作步...

  • nginx配置反向代理

    前提:为了安全将zabbix配置在内网中,实现将nginx放在前端,通过域名访问 环境:Linux: Centos...

  • npm包离线安装

    npm包的安装,在Internet联网机器上通过npm install轻松搞定的事情,在离线或者纯内网环境下就变得...

网友评论

      本文标题:使 nip.io 域名在纯内网环境可用

      本文链接:https://www.haomeiwen.com/subject/gycmkdtx.html