V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jqknono
V2EX  ›  宽带症候群

分享几个更安全使用公网 IPv6 的方法

  •  
  •   jqknono · 13 小时 54 分钟前 · 1013 次点击

    有些人会有使用公网 IPv6 回家的需求, 不同于 tailscale/zerotier 等 VPN 需要内网穿透打洞来建立直连的方式, IPv6 回家就是直连, 手机蜂窝网络大多数时候都是有 IPv6 的, 回家非常方便.

    我之前分享过一篇文章家庭宽带使用常见 DDns 子域名可能会使电信宽带服务降级, 描述使用 IPv6 时运营商挖的一个坑, 简短来说就是域名会被扫, 暴漏自己的域名等同于暴露 IPv6, 因此可能会被扫描, 扫到服务后入站连接一多就降级宽带服务.

    那篇分享里只提到了避免暴露域名, 实际上还有网络空间扫描, 它不管什么暴露的信息, 直接遍历 IP 池开扫, 这种情况较难防.

    网络空间扫描通常包括以下几个方面:

    • IP 存活性探测:利用 ARP 、ICMP 、TCP 等协议来识别在线主机。
    • 端口/服务探测:通过端口扫描筛选出在线主机的开放端口,并获取目标主机的服务信息、版本信息以及操作系统信息。
    • 操作系统探测:通过分析响应数据包来推断目标主机的操作系统类型和版本。
    • 流量采集:监控网络流量以发现异常行为或攻击模式。
    • 别名解析:针对拥有多个 IP 地址的路由器,建立 IP 地址与路由器之间的映射关系。
    • DNS 探测:通过 IP 地址反向解析建立 IP 地址与域名之间的对应关系。

    这里分享几个避免被网络空间扫描扫到的方法:

    1. 内网 DNS 服务器不返回 AAAA 记录
    2. 内网服务仅允许通过域名访问, 不允许直接通过 IP 访问
    3. 使用私有 DNS 服务AdGuardPrivate

    内网 DNS 服务器不返回 AAAA 记录

    上网时上到各式各样的网站, 这样自然的访问就可以暴露源 IPv6, 对方服务器可以获取源 IPv6, 用户侧如果没开防火墙的话, 这个 IPv6 就可以放到网络空间扫描的优先遍历池里.

    还可以将/56前缀的 IPv6 地址放到扫描池里, 仅遍历低 16 位, 扫描范围也可大大缩减.

    我使用多年 IPv6 的体会, 日常上网时 IPv6 相较 IPv4 没有明显的区别. 因此我们可以牺牲 IPv6 的外访, 仅用来直连回家.

    设置不返回 IPv6 解析方法

    在内网 DNS 服务器上, 设置不返回 AAAA 记录.

    内网 DNS 服务一般用的 AdGuardHome, 参考设置:

    设置禁用 IPv6

    设置后, 内网设备访问外网时只会使用 IPv4, 不会再使用 IPv6.

    内网服务仅允许通过域名访问

    可能家里暴露的服务可以基于端口访问, 这样非常容易被扫到存在服务.

    最好在创建服务时, 不要做监听0.0.0.0::这样的设置, 经验丰富的能体会到, 几乎所有服务启动指导默认都只监听127.0.0.1::1, 这是因为监听公网 IP 是存在风险的.

    反向代理仅允许域名设置方法

    nginx 示例

    关键是设置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;
        }
    
        # 其他配置...
    }
    

    IIS 示例

    关键是设置host name为域名, 不要留空.

    IIS 示例

    使用私有 DNS 服务

    在仅自己使用的 DNS 服务中添加自定义解析, 以伪造的域名解析到内网服务.

    DNS 重写功能

    这样做有几个明显的好处.

    1. 首先域名是可以随便构造的, 不需要购买域名, 省一笔域名费用. 如果这种伪造域名被扫到, 那么攻击者需要请求你的 DNS 服务才能获取到正确解析结果.
    2. 需要同时暴露自己的私有 DNS 服务地址, 以及虚拟域名, 然后扫描者需要修改域名的解析逻辑, 向暴露的私有 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. 内网 DNS 服务器不返回 AAAA 记录
      • 前置条件
        • 有公网 IPv6
        • 有内网 DNS 服务器
      • 设置
        • 不返回 AAAA 记录
    2. 内网服务仅允许通过域名访问, 不允许直接通过 IP 访问
      • 前置条件
        • 有自己的域名
        • 域名服务商提供 DDNS
        • 内网有反向代理服务
      • 设置
        • 设置 DDNS 任务
        • 仅允许通过域名访问
    3. 使用私有 DNS 服务
      • 前置条件
        • 有私有 DNS 服务
        • 私有 DNS 服务提供自定义解析
        • 私有 DNS 服务提供 DDNS
      • 设置
        • 设置 DDNS 任务
        • 添加自定义解析, 伪造域名解析到内网服务

    最后,

    • 直连回家最简单最安全的就是内网穿透成功的 tailscale/zerotier, 但有时会因为各种网络原因穿透不成功.
    • 不要随便连陌生 Wifi, 能一次性把信息给泄露完了. 搞张大流量卡, 暂且把信任交给运营商, 需要便宜大流量卡的联系我(不是), 我也需要.
    7 条回复    2025-03-01 04:05:06 +08:00
    lns103
        1
    lns103  
       12 小时 30 分钟前
    内网 DNS 服务器不返回 AAAA 记录 这个可以不需要,正常设备都是利用的临时后缀来访问 ipv6 网络,只要路由器上开启了 ipv6 防火墙,只给固定后缀开了端口,就完全不用管这个
    Yidiudiu169
        2
    Yidiudiu169  
       9 小时 15 分钟前
    我用的 lukcy ,不知道有没有影响
    jqknono
        3
    jqknono  
    OP
       8 小时 56 分钟前 via Android
    @lns103 泄露了前缀可以扫低 16 位
    SenLief
        4
    SenLief  
       6 小时 41 分钟前 via iPhone
    为什么要像外网提供 http 服务呢?这是家宽明令禁止的。
    lns103
        5
    lns103  
       5 小时 13 分钟前 via Android
    @jqknono 不对吧,slaac 分配要扫 64 位才行(我是用的 eui64 作为固定后缀),除非开了 DHCPv6 ,还只分配后 16 位作为固定 IP (我是没开 DHCPv6 ,前缀变化不能及时更新)
    YsHaNg
        6
    YsHaNg  
       4 小时 21 分钟前 via iPhone
    @SenLief 地球上没有禁止
    LnTrx
        7
    LnTrx  
       13 分钟前
    有种只抓次要矛盾不抓主要矛盾的感觉:
    1. IPv6 只要开了 SLAAC ,需要担心的就是主动外访的回访,或者主动公布地址(如 tracker ),而不是网络空间扫描。网络终端的地址空间至少 64bit ,几乎不可能遭被动扫到。
    2. 既然已经提到不要监听公网,那监听局域网 IP 不就行了。为了便于自己理解搞内网域名没什么问题,但看不出监听公网+仅允许内网域名如何增加了安全性。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 20:18 · PVG 04:18 · LAX 12:18 · JFK 15:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.