有些人会有使用公网 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 32 天前
内网 DNS 服务器不返回 AAAA 记录 这个可以不需要,正常设备都是利用的临时后缀来访问 ipv6 网络,只要路由器上开启了 ipv6 防火墙,只给固定后缀开了端口,就完全不用管这个
|
2
Yidiudiu169 32 天前
我用的 lukcy ,不知道有没有影响
|
![]() |
4
SenLief 32 天前 via iPhone
为什么要像外网提供 http 服务呢?这是家宽明令禁止的。
|
![]() |
5
lns103 32 天前 via Android
@jqknono 不对吧,slaac 分配要扫 64 位才行(我是用的 eui64 作为固定后缀),除非开了 DHCPv6 ,还只分配后 16 位作为固定 IP (我是没开 DHCPv6 ,前缀变化不能及时更新)
|
![]() |
7
LnTrx 31 天前
有种只抓次要矛盾不抓主要矛盾的感觉:
1. IPv6 只要开了 SLAAC ,需要担心的就是主动外访的回访,或者主动公布地址(如 tracker ),而不是网络空间扫描。网络终端的地址空间至少 64bit ,几乎不可能遭被动扫到。 2. 既然已经提到不要监听公网,那监听局域网 IP 不就行了。为了便于自己理解搞内网域名没什么问题,但看不出监听公网+仅允许内网域名如何增加了安全性。 |
![]() |
8
totoro625 31 天前
1. “反向代理仅允许域名设置方法”
此处应返回 444 返回 403 恰好证明了该 IP 建站了 443 端口应配置 ssl_reject_handshake on 主动监听_或 IP 或简单的常见域名,并用 444 拒绝返回任何信息 2. 最关键的一步是配置防火墙及 IP 白名单 留一个幸运数字端口开放给公网访问,其他端口只给白名单 IP 访问 在那个端口上配置一下过白程序即可,简单示例: https://poe.com/s/lt3eBg7nH9v6HmKneVX8 3. ddns 域名混淆 自己维护一个备案域名,随便搭建一个博客掩人耳目 不要使用烂大街的常用前缀 多设置几个泛解析防止扫描 4. 不要使用第三方 dns ,自建 doh 使用 |
![]() |
9
jqknono OP |
![]() |
11
titanium98118 31 天前
你自己从外部发起的入站连接,ISP 一样是知道得一清二楚的
|
12
234ygg 31 天前
哪用得着那么复杂。。会折腾这些的大概率手机上都有代理软件,家里 ipv6 只开个端口给 vpn 就完事儿了
|
![]() |
13
LnTrx 31 天前
@jqknono 我已经讲过了,既然是内网服务,只响应内网就行了,没必要监听公网担心被扫到再加限制。
如果你想的是以内网域名形式跨公网访问,这么做也看不出什么意义。因为你想防的是 ISP ,但 ISP 可以获得你的 Host 或者 SNI ,不管用哪种域名都会被发现。 |
14
ericww 31 天前 via iPhone
对于最后,回内网有 VPN 是安全的,对外开放 http ,dns 服务随时会被封停,一顶帽子扣下来吃不了兜着走。两端有 ipv6 时候 tailscale 就没失败过,自建用 ddns+wireguard 掌握在自己手里。绝大部分非运营商直销大流量卡出口都是在物联卡公司,直接看光裸奔。在外全局连回家出口可控更安全。
|
![]() |
15
Zarhani 31 天前
zerotier/tailscale 在双方都有 ipv6 的情况下会直接直连, 无需打洞, 也无需关闭光猫的防火墙
|
![]() |
16
jqknono OP @LnTrx 要防的是被网络空间扫描到服务,不是 ISP 。要防的是被扫到的服务被 250 个以上的连接并发访问,导致 ISP 降级服务。关于做这些是否有意义,正如本文的第一句话,给需要的人用。
|
17
maybeonly 31 天前
所以有点好奇受众是怎样的人
不要在墙内公网上开 http ,即使是 v6 也不行。如果一定要 web 服务请 vpn 回家 毕竟运营商是可以嗅探的 至于低 16bit 扫描,这个……emmm ,如果换个地址分配方式呢? 至于不返回 aaaa 记录,完全没有必要或者说无关 内网服务监听 0.0.0.0 就行,不监听 v6 (点名批评 golang 刻意混淆 0.0.0.0 和::) 怕反向扫描其实完全可以整个单独的 ip 单独开服务而和其他东西分开的 用 docker 或者其他任何东西都好 |
![]() |
18
dicle 31 天前
是个大问题。
|
19
kaedeair 29 天前
不用这么麻烦,只需要一个能改 iptables 的路由器,配几个规则:
1.WAN 侧入站与 IPV6 转发默认 DROP 2.WAN 侧 ICMP echo 请求 DROP ip 地址变动是使用微信公众号推送解决的,也可以用邮件,就是效果差一点,主打一个白嫖 |