可以自己(不在路由器上)内网搭建 DHCPv6 服务么

2021-01-06 09:28:41 +08:00
 yangyaofei

家里有 ipv6/64 的,但是现在的网件路由器不支持 ipv6 的 DHCP DP,只能分配内网 ip,也没法内网穿透(ipv6 貌似就没这个东西)

但是有个远程的机器是 ipv6 的(ipv4 需要走审计算流量),想 frp 一下但是用现在的路由器没法配置了....

能不能和 ipv4 一样自己在内网搭建一个 DHCP 服务器替代现有的路由器上的 DHCPv6,让内网机器有公网 ipv6 啊

5585 次点击
所在节点    宽带症候群
53 条回复
v2tudnew
2021-01-07 13:38:17 +08:00
@sasalemma #20 "如果你指定要 ipv6 去连接的话,就得掐死 v4 的连接。所以就算你 pc 获得了公网 ipv6,也不是都会用 ipv6 去连接服务器的。"
你自己试下访问单 IPv4 网页是否会有慢的感觉吧。就比如 www.baidu.com ,你试试。
sasalemma
2021-01-07 14:19:21 +08:00
@v2tudnew 没看懂回复。没有说单栈访问慢。

你是双栈的 pc,win10 一类默认是 dns 找网址的 a 和 aaaa 记录,如果都返回,连接策略优先用 aaaa 记录连接,如果 dns 网址只有 a 记录返回,当然只会用 ipv4 去连接。

比如:

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: openwrt.org
Address 1: 139.59.209.225
Address 2: 2a03:b0c0:3:d0::1af1:1

又比如

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: www.baidu.com
www.baidu.com canonical name = www.a.shifen.com
Name: www.a.shifen.com
Address 1: 14.215.177.38
Address 2: 14.215.177.39
www.baidu.com canonical name = www.a.shifen.



https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/networking/configure-ipv6-in-windows

注册表的键值不就是这个

服务器是双栈,要都是只能 ipv6 接入,返回 aaaa 和 a 记录,pc 这边也是双栈,是用 ipv4 连,也会用 ipv6 连接,netstat 看下不就知道了。

有的地区 ipv6 的路由很烂,会绕路,优先用 aaaa 去访问网站就会变慢。所以在这样的双栈共存期,必然会存在这样的问题。

当然,有 CDN 的除外。
yangyaofei
2021-01-07 14:47:07 +08:00
@sasalemma 比如 路由器的 ip 是 `2408:8206::1` 这样,他会显示他的内网 ip 是 `2408:8207::2`这种.给 内网机器分类的 ip 也是
`2408:8207::11` 这种. 这时候我用这个机器去 ssh 或者 http aws 的主机的时候,主机显示的访问 ip 是`2048:8207::11` 而不是 `2408:8206::1` . 我想搞明白的是 本机的 tcp 包或者 ip 包是怎么到 aws 主机上的, 要是按照原来的 ip4,应该是 NAT 之后显示的是 `2408:8206::1` 这个地址访问

这里如果 ip 包的地址地方也是 `2408:8207::11` 的话,也就是肯定有办法路由到内网的这个地址上不是么.... 如果不是,那就是有一个标志知道 是地址 `2408:8206::1` 的主机下的 `2408:8207::11` 这台机器,那么我复用这种方式不是可以访问我内网的机器了么, 如果是 tcp 不让从外面发起连接,那 udp 应该是可以的吧,我想办法做 udp 到 tcp 的转换就好了...

所以现在就是这个地方很疑惑,如果 ip6 没有 NAT,那么肯定有办法利用地址从外网发送数据到内网机器的
sasalemma
2021-01-07 15:12:12 +08:00
@yangyaofei 亲,先去了解下 IPV6 的地址分类,至少 2xxx 开头的都是全球唯一地址了,也就是所谓的“公网 IPV6 地址”了,不是 NAT 的地址。

IPV6 地址目前三大运营商的公网是:

电信:240e
联通:2408
移动:2409

路由 PD 下发就是路由器拨号得到一个 2408:8206::/60 或者 2408:8206::/56 一类,让路由自己分配子网,下面的设备比如你的 PC 就是 2408:8207::11 这样,这个就是独立的公网 ip 。


so,真正的 NAT,或者说 NAT6 是这样的:


协议: DHCPv6 客户端
地址: dd08:1111:2222::abcd:1234:efgh:5678/64 《--PC 获取的 ULA 本地链路地址
网关: fe80::1111:2222:3333:4444 《--路由器 WAN 口的本地链路地址
DNS 1: dd08:1111:2222::1 《--路由器 LAN 口的地址

所以实际上你已经是 ipv6 公网地址去访问 AWS 服务器了。至于为什么,上面回复说了,WIN 下默认策略会优先用 ipv6 去连接双栈服务器,所以 AWS 显示你的 PC 的“本地地址”并不奇怪。

所以,你问的问题实际上是不存在。

若要只想用 ipv6 直连双栈服务器,本地屏蔽掉服务器那边的 ipv4 地址,只 host ipv6 的地址解析。
sasalemma
2021-01-07 15:19:10 +08:00
唯一本地地址 unique local addresses ( ULA )才是 IPV6 真正的“私网”地址,一般 DD00::/80 开头

全局单播地址 global unicast addresses ( GUA )就是所谓的公网 IPV6 地址,国内常见的 2409:2408:240e,还有隧道类的 2001:一类。

本地链路地址 link-local addresses 常见就是 fe80:: 开头。

本地链路和唯一本地地址,只能在局域网交流。要出去,ULA 才能 NAT,fe80 就算 NAT 了,对面接受的路由也会把包丢掉。
sasalemma
2021-01-07 15:21:20 +08:00
如果是 2xxx 开头一类地址,路由网关的防火墙 ipv6,或者 ip6tables,设置下转发和开放端口,外网就能直接访问到那个设备。
yangyaofei
2021-01-07 15:40:27 +08:00
@sasalemma 谢谢解答啊,我困惑也是来自于 这里, 这儿有几个问题:

1. 从 AWS 是 ping 不通 2408:8207 这个本地 pc 地址的,本地的服务他也连不上...
2. 我理解的 2048:8206::/64 (我这里分配的是 64), 那么不是在 mask 64 之后开始分配么...为啥会改前面....
3. 我直接用 ipv6 访问的 aws,和本机 pc 的,应该不存在走 ip4 的情况
4. 按照你说的,现在的问题是防火墙阻止外部的 tcp 连接进来是么....那我用 udp 应该没问题吧...
yangyaofei
2021-01-07 15:42:17 +08:00
@sasalemma 还有那个地址分类我是了解的,我一直以为网件路由器瞎分配的...
sasalemma
2021-01-07 16:23:12 +08:00
@yangyaofei

呃。不知道怎么讲。

IPV6 的分配方式有多种,就是前缀,一种是 netive,就是原生,然后 DHCP-PD 才是像你说的,给你内网一个前缀网段,然后你的路由器爱怎么分发是你路由内部的事情。
这个情况就是 WAN 口的 IPV6 地址设置地址段都和 LAN 口的不一样。DHCP-PD 模式的话,就是把前缀网段分给路由的 LAN 口。

另一个是 passthrough,让 WAN 口的 IPV6 的 RA 通过 LAN 去分发到下级,就是 PC 和 WAN 口是同网段的。你可以尝试下手机,比如安卓开个热点,实际上就是 passthrough 。

=====================

另一个是后缀,如果是无状态,设备这边会根据前缀加上 mac 插入 fffe 变成一个完整的 ipv6 地址,如果是有状态,就是短地址。

=====================

但无论如何分配,路由都是一个门啊,就是协议上是 IPV6,链路上还是通过

AWS--》 internet--》光猫---》路由的 WAN 口---》路由的 LAN---PC

这样进来的,所以还是需要配置路由防火墙的( WAN 口准入),默认情况下,开启的 IPV6 防火墙,任何外网,就是通过 WAN 口入的,比如 AWS 对 PC 的访问都会被丢弃的。如果需要从外网访问 PC,需要在路由开启防火墙放行,如果是固定地址,就写固定的地址,如果是变动的前缀,就写 pc 的后缀加掩码,比如 pc 是 2408:1111::1234,开放 3389 端口,防火墙那边就需要开放 ::1234/::ffff 的 3389 端口。在 ip6tables 里看就是从 WAN 口监听访问::1234:3389 的包,转发到::1234:3389

你要知道数据流的方向。路由禁止 WAN 口的 PING 包,LAN 中的公网 ipv6 的 PC 一样 ping 不到的。

反过来连出创建的连接无影响,比如 PC--》路由的 LAN--》路由的 WAN 口---》光猫---》 internet--》 AWS


所以应该理一理思路,你要做什么事情?是像让远程的 AWS HTTP 服务器,而把资源放在 IPV6 公网的本地,用户访问 HTTP 时,AWS 反向代理,IPV6 接入本地,拉取资源?

还是,本地通过 ipv6 去访问 AWS 服务器,而不是通过 IPV4 去访问。
v2tudnew
2021-01-07 17:08:58 +08:00
@sasalemma #22 我是感觉你说双栈 PC 访问 A 解析网站会先走 v6,失败再返回 v4 。
绕路问题解决不是很简单?禁 AAAA 解析,或者 smartdns 这种带测速的就行了,国内绕路导致很慢的我是没发现过,国际绕路不绕路都一个鸟样,梯子才是解决之道。当然愿意凑合也行。

对于不需要的人来说禁掉也许是更好的解决办法,但对于无公网 IPv4 的人来说就看取舍了。
v2tudnew
2021-01-07 17:10:32 +08:00
也不能叫取舍吧,到这里玩的人应该学习能力也有些,换个支持的固件的解决了,禁用 AAAA 解析或者 DNS 测速
sasalemma
2021-01-07 17:36:39 +08:00
@v2tudnew

呃,正常都能理解,单栈服务器那边的解析出来是 A,没有 AAAA,你的 PC 不会用一个不存在的“AAAA”去访问啊。

DNS 就是把网址解析,然后返回 A 和 AAAA (如果有),然后让系统这边选。

然后双栈的 win 就优先连接 AAAA 这个地址了。

有意思的是,比如二级路由中禁用 IPV6,一个双栈的一级路由,二级路由下的设备访问一个双栈的服务器,也就是网关的 DNS 还是会给二级路由返回一个 A 和 AAAA 记录,二级路由的设备只有 IPV4,当然也不会尝试一个“非法”返回地址,格式都不一样。

换个例子,一个只有 AAAA 记录的,比如 IPV6 公网挂 ddns 域名,单 IPV4 访问 DNS 返回 AAAA,系统都会直接认为地址非法,尝试连接都会。

另外说的绕路不一定是出墙,而是国内双栈的一些服务器,双栈的 PC 去访问,IPV6 的路由跳转数和 IPV4 的跳转数不同的,时间也是有差别的。我说的绕路是说这个,可能在 V2 绕路都是说出墙的线路。

traceroute 一下不就知道了。有朋友开 IPV6 会变慢,然后说 IPV6 烂是因为这个。

从一开始我都是说现象,并没有说要怎么解决。因为你看回复下来就知道,实际上楼主想做什么都没有特别明确。

毕竟楼主他一直认为 pc 获得的 ipv6“本地地址”是私网地址。
v2tudnew
2021-01-07 18:06:06 +08:00
@sasalemma #32 .......我又没否认 v6 会绕路,不明白你发这个做什么。
sasalemma
2021-01-07 18:19:48 +08:00
因为不同地区,比如我老家山卡拉,ipv6 访问双栈的 aaaa 就很慢,但广州就很快,每个区域的墙内路由就是不一样。

但发这个确实没有意义。

我只是不明白你第一条回复单 ipv4 访问不慢,还有楼主原话题中想单独走 ipv6 接入他想接入的服务器,所以我才那样回复。

有什么问题问楼主去。我都不想打字了。
yangyaofei
2021-01-07 22:18:28 +08:00
@sasalemma 是这样的,我有另一个 ip6 的主机,和现在的内网 pc 是一样的,可以通过 ipv6 连到外面,但是直接 ssh 是没反应的(ipv4 根本不通的),我原来要想连那台机器,是用 aws 是机器做跳板,用 frp 做反代,然后就可以从外面用 ip4 连接反代的 aws 去连接内网的只有 ip6 的机器了.

但是现在家里的网有了这个 ip6 之后,就想把原来的 aws 扯掉,毕竟一个月也好几十还是很心疼,而且用的不多速度还慢.

但是现在家里的 pc 是没法作为 server 的,开了端口,另外那台只有 ip6 的机器也连不过来,所以才想到现在这个问题的.
yangyaofei
2021-01-07 22:58:45 +08:00
@sasalemma 刚刚我做了一个这样的实验,用 netcat

本机: nc6 -u 2406:aws 的 ipv6 地址 8888
aws: nc -6 -lu 8888 -v

这样肯定是可以通的,但是反过来就不通了

我理解 udp 包是无连接的,从哪个方向开始发都是一样的,所以如果是可以路由过来,那应该反过来是通的

但是反过来不通

如果这个是路由器的防火墙设置,他是怎么知道的呢...
cwbsw
2021-01-08 00:11:17 +08:00
@yangyaofei 这是防火墙最基本的配置啊,Linux 就是 conntrack,会跟踪每一个连接的状态,UDP 也是按照类似方法处理,看到 A 往 B 发了包,再看到 B 给 A 的回复,即视为建立连接。这也导致从网络协议的角度看,Linux 防火墙对 UDP 只能实现 Symmetric NAT 。
sasalemma
2021-01-08 00:13:45 +08:00
@yangyaofei

你把问题搞复杂了。

哪怕两个都是内网 ipv4+公网 ipv6,都能直接联通的,不通就是墙的配置问题。

FRP 打洞一类,数据本来就是中转,所以就慢咯。

整理一下:

1.PC-A 是家里的 PC,2408 公网,PC-B 是公司的,带 IPV6 (无论是公网 IPV6 还是 NAT6 )
2.PC-B 能连出访问 ipv6 的网站,但不能连入。

这样的情况,用 aws+frp,aws 要是双栈,frps 放在 aws 上,两边都作为 frpc 不就是了。frps 监听[::]这个,一端的是 ipv4 也行的。PC-A 这段按照 IPV4 的配置就行,PC-B 那段连接 FRPS 用 AWS 的 IPV6 地址,这样也能通的。要是 AWS 是单 IPV6,PC-A 和 PC-B 都是 frpc 按照 ipv4 照搬就是。

要省掉 aws,就得从路由器动手。如果是官方固件,大概我会说,放弃吧,开个 ssh 都困难。
PC-B 只能连出,PC-A 就要当 server,当 server 解决 2 个问题,要访问到,就是开墙,第二个问题一般前缀是变动的,需要 ddns 。ddns 简单,哪怕是 pc 开个虚拟机或者 win 的计划任务跑脚本都行,毕竟当 server 都是要开机的。

倒是研究下 R8000 原版固件怎么 ssh 能开 iptables 。我放老家的 R7000 很久都没有登录过,都忘了界面是怎样了。现在用 asus 的多些还有 openwrt 。R8000 作为路由拨号,网关就是它,不解决这个,有公网 ipv6 实际上等于私网。

开启 ipv6 墙就是==ipv4 端口转发。呃,翻了下 google,一大票人也在网件的官网论坛求 ssh 和 iptables 的问题。店大欺客的样子。
cwbsw
2021-01-08 00:16:02 +08:00
一些电信级的路由器,行为可以配置成收到从 192.168.1.100:1234 发往外网的 UDP 包后,直接映射到公网地址的 1.2.3.4:2234,在超时时间内收到所有发往 1.2.3.4:2234 的包直接转发给 192.168.1.100:1234,这就是所谓的 Fullcone NAT 。
datou
2021-01-08 00:31:48 +08:00
建议楼主先将电脑直连 onu 拨号看看 ipv6 通不通

有些运营商分配的 ipv6 可能正在测试,并没有通网

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX