有些人会有使用公网 IPv6 回家的需求, 不同于 tailscale/zerotier 等 VPN 需要内网穿透打洞来建立直连的方式, IPv6 回家就是直连, 手机蜂窝网络大多数时候都是有 IPv6 的, 回家非常方便.
我之前分享过一篇文章家庭宽带使用常见 DDns 子域名可能会使电信宽带服务降级, 描述使用 IPv6 时运营商挖的一个坑, 简短来说就是域名会被扫, 暴漏自己的域名等同于暴露 IPv6, 因此可能会被扫描, 扫到服务后入站连接一多就降级宽带服务.
那篇分享里只提到了避免暴露域名, 实际上还有网络空间扫描
, 它不管什么暴露的信息, 直接遍历 IP 池开扫, 这种情况较难防.
网络空间扫描
通常包括以下几个方面:
这里分享几个避免被网络空间扫描扫到的方法:
上网时上到各式各样的网站, 这样自然的访问就可以暴露源 IPv6, 对方服务器可以获取源 IPv6, 用户侧如果没开防火墙的话, 这个 IPv6 就可以放到网络空间扫描的优先遍历池里.
还可以将/56
前缀的 IPv6 地址放到扫描池里, 仅遍历低 16 位, 扫描范围也可大大缩减.
我使用多年 IPv6 的体会, 日常上网时 IPv6 相较 IPv4 没有明显的区别. 因此我们可以牺牲 IPv6 的外访, 仅用来直连回家.
在内网 DNS 服务器上, 设置不返回 AAAA
记录.
内网 DNS 服务一般用的 AdGuardHome, 参考设置:
设置后, 内网设备访问外网时只会使用 IPv4, 不会再使用 IPv6.
可能家里暴露的服务可以基于端口访问, 这样非常容易被扫到存在服务.
最好在创建服务时, 不要做监听0.0.0.0
和::
这样的设置, 经验丰富的能体会到, 几乎所有服务启动指导默认都只监听127.0.0.1
和::1
, 这是因为监听公网 IP 是存在风险的.
关键是设置server_name
为域名, 不要设置为_
或IP
.
server {
listen 80;
server_name yourdomain.com; # 将 yourdomain.com 替换为您的实际域名
# 返回 403 Forbidden 给那些试图通过 IP 地址访问的用户
if ($host != 'yourdomain.com') {
return 403;
}
location / {
# 这里是您的网站根目录和其他配置
root /path/to/your/web/root;
index index.html index.htm;
}
# 其他配置...
}
关键是设置host name
为域名, 不要留空.
在仅自己使用的 DNS 服务中添加自定义解析, 以伪造的域名解析到内网服务.
这样做有几个明显的好处.
Headers
中, 才能开始扫描.sequenceDiagram
participant Scanner as 网络扫描者
participant DNS as 私有 DNS 服务器
participant Service as 内网服务
Scanner->>DNS: 1. 发现私有 DNS 服务器地址
Scanner->>DNS: 2. 请求解析虚拟域名
DNS-->>Scanner: 3. 返回内网服务 IP
Scanner->>Service: 4. 使用虚拟域名构造 Headers
Note right of Service: 如果 Headers 中没有正确的虚拟域名<br/>则拒绝访问
alt Headers 正确
Service-->>Scanner: 5a. 返回服务响应
else Headers 错误
Service-->>Scanner: 5b. 返回 403 错误
end
只有扫描者完成以上所有步骤,才可能扫描到内网服务,这大大增加了扫描的难度。
在AdGuardPrivate上可以创建私有 DNS 服务, 使用自定义解析功能添加伪造域名, 当然也可以用dnspod.cn家的.
这两家提供服务差别较大, AdGuardPrivate 就是原生的 AdGuardHome 改来的, 功能上远多于 dnspod, 大家自行评估.
最后,
![]() |
1
lns103 12 小时 30 分钟前
内网 DNS 服务器不返回 AAAA 记录 这个可以不需要,正常设备都是利用的临时后缀来访问 ipv6 网络,只要路由器上开启了 ipv6 防火墙,只给固定后缀开了端口,就完全不用管这个
|
2
Yidiudiu169 9 小时 15 分钟前
我用的 lukcy ,不知道有没有影响
|
![]() |
4
SenLief 6 小时 41 分钟前 via iPhone
为什么要像外网提供 http 服务呢?这是家宽明令禁止的。
|
![]() |
5
lns103 5 小时 13 分钟前 via Android
@jqknono 不对吧,slaac 分配要扫 64 位才行(我是用的 eui64 作为固定后缀),除非开了 DHCPv6 ,还只分配后 16 位作为固定 IP (我是没开 DHCPv6 ,前缀变化不能及时更新)
|
![]() |
7
LnTrx 13 分钟前
有种只抓次要矛盾不抓主要矛盾的感觉:
1. IPv6 只要开了 SLAAC ,需要担心的就是主动外访的回访,或者主动公布地址(如 tracker ),而不是网络空间扫描。网络终端的地址空间至少 64bit ,几乎不可能遭被动扫到。 2. 既然已经提到不要监听公网,那监听局域网 IP 不就行了。为了便于自己理解搞内网域名没什么问题,但看不出监听公网+仅允许内网域名如何增加了安全性。 |