有些人会有使用公网 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, 大家自行评估.
最后,
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.