请教大佬们一个局域网自定义 DNS 的问题

2024 年 4 月 10 日
 felix0012

== 背景

在家用玩客云刷了 armbian 搭了些服务,比如 Gitea 、Wordpress 、Homeassistant 这些。平时会用台式机、手机访问自己搭的服务。 另外还有个电视盒子,也刷成 armbian 做一些小实验。

用得久了,不想每次输入 ip 、端口号这些来访问 web ,就有了自己搭 DNS 的想法,把自己的服务都映射到自定义域名上,再用 nginx 做反向代理。 自己有一台主路由,无线网络是 802.11AC ,配置不算高但刷了官方 openwrt 。就用 openwrt 的 DNS 服务实现宏域名到 IP 的映射,比如*.onecloud.lan 映射到 192.168.1.2 这样。

== 版本 0.1

主路由挂在光猫下面,其他节点挂在主路由下面。拓扑大概是这样

---------
|  光猫  |
---------
      |
---------
| 主路由 |
---------
  |  |  |
  |  |  --------
  |  ---       |
  |    |       |
节点 1  节点 2  节点 3 ...

主路由通过 LAN 连结各节点,通过 WAN 口连接光猫,开启 DHCP 和 DNS 。 这时候 DNS 按预期工作。一切都很好,唯一的问题是主路由要跟光猫一起放在弱电箱里(因为弱电箱是全家网线汇集点)

== 版本 0.2

为了发挥主路由的 5GHz 无线网功能,把主路由挪到一个房间里。现在主路由跟其他节点一起挂在光猫下面,光猫连结主路由的 LAN 口。拓扑如下

 -----------
|   光猫    |
 -----------
 |  |  |  |
 |  |  |  ------------
 |  |  --------      |
 |  -----     |      |
 |      |     |      |
主路由  节点 1  节点 2  节点 3 ...

关闭光猫的 DHCP ,主路由开启 DHCP 和 DNS ,DHCP 中把网关指定为光猫地址,把 DNS 指定为自己。这时候本应正常工作的。 但实际使用时,台式机访问本地域名上的服务,本地域名无法被主路由 DNS 解析。抓包调试半天发现,台式机存在两个 DNS: 一个是主路由通过 DHCP 配置的主路由 IPv4 地址, 另一个是光猫通过 IPv6 的 RA 分配的光猫 IPv6 地址. 域名解析时默认询问了光猫,光猫自然不知道本地域名所以返回了错误结果。

== 问题

这时候如果禁用台式机的 ipv6 是可以解决本地域名解析的,但代价比较大。 彻底解决需要禁止光猫在 ipv6 上的 DHCP 行为,但光猫配置界面比较简单,没有这项设置。

这种情况下有没有办法设置主路由 openwrt 来强制覆盖光猫的 ipv6 设置呢?

10425 次点击
所在节点    宽带症候群
91 条回复
felix0012
2024 年 4 月 10 日
@godall
再次感谢关注我这个小众问题

“但是你的问题是你本地域名,比如 a.mydomain.com; 客户端照样先解析 ipv6 地址,因为你这个是假域名,ipv6 DNS 自然解析不到,这时他会通过 ipv4 DNS 进行解析,这样控制权不就又回到你的路由器了吗?”

起初我也是这么想的,所以排故时主要检查主路由 dhcp 有没有正确声明 dns 地址。可检查结果是问题不在这里。

然后开始抓包,检查节点(台式机)的域名解析过程,比如我的本地域名是 gitea.onecloud.lan ,我在浏览器访问这个地址或者用命令行 ping 这个地址。

然后发现系统只发出了一个 ipv6 的 DNS 请求到光猫,光猫返回地址不存在,然后就没有然后了!操作系统没有继续请求 ipv4 dns !
大概就是 36 楼 @Andim 贴的优先级问题。
felix0012
2024 年 4 月 10 日
@Andim 谢谢点亮我的知识盲区,我也觉得是个优先级问题,但不知道系统具体逻辑细节和设置方式。晚上我回家试试看
txydhr
2024 年 4 月 10 日
@felix0012
v4 、v6 都要下发内网 dns ,或者在网关劫持 dns 流量
txydhr
2024 年 4 月 10 日
@felix0012 或者不分配 ipv6 的 dns
felix0012
2024 年 4 月 10 日
@deorth 主路由刷了 openwrt ,版本大概是 23.05 吧,理论上是有 vlan 的。但是你看看楼顶的拓扑版本 0.2 ,各节点挂在了光猫的交换机上,这时候设置 vlan 有效吗…
deorth
2024 年 4 月 10 日
@felix0012 没有。再买一台带 vlan 的交换机,所有网线都接交换机上。然后划两个 vlan ,一个 wan 一个 lan
felix0012
2024 年 4 月 10 日
@txydhr
问题是光猫里面没有这个设置选项,能让我关闭 ipv6dns 。
我已经把光猫的 dhcp 关掉了。但是 ipv6 的机制有点复杂,除了 dhcp 来分发一些配置之外,还有个机制叫做 ICMPv6 RA ( Router Advertisement ),抓包也发现各节点上指向光猫的 ipv6 dns 地址就是这么来的
felix0012
2024 年 4 月 10 日
@deorth 这投入,还不如我退回楼顶描述的 0.1 版拓扑了,大不了 WiFi 信号差一点… (笑哭)
deorth
2024 年 4 月 10 日
@felix0012 千兆八口带 vlan 的交换机现在不到 100 块了
felix0012
2024 年 4 月 10 日
@deorth 哈?好像确实是不到 100 ,我 out 了。

我的理解是这个交换机跟光猫一起放在弱电箱,光猫和其他网线都接交换机。

那么下一步,交换机划分出来的 wan 和 lan 之间需要物理连接吗?
或者说交换机到主路由是不是需要两条网线,分别连接路由的 wan 和 lan 呢
guanzhangzhang
2024 年 4 月 10 日
3 楼是正解,op 自带的网络-接口-接口下面的高级设置的 dhcp 选项 就是 dnsmasq 的 dhcp option 配置 找下,可以不下发 ipv6 dns ,例如添加两行

```
3,192.168.1.3 # 配置 dhcp 的网关
6,192.168.1.3 # 配置 dhcp 获取到的 dns ,如果稳定则旁路由自己的 IP
```

更多 option 查看文档 https://blog.abysm.org/2020/06/human-readable-dhcp-options-for-dnsmasq/ 包含 ipv6 的
18xlX5iTe9mdoau0
2024 年 4 月 10 日
还有个简单方法,直接买海外注册商的一个便宜域名做好解析就行,完全不折腾
felix0012
2024 年 4 月 10 日
@guanzhangzhang 如果节点获得了主路由的 ipv6 dns 是没问题的
问题在于光猫也广播了 ipv6 dns 是光猫自己。

这样节点解析域名的时候都去问光猫了,没人问主路由。

所以如果要解决问题不是禁用主路由的 ipv6 dns ,而是让他获得更高的优先级,高过光猫广播的 dns
deorth
2024 年 4 月 10 日
@felix0012 vlan 的意义就是不需要再拉网线
guanzhangzhang
2024 年 4 月 10 日
@felix0012 #53 你猫到路由的 lan 是过了你的主路由,你主路由的 iptables 价格规则就行了,wan_zone_input 啥的
felix0012
2024 年 4 月 10 日
@guanzhangzhang
现在就是没有经过主路由才出问题的,参考楼顶的拓扑版本 0.2 。之前的拓扑 0.1 工作的好好的。

在拓扑 0.2 中,主路由(其实算是旁路由了)的 dhcp 中设定网关是光猫、dns 是自己。关闭了光猫的 dhcp 。但光猫仍然在广播 dns
guanzhangzhang
2024 年 4 月 10 日
@felix0012 #56 哦哦,没仔细看,用 1 的拓扑呗,猫改不改桥接都行,买个 ap 啥的吧🤔
gdfsjunjun
2024 年 4 月 10 日
自定义 Hosts ?
小米路由器可以设置 Hosts ,直接把域名和本地 IP 绑定就好了。
godall
2024 年 4 月 10 日
@felix0012 我的网络就是类似你 0.2 样式的,完全没有问题。你用 nslookup gitea.onecloud.lan 试试看 dns 服务器是啥,返回是啥
txydhr
2024 年 4 月 10 日
@felix0012 ipv6 本身不复杂,只是大部分产品提供的 ipv6 配置,不全不是,少这个就是少那个。另外旁路由压根就不是正确的网络架构,相当于旁门左道,所以和 v6 完全不兼容,所以还是得改桥接。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1031174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX