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

关于 IPV6 地址的使用问题

  •  
  •   vhus · 2020-05-08 22:52:18 +08:00 · 8310 次点击
    这是一个创建于 1658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    抛个砖。
    ipv6 地址有了,虽然是动态的……吐槽…省略…
    好的地方:可以无视防火墙,透过内网,任意去访问每个网络设备,如远程桌面,文件服务器等。
    不好的地方:
    1.用这个 IPV6 地址是巨大的折磨。
    如:在盒子里播放远程 NAS 里共享的电影:
    \\240e-3a1-63F-9390-201-32ff-fe2c-a603.ipv6-literal.net\fies\media\XXX.m2ts 要写这么一长串的字母,快疯了呀。
    2.不是每个设备都能支持 DDNS 做域名转换,但很难找到它的 IPV6 地址。就算设备支持 DDNS,一堆设备配置起来也很头痛。
    3.IPV6 的网络安全问题,所有设备暴露在公网上,这个就不讨论了。
    不知有什么新的或更好的解决方案,请大神们来交流一下。
    第 1 条附言  ·  2020-05-09 01:42:06 +08:00
    最近在家办公,通过 IPV6 公网 ip 访问公司的服务器、打印机等应用场景还是挺方便,不用去弄什么 VPN,穿墙等设置。
    IPV6 还是挺好玩儿的,希望大家多给些使用经验和建议。
    47 条回复    2020-07-03 16:08:14 +08:00
    Aoang
        1
    Aoang  
       2020-05-08 23:20:53 +08:00 via Android
    不支持 ddns 做域名转换是什么意思?这个链接用的不是域名吗?

    关于多设备配置 ddns,弄个脚本丢在设备上跑就好了啊。

    安全问题,开防火墙,不用弱口令,定期更换。

    还有动态 ip 的问题,真给你一个静态的,某天被什么网站、服务 ban 了 ip,你怎么整?准备找运营商投诉?

    凡事都有多面性,有利必有弊,根据个人做取舍
    cwbsw
        2
    cwbsw  
       2020-05-08 23:24:13 +08:00
    1. 远程地址,你 v4 也得用域名啊。本地局域网,可以用 ULA 地址,比如 fd::1 。
    2. DDNS 一行 curl 命令的事,能有多复杂。
    3. 我的方案,wireguard 连回家里,allowedip 为家里内网网段,在外面可以一直开着,不访问家里内网时不会占用资源。
    wazon
        3
    wazon  
       2020-05-08 23:44:08 +08:00
    不知道你用的是什么 NAS,群晖里带 IPv6 的 DDNS 配置起来应该不麻烦
    如果想用一台机器自编脚本集中处理 DDNS,那么局域网内的其他设备可以用邻居发现协议( NDP )找到( https://www.v2ex.com/t/646082#r_8596830
    SLAAC 分配的 IP 地址你会暴露给 ISP 和你主动访问的对象。如果想进一步加强安全性可以配 IPv6 的防火墙( https://www.v2ex.com/t/669225?p=1#r_8930837


    IPv4 下因为内网的 NAT,所有的外部访问都由路由器集中转发,客观上方便了 DDNS
    IPv6 下不再有 NAT,为用户提供了更大的自由度(比如可以有多台 NAS 用同一套端口方案),同时配置的方式也出现了改变。在这种情况下,可以每台设备各自做 DDNS,可以选择一台中枢设备转发流量(模仿 NAT 的模式),也可以选择一台设备根据 NDP 的信息按 MAC 分别配置 DDNS
    wazon
        4
    wazon  
       2020-05-08 23:46:56 +08:00
    补充:
    群晖里的 DDNS 是图形界面
    SLAAC 分配的 IP 地址除了 本地设备、ISP 和 该设备主动访问的对象,不容易被外人所知,且极难被暴力扫到,因此天生具有一定的安全性
    wjswxp
        5
    wjswxp  
       2020-05-09 00:34:14 +08:00
    你甚至可以强制使用 IPv6 NAT 以增加安全性,只要网关是公网可访问的,你就可以外部接入啊。
    vhus
        6
    vhus  
    OP
       2020-05-09 00:46:57 +08:00
    @Aoang @cwbsw @wazon
    谢谢各位,要给设备个分配个域名,但是设备不一定支持,不是所有的设备都能跑脚本,比如我的小米电饭煲。
    @Aoang 这个链接用的不是域名吗?---不是域名,那就是 ipv6 的地址。
    locoz
        7
    locoz  
       2020-05-09 00:54:42 +08:00 via Android
    1 、内网 dns 解决,路由器上配一下就好了
    2 、ipv6 ddns 可以在路由器上做的,这个问题也不大,获取一下 dhcp 表就好了
    3 、安全问题也好解决,路由器有防火墙,即使内部设备是公网 ipv6 也仍然能被路由器的防火墙阻断特定端口的通信,你仍然可以只开放特定端口
    vhus
        8
    vhus  
    OP
       2020-05-09 00:55:02 +08:00
    ipv6 的好处之一就是网关透明的,不用去考虑 NAT 、端口等问题。
    亟待解决的就是如何给每个设备分配个域名,而不是每次敲一长串地址,况且那地址总是在变。
    AoTmmy
        9
    AoTmmy  
       2020-05-09 00:55:04 +08:00 via Android
    不支持脚本的可以用端口转发,在内网设备上转发指定端口
    vhus
        10
    vhus  
    OP
       2020-05-09 00:59:08 +08:00
    @AoTmmy 那又几乎退回到 IPV4 的配置方式了呀。
    zro
        11
    zro  
       2020-05-09 01:00:43 +08:00
    3.有公网 IP 不代表就暴露了,要取决网关帮不帮你路由进来的,默认只允许路由出去的。。

    @cwbsw #2 你是在 OpenWRT 搭的 WireGuard Server 吗?
    vhus
        12
    vhus  
    OP
       2020-05-09 01:04:03 +08:00
    @locoz 如果用 ipv6 dhcp 分配地址,那就跟 ipv4 没有多大差异,也就没必要说这个问题了。
    比较容易的是 ND 方式自动分配。
    AoTmmy
        13
    AoTmmy  
       2020-05-09 01:08:49 +08:00 via Android
    @vhus 你设备连 curl 或者脚本都不支持的话用 IPv6 也没有什么意义吧,内网走 IPv4 也比 v6 方便。你这个输入的 v6 地址也不知道意义何在,ddns 到 a.ipv6-literal.net 或者 xx.ipb6-literal.net 不就行了
    vhus
        14
    vhus  
    OP
       2020-05-09 01:12:06 +08:00
    @zro 常用的家用级路由器,只要获取了公网 ipv6 地址,如果没开防火墙每个设备就都暴露在公网上。
    网络安全不是我目前想解决的重点,重点是 ipv6 ddns 。
    Atomo
        15
    Atomo  
       2020-05-09 01:15:35 +08:00
    不能跑脚本的设备,根本就没打算让你主动访问,都是被动的,你主动访问小米电饭煲有啥用?

    如果该设备有跑服务程序,并且让你主动访问,肯定有设置 ip 的方式

    获取 ipv6 地址可以从互联网取得 ( https://)ipv6.ddnspod.com
    vhus
        16
    vhus  
    OP
       2020-05-09 01:23:31 +08:00
    @AoTmmy 我的问题是在 ipv6 的使用方面,意义还是有的,ipv6 方便的地方也就是可以 IP 到 IP 的直接连接,不用通过 NAT 、端口转发。问题主要就是----如何不写那么长的字符,转换成固定的域名。
    vhus
        17
    vhus  
    OP
       2020-05-09 01:29:40 +08:00
    @Atomo
    访问电饭煲当然是做饭,而且设定环境为远程访问,常规方法的是路由器器上做端口映射或架 VPN 这个不用讨论了,我们说的是在 IPV6 环境下的应用。
    设备已有 ipv6 地址了。
    vhus
        18
    vhus  
    OP
       2020-05-09 01:33:56 +08:00
    统一感谢楼上回复的兄弟们,可能做饭意义不大,我把电饭煲的例子换为打印机吧。^_^
    Atomo
        19
    Atomo  
       2020-05-09 01:37:39 +08:00 via Android
    从我的角度考虑,物联网设备最好有一个云平台,设备发心跳包告知平台状态和 ip,控制终端(手机或者电脑)通过认证接入平台,进而控制相应的设备
    Atomo
        20
    Atomo  
       2020-05-09 01:43:04 +08:00 via Android
    想把设备的当前 ipv6 地址和域名做绑定,还是要设备主动告知,不管是告知云平台,还是告知 ddns,否则比较难实现,因为 v6 地址是动态的,这也是 v6 的安全之处
    vhus
        21
    vhus  
    OP
       2020-05-09 01:48:19 +08:00
    @Atomo 是的,这是相对理想状态,以后一定能实现,我们先回到现实,看看有什么经验可分享。
    Atomo
        22
    Atomo  
       2020-05-09 02:00:32 +08:00 via Android
    @vhus 对于没有开启 SLAAC 功能的设备来说,64 位后缀是固定的静态的,你可以通过网关或者 nas 或者电脑 ddns 获取到 64 位动态前缀,然后拼凑完整的 128 位地址到域名解析
    AoTmmy
        23
    AoTmmy  
       2020-05-09 02:17:57 +08:00 via Android
    感觉这种小的东西弄个专门的 ddns 像脱裤子放屁🐶
    找一台机器做前端机 ddns 泛解析到 xx.com ,局域网内的机器如果是网页用 nginx 反代,如果是打印机端口转发 31 。感觉只是为了一两个端口的单独 ddns 真是没必要,你也不用输一堆字母了一个域名搞定而且更安全(除了公网打印机)
    这种连脚本都跑不了的功能都简单,我感觉集合到一个 ddns 就可以
    功能复杂的设备都能跑脚本就直接 ddns
    leschans
        24
    leschans  
       2020-05-09 06:56:40 +08:00 via iPhone
    0. 如果是家庭宽带分配动态 IP 蛮合理的啊。
    1. 你写的这个就是域名啊,你不弄个这么长的不就是了。比如 nas.ipv6-literal.net
    2. 一般的设备都能弄 DDNS 吧,curl -6 一下就好了,Google 一下很多免费的。要是说内网的手机这类设备 curl 不了,先看看访问手机的用处大不大。
    3. 如果你不是真给内网全部设置了 IPv6,你暴露的顶多是 IPv6-PD 地址,要知道后面的得枚举了。实在有必要的可以绑定 MAC 访问。
    CheekiBreeki
        25
    CheekiBreeki  
       2020-05-09 08:01:18 +08:00 via Android
    ddns,用 dynv6 這個支持 4/6 雙桟,跑個腳本 2 分鐘檢測上報就 ok 了
    qingxi
        26
    qingxi  
       2020-05-09 09:19:38 +08:00 via Android
    支持 dhcpv6 可以指定分配后缀,像原生安卓只支持 slaac 后缀由网卡 mac 地址换算,这个后缀又长又难记
    locoz
        27
    locoz  
       2020-05-09 10:58:11 +08:00
    @vhus #12 有差异的,ipv6 下分配的是公网 ip,ipv4 下分配的是 nat 后的内网 ip...
    Michaelssss
        28
    Michaelssss  
       2020-05-09 11:16:36 +08:00
    nas 看电影还要手输??地址超长就无视把,买个 10 块钱的.icu 域名,挂 AAAA,跑脚本 ddns 完全满足你的需求
    wslzy007
        29
    wslzy007  
       2020-05-09 13:20:23 +08:00
    保持防火墙打开,使用 sg 穿透防火墙访问即可。访问 url 使用 ipv4 ( ipv4 over ipv6 )
    github.com/lazy-luo/smarGate
    Atomo
        30
    Atomo  
       2020-05-09 14:16:28 +08:00
    @Atomo #22 我尝试完善了针对固定 ipv6 后缀并且不能跑 ddns 脚本的设备,可通过同一内网的任意设备替它跑 ddns,

    1.获取自身 ipv6 外网地址
    curl ( https) ipv6.ddnspod.com 返回:2001:1234:1234:1234:1:1:1:1

    2.获取自身 ipv6 地址前缀
    curl ( https) ipv6.ddnspod.com/prefix 返回:2001:1234:1234:1234::

    3.获取自身 ipv6 前缀+自定义后缀
    curl ( https) ipv6.ddnspod.com/prefix/22 返回:2001:1234:1234:1234::22
    curl ( https) ipv6.ddnspod.com/prefix/2:2:2:2 返回:2001:1234:1234:1234:2:2:2:2
    vhus
        31
    vhus  
    OP
       2020-05-09 14:23:45 +08:00
    @AoTmmy 兄弟,我们在说的是一种业务模式,别谈是否有意义。
    vhus
        32
    vhus  
    OP
       2020-05-09 14:35:20 +08:00
    @Atomo 我目前也只能通过获取路由器获取网段 ipv6 地址,再通过记录设备 EUI-64 地址,换算为设备公网 ipv6 地址。
    地址长度过长这个梗,目前绕不开,如何把它分配个 DDNS 域名,就是最头痛的问题了。
    vhus
        33
    vhus  
    OP
       2020-05-09 14:40:24 +08:00
    @Atomo 用一个设备代替其他不能运行脚本的客户端去进行 DDNS 更新,是个解决方案,还需研究一下,争取能在网关上直接运行它。
    Atomo
        34
    Atomo  
       2020-05-09 15:08:45 +08:00
    @vhus #33 我用的是这个 dnspod 的稍微修改了一下,加到定时任务就行了,
    https://github.com/kkkgo/dnspod-ddns-with-bashshell
    Atomo
        35
    Atomo  
       2020-05-09 15:16:33 +08:00
    针对 Only-ipv6

    ```
    token="login_token=${API_ID},${API_Token}&format=json&domain=${domain}&record_type=AAAA&sub_domain=${host}"
    Record=$(curl -s -k -X POST https://dnsapi.cn/Record.List -d "${token}")
    iferr=$(echo ${Record#*code} | cut -d'"' -f3)
    if [ "$iferr" == "1" ];then
    record_ip=$(echo ${Record#*value} | cut -d'"' -f3)
    echo "[API IP]:$record_ip"
    if [ "$record_ip" == "$DEVIP" ];then
    echo "IP SAME IN API,SKIP UPDATE."
    exit
    fi
    record_id=$(echo ${Record#*\"records\"\:\[\{\"id\"} | cut -d'"' -f2)
    record_line_id=$(echo ${Record#*line_id} | cut -d'"' -f3)
    echo Start DDNS update...
    ddns=$(curl -s -k -X POST https://dnsapi.cn/Record.Modify -d "${token}&record_type=AAAA&record_id=${record_id}&record_line_id=${record_line_id}&value=${DEVIP}")
    ddns_result="$(echo ${ddns#*message\"} | cut -d'"' -f2)"
    echo -n "DDNS upadte result:$ddns_result "
    echo $ddns | grep -Eo "$IPREX" | tail -n 1
    else echo -n Get $host.$domain error :
    echo $(echo ${Record#*message\"}) | cut -d'"' -f2
    fi
    ```
    vhus
        36
    vhus  
    OP
       2020-05-09 15:33:29 +08:00
    @Atomo 谢谢,脚本有参考意义,我想在 ROUTEROS 路由器上实现它,ddns 用的是 he.net 稍有不同。
    Aoang
        37
    Aoang  
       2020-05-09 16:50:16 +08:00 via Android
    @vhus 不是我说…打印机、电饭煲这种设备是能直接暴露在公网上的吗?这和裸奔有啥区别???

    至于 ddns,我就想知道你是怎么知道设备的 ip 地址的。你都有办法获取到设备的 ip 地址了,我不信脚本完成不了这个功能。
    vhus
        38
    vhus  
    OP
       2020-05-09 17:43:08 +08:00
    童鞋请给些有建设性的回复,
    打印机,电饭煲只是个业务场景的例子……
    如要回答你如何获得 IP 这样盖楼楼就歪了……
    flyfishcn
        39
    flyfishcn  
       2020-05-09 18:06:25 +08:00
    @vhus #38 那些没有提供渠道的场景,怎么获取地址和 ddns 的需求我觉得很可能只是你这样小众人群的需求,而且获取不获取对设备本身功能使用没有什么影响的吧?既然如此,开发者没有留入口给你也是很正常的。
    既然是自己的需求,也就别去怪别人把楼盖歪了。那么可以提供两个思路:
    1 、用有状态分配地址,这样 dhcpv6 服务器就会维护分配给设备的地址,之间去取来传给 ddns api 更新。
    2 、内网用固定的 ULA 地址,网关上做 1 对 1 的 nat,按后缀匹配,前缀从内网网关上取,合成完整的地址传给 ddns api 更新。
    或者 VPN 拨进内网,就干脆用 ula 地址访问。
    tia
        40
    tia  
       2020-05-09 18:06:59 +08:00
    所以静态 ip 才买那么贵啊。ddns 搞个阿里的支持 ipv6 短小好记
    tia
        41
    tia  
       2020-05-09 18:09:51 +08:00
    @Aoang #37 想太多。现在基本找不到能自己获取并且通过外网 p2p 管理的智能家居,就算等到那时候配套的安全措施也有了
    wazon
        42
    wazon  
       2020-05-09 18:42:53 +08:00
    再总结一下,对于无法配置 DDNS 的物联网设备,可以在(旁)路由集中处理。
    理论可行的有以下方案:
    1. 仿照 IPv4 下的现状 做端口转发(利用相对稳定的本地链路地址)
    2. 后缀不变的设备,在路由器拼接动态前缀+固定后缀 做 DDNS
    3. 后缀会变的设备,在 NDP 的结果里照着 MAC 地址找到新的公网 IP 做 DDNS
    qbqbqbqb
        43
    qbqbqbqb  
       2020-05-10 11:49:31 +08:00
    @vhus 大部分家用路由器都自带 IPv6 防火墙默认开启,有的还不提供关闭防火墙的设置(比如 NETGEAR )。但凡是路由器拨号用户基本都不用考虑这个安全问题。
    有问题的反而是光猫自动拨号用户,光猫超级管理员页面有一个防火墙设置,设为高则默认阻断,设为低则默认暴露,这个设置都是运营商自动推送的,而且用户不破解超密也没法修改。
    myzincx
        44
    myzincx  
       2020-05-11 11:01:03 +08:00
    对于只是想个人访问的设备的话,我倾向于是自己搭建一个 vpn,类似于 wireguard 甚至 v2ray,然后在 vpn 服务器上跑 ddns 。
    这样既避免了直接暴露诸如物联网设备暴露在公网(虽然如果获取到了公网 ipv6 就是变相暴露,但是首先 ipv6 现阶段基本没可能暴力扫描出来,其次也可以配置路由器防火墙,只对外开放 vpn 服务器的对应端口),又解决了你此类设备不好跑 ddns 脚本的难题。
    个人使用的就是 v2ray 架设在 n1 上,然后关闭其他所有设备的 ipv6 入网。
    lentrody
        45
    lentrody  
       2020-07-03 10:31:21 +08:00
    @wazon 支持 IPv6 的设备应该都可以通过 SLACC 生成固定后缀地址吧,隐私地址才是可选项。

    固定后缀也不需要在路由器里拼接,运营商一次只会给你分配一个前缀,只需要把一台设备的完整地址发给 DDNS 服务端就行,再把某个设备的固定后缀提供给服务端一次就行。

    我现在就在用 dynv6,在刷了 padavan 的主路由上挂 dynv6 提供的脚本来提供外网 IPv6 地址,然后把内网一台主机的固定地址后缀在添加上去就行了。

    wazon
        46
    wazon  
       2020-07-03 15:55:22 +08:00
    @lentrody
    现代操作系统的隐私扩展一般是默认打开的,固定后缀通常需要额外设置,有的设备不方便改,如果重装也要重新设定

    我给的拼接思路是为了兼容隐私扩展,尽可能减少自动化脚本以外的配置

    你不需要拼接看起来是因为 dynv6 替你完成了拼接,一般 DNS 的每条记录都需要提供完整的 IPv6,拼接只能在本地完成
    wazon
        47
    wazon  
       2020-07-03 16:08:14 +08:00
    @lentrody
    你的方案适用于这样的特定场景:
    1.需要 DDNS 的设备都能保持固定后缀,且在同一个网段下
    2.不一定每个设备都方便配置脚本,但至少有一个可以
    3.选择如 dynv6 这样可以自动修改整个 zone 前缀的特定 DNS 服务
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:50 · PVG 06:50 · LAX 14:50 · JFK 17:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.