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

家宽和流量都有 IPV6 了,如何能像 IPV4 时代那样使用 DDNS 配合端口转发之类的东西实现公网访问家庭局域网主机上的服务?

  •  
  •   Maskeney · 2018-10-02 17:40:35 +08:00 · 16063 次点击
    这是一个创建于 2249 天前的主题,其中的信息可能已经有所发展或是发生改变。

    IPV4 时代只要家宽是公网 IP 就可以在路由防火墙上配置端口转发,配合搭建的 DDNS 服务就可以实现公网访问服务,部署一次以后就可以随便用,可以基本上说是一劳永逸。

    例如:

    使用动态域名 ddns.domain.com:13389 可以访问转发到内网 192.168.1.10:3389 实现 Windows RDP 远程控制;
    使用动态域名 ddns.domain.com:10022 可以访问转发到内网 192.168.1.11:22 实现 SSH 的访问。

    到了 IPV6 时代,家宽已经正常分配 PD,并且局域网内各个主机也有自己独立的 IPV6 地址,所以端口转发这一步就可以省掉了,实现路由器 Web 控制台访问很简单,OpenWrt 自带的 DDNS 即可方便的获取 WAN 口的 IPV6 地址。但是如何通过一个便捷的、类似于原来的动态域名的方式访问局域网主机上的服务?

    目前我能想到的:

    1.局域网内的需要被访问的每台主机各自运行脚本,以获取各个主机自己当前的 IPV6 地址,然后再通过 API 更新到域名上。
    2.通过上面说的,进入路由器 Web 控制台查看局域网内主机设备当前的 IPV6 地址,然后再进行访问。

    上面两种方式都各有优劣,并且由于家宽大部分都是动态 IP,体验上都是远不如 V4 时代 DDNS 配合端口转发来的方便,不知各位有何高见?

    第 1 条附言  ·  2019-07-12 16:46:05 +08:00
    似乎 slaac 方式得到的 IPV6 地址只有主机自己知道,对于网关似乎是完全透明的,除非使用 DHCPv6 模式才能配合 DHCP 服务知道哪个 IP 分配给了哪个主机,但是 Android 不支持 DHCPv6,这一条就足以弃用 DHCPv6。
    综上所述,slaac 方式的 IPV6 网络似乎是无法像 V4 时代一样通过网关上的 DHCP 服务获知局域网主机的 IP。
    33 条回复    2020-12-14 16:50:43 +08:00
    Archeb
        1
    Archeb  
       2018-10-02 18:06:12 +08:00
    > 1.局域网内的需要被访问的每台主机各自运行脚本,以获取各个主机自己当前的 IPV6 地址,然后再通过 API 更新到域名上。

    这一点可以由分配地址的路由器做到呀~
    比如给 *.home.myhome.com 自动绑定主机名字和分配到的 IPv6 地址不就好了

    当然,如果是使用 NDP Proxy 之类方式连接 IPv6 的话,貌似就不能简单的做到这一点了,需要魔改 relay 部分
    如果是 DHCP-PD 分配前缀再分配下去的话就很简单

    随着 ipv6 的发展,感觉以后会有一个进阶的 DDNS 服务,局域网主机 DDNS,不知道现在有人做了么
    tia
        2
    tia  
       2018-10-02 18:10:01 +08:00 via Android
    ddns 目前阿里云的比较好用,不过阿里云的 openwrt 的脚本比较普遍,win 平台有个 py 版的脚本,但是不支持 v6,具体可以在 github 直接搜 aliddns
    Archeb
        3
    Archeb  
       2018-10-02 18:11:18 +08:00
    简单地说就是

    路由器根据 DHCPv6 分配列表,给局域网里的设备自动做 DDNS
    renothing
        4
    renothing  
       2018-10-02 18:25:14 +08:00
    局域网开 stateless 模式分配地址。这样,后半部分说固定的.openwrt 上只需要获取网络前缀,就能推算子网下主机得实际地址。
    innoink
        5
    innoink  
       2018-10-02 20:50:14 +08:00 via Android
    虽然没搞过路由器,我觉得运行一个 nc 就搞定了啊,不就是端口转发么
    Maskeney
        6
    Maskeney  
    OP
       2018-10-02 21:05:48 +08:00 via Android
    @Archeb emmm … openwrt 有这功能?或者 ipk ?
    Maskeney
        7
    Maskeney  
    OP
       2018-10-02 21:08:28 +08:00 via Android
    @tia 不用阿里谢谢 我 DNS 在 cloudflare 解析

    @renothing 然而这样跟我是的方案 2 没啥区别还是需要手动推算 IP 地址,甚至从某些角度来看,方案 2 复制粘贴更方便


    @innoink nc 在这种需求下怎么用?详细说说?
    Archeb
        8
    Archeb  
       2018-10-02 21:08:39 +08:00
    @Maskeney 没有呢,所以我觉得这可能以后有人会做这样的脚本...
    renothing
        9
    renothing  
       2018-10-02 21:22:04 +08:00   ❤️ 1
    @Maskeney 你如果是 openwrt,那可以在 /etc/hotplug.d/下做脚本,前缀变更就自动执行脚本,拿前缀和局域网的地址做组合来动态更新 dns。如果设备很多,那可以看看 arp 表,iproute2 的 ip nei show 很强大,应该满足你的需求。
    我目前也是用得 openwrt+cloudflare.
    Maskeney
        10
    Maskeney  
    OP
       2018-10-02 21:23:26 +08:00 via Android
    @Archeb 其实我有方案 3 没写…就是等有人造个这样的轮子出来
    Maskeney
        11
    Maskeney  
    OP
       2018-10-02 21:24:46 +08:00 via Android
    @renothing 对我来说…有点难 前缀的话应该是跟 wan 口的地址前缀相同吧…不太需要单独获取,至于 ARP 表…我歇菜了
    renothing
        12
    renothing  
       2018-10-02 22:37:02 +08:00
    @Maskeney 给你个参考,新版本可以用更加强大的 ubus 来做,老版本用 hotplug. 两者官方都有参考文档

    https://wiki.openwrt.org/doc/techref/hotplug
    https://wiki.openwrt.org/doc/techref/ubus

    另外,wan 口和 lan 口的地址前缀不一样,wan 口是单独得一个 /64,默认给设备的 /64 在 lan 口上。
    比如你要获取分配到 lan 口地址前缀
    ```
    ubus call network.interface.lan status
    ```
    ipv6 stateless 模式下,设备 ipv6 地址段是固定的,根据 mac 地址生成。你把网络段+地址段自己拼接,就是设备完整地址。
    https://www.zhihu.com/question/20118076
    cwbsw
        13
    cwbsw  
       2018-10-02 22:54:27 +08:00
    @renothing
    知识可以更新下了,EUI-64 已被建议不再部署。
    Wenpo
        14
    Wenpo  
       2018-10-03 00:49:00 +08:00 via Android
    没这么复杂,padavan 有现成的啦。点几下就可以了
    ysc3839
        15
    ysc3839  
       2018-10-03 03:15:49 +08:00 via Android
    @renothing 主流操作系统支持 SLAAC 的隐私保护功能,会在段里面随机选择一个 IP 来联网,不会通过 MAC 地址来生成地址。
    Maskeney
        16
    Maskeney  
    OP
       2018-10-03 08:19:33 +08:00 via Android
    @renothing DHCP v6 不是根据主机发送的 DUID 来分配 IP 后缀的么
    Maskeney
        17
    Maskeney  
    OP
       2018-10-03 08:20:03 +08:00 via Android
    @Wenpo 展开说说看?或者是没有仔细审题?
    ifishman
        18
    ifishman  
       2018-10-03 10:23:40 +08:00 via Android
    v6 初丁问一下具体的 ipv6 配置,我现在终端可以获取到 v6 地址,也可以访问外网,但是外网没法访问到终端,DHCPv6 服务器模式,无状态
    Maskeney
        19
    Maskeney  
    OP
       2018-10-03 18:11:04 +08:00
    @ifishman 防火墙?
    ifishman
        20
    ifishman  
       2018-10-04 09:08:54 +08:00 via Android
    @Maskeney openwrt 的默认防火墙不是允许 icmp 流量的吗
    ShareDuck
        21
    ShareDuck  
       2018-10-04 12:13:04 +08:00 via Android
    @ifishman 简单,你把路由器的防火墙关掉测试一下就知道是不是防火墙的问题了。
    zhouyut001
        22
    zhouyut001  
       2018-10-04 23:12:15 +08:00 via Android
    鑒於 ipv6 家用寬帶設置目前比 ipv4 複雜,有 ipv4 公網的還是繼續用 4 吧
    liuxyon
        23
    liuxyon  
       2018-10-05 13:04:35 +08:00
    我可以提供公网 IP 不就行了。
    ifishman
        24
    ifishman  
       2018-10-05 19:23:48 +08:00 via Android
    ipv6 的 ddns 昨晚解决了,另外端口转发我觉得没必要,直接新添流量转发规则就好了
    jim9606
        25
    jim9606  
       2018-10-05 22:56:11 +08:00
    openwrt 的防火墙默认阻止流入 LAN 的 IPV6 流量(部分 ICMPv6 可以),记得加防火墙规则或者禁用 ipv6 防火墙(不安全)。
    如果不介意一些隐私问题可以关掉终端的 slaac 隐私保护,强制使用 eui-64 的接口 id,这样路由器那边可以根据路由自身的 IPV6 地址推算主机 IP
    xinglp
        26
    xinglp  
       2018-10-05 23:15:31 +08:00 via Android
    @jim9606 有类似 upnp 的东西么? 不是映射端口而是放行某个端口的方案。
    BOGU
        27
    BOGU  
       2018-10-29 14:45:39 +08:00
    就等一个轮子了,给内网所有的公网 ipv6 主机分配一个自定义的 DDSN 域名。
    meibu
        28
    meibu  
       2019-07-12 16:34:03 +08:00
    www.meibu.com 提供了 IPV6 的动态域名解析服务,申请个域名绑定 IPV6 地址即可,很简单
    Maskeney
        29
    Maskeney  
    OP
       2019-07-12 16:39:58 +08:00
    @meibu #28 好好读题 难题是在网关这里 如何获取局域网每个设备的 slaac 出来的 IPV6 而不是用什么动态域名服务 就算要用我也没理由放弃 CF 不用去选择这种看起来蛮野鸡的服务
    liuli
        30
    liuli  
       2019-08-25 00:41:59 +08:00
    @Maskeney 现在有好办法了吗,我遇到与你同样的问题,移动宽带只有 IPV6 可以直通,但 nas 的 v6 地址与路由器不同,群晖似乎不支持 v6 地址的 ddns。
    heartrick
        31
    heartrick  
       2020-07-03 18:12:36 +08:00
    @liuli 今天刚装完移动宽带,面临同样的问题。
    lentrody
        32
    lentrody  
       2020-12-14 16:47:38 +08:00
    @cwbsw 如果是需要 DDNS 解析的场景那就还是应该部署啊,如果要解析到域名还有必要使用隐私地址吗?
    lentrody
        33
    lentrody  
       2020-12-14 16:50:43 +08:00
    @ysc3839 隐私地址和 EUI-64 生成地址是可以同时存在的,Windows 里就是这样,访问外部网站时优先使用隐私地址,同时也可以用固定后缀地址访问进来。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3087 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:45 · PVG 22:45 · LAX 06:45 · JFK 09:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.