开个新坑:写给 Geek 们的小范围 IPv6 组网最佳实践

2023-07-08 12:41:40 +08:00
 raysonx

自 2017 年底,国内大多数地区的固定宽带和移动网络就开始提供 IPv6 接入了,平时逛宽带症候群区时也经常看到关于 IPv6 的种种问题。可能因为最近几年越来来多的用户失去了公网 IPv4 地址,肉眼可见 IPv6 有了更多的讨论度。

本人自从十几年前就开始玩 IPv6 了,也在 V2EX 发过几篇关于 IPv6 的文章。之前曾打算专门抽出时间写一系列文章,旨在帮助各位 V 站 的 Geek 们在家庭等小范围进行 IPv6 组网,并为常见的问题提供解决方案,但是这个计划一再搁置,最终也没有去做。今天看到有人在我之前的帖子回复希望我能写点教程,这才又想起这件事。

之前发过的帖主要有:

根据我逛 V 站和其他地方得来的经验,我暂时想到了下面这些主题(想到的很多,不一定会写哪几个),不知各位有没有要补充的或者对某一方面特别感兴趣的?如果某一方面有很多人感兴趣,那我就多写一点或者提早写那一篇。目前想到的主题有:

6419 次点击
所在节点    宽带症候群
40 条回复
xuangoer666
2023-07-08 12:47:18 +08:00
求:各种隧道技术的应用,比如用 VPN 接通两地的内网、远程访问内网(内网穿透)等
tediorelee
2023-07-08 12:53:20 +08:00
是大佬,mark 一下
ylsf
2023-07-08 14:07:39 +08:00
期待大佬更新
cpaig
2023-07-08 14:23:10 +08:00
都不太懂,等大佬都讲讲
silverwolf
2023-07-08 14:32:25 +08:00
IPv6 下开 AdGuard Home 服务器,如何像 IPv4 一样区分设备?目前的路由器支持 SLAAC 方式自动获取动态分配的 IPv6 公网地址,而 AdGuard Home 安装在一台 N1 盒子里。

就 IPv4 网络而言,这很简单,在路由器上个每个设备设置 MAC 和 IPv4 绑定,LAN 口的 DNS 设置成 N1 盒子的 IP 即可。
IPv6 打开以后,可以在 LAN 侧填写设置 IPv6 DNS 服务器地址,但这就要求填写一个固定地址。如果路由器可以配置 IPv6 ULA 地址还好说,但硬路由不支持。
titanium98118
2023-07-08 15:37:59 +08:00
我现在就是为局域网分配 ULA+NAT66 。双 wan 负载均衡貌似只能 NAT?
Yien
2023-07-08 15:50:35 +08:00
感谢大佬分享
pk000
2023-07-08 15:58:07 +08:00
可以通过 ULA 固定每个多个家之间设备地址,跨地域 IPv6 组网方式有简单的方案吗?
raysonx
2023-07-08 16:22:43 +08:00
@silverwolf 请问区分设备的目的是什么?仅仅是为了在动态 IPv6 前缀的前提下给 N1 分配一个静态的 IPv6 地址来提供 DNS 服务吗?

除了使用 ULA 之外,还可以使用 fe80 开头的 link-local 地址,对于绝大多数操作系统,这个地址通常是固定的。

另外你还可以用第三个设备来跑 SLAAC 宣告一个 ULA 前缀,这个设备不必是你的路由器,这样所有设备都能拿到 ULA 地址,只需要记得不要宣告默认路由即可,比如用 radvd 的话,可以用下面的设置( AdvDefaultLifetime 0 可以关闭默认路由宣告):

interface eth0
{
AdvSendAdvert on;
prefix fd12:3456:7890:abcd::/64
{
AdvDefaultLifetime 0;
};
};
raysonx
2023-07-08 16:24:26 +08:00
@xuangoer666
@pk000
跨地域组网肯定没有惟一方案,目前我是用 WireGuard + 动态路由协议。这个话题可以专门开一帖讨论。
microka
2023-07-08 16:24:50 +08:00
向请问一下,普通家用路由器(比如华为 B610-4E )在开启 IPv6 拨号的使用环境下,能做(应该做)哪些安全设置?一个是路由器端,一个是局域网设备端(以 Windows 为例),谢谢。
raysonx
2023-07-08 16:26:48 +08:00
@titanium98118 如果在路由器上做均衡只能 NAT ,因为个人用户没有自己的 PI ( provider-independent )地址,比如你没法向电信宣告联通的路由。如果把在客户端做均衡,可以直接把多个公网地址分配到客户端。这个确实是一个值得讨论的话题。
silverwolf
2023-07-08 16:40:04 +08:00
@raysonx 在 AdGuard Home 上根据 IP 地址区分设备,便于看到该设备请求了哪些域名。

感谢科普,我打算按你给的方法在 N1 盒子上跑一个 SLAAC 宣告,给局域网的所有设备下发 IPv6 ULA 地址,并给 DNS 服务器一个固定的 ULA 地址。
Jirajine
2023-07-08 16:57:06 +08:00
一直想通过 nat64/dns64 部署纯 ipv6 内网,但主要有两大障碍:
一是地址管理问题,因为 Android 的原因,ipv6 地址没法用纯有状态管理,slaac+隐私扩展让地址完全无法管理,没法根据设备的地址单独配置防火墙等。
二是动态前缀问题。动态前缀让内网无法使用稳定地址,要稳定地址必须 nat ,但 nat 在 ipv6 里是 anti pattern ,坑也不少。很少有应用能支持在无状态前缀 nat 的情况下正确的地址发现。
raysonx
2023-07-08 17:16:49 +08:00
@Jirajine 纯 IPv6 内网可是个大坑,大量应用软件甚至不能支持在 NAT64 环境下工作(只有 iOS 是个例外,多亏了苹果的审核机制)。

> 一是地址管理问题,因为 Android 的原因,ipv6 地址没法用纯有状态管理,slaac+隐私扩展让地址完全无法管理,没法根据设备的地址单独配置防火墙等。

你有专门为 Android 设备配置防火墙的需求吗?目前我自己的网络环境下,不提供服务的终端设备都是在同一个 VLAN 下,这个 VLAN 默认不允许从外网发起连接的。如果要提供服务,我看还是放弃 Android 为好。

> 二是动态前缀问题。动态前缀让内网无法使用稳定地址,要稳定地址必须 nat ,但 nat 在 ipv6 里是 anti pattern ,坑也不少。很少有应用能支持在无状态前缀 nat 的情况下正确的地址发现。
国内 ISP 给家宽分配的 PD 前缀确实是动态的。其实按照规范,如果设备的 DUID 不变,在租期内 ISP 应当分配静态的 PD 前缀,只是 ISP 不遵守而已。
内网设备之间的通信还是用 ULA 吧。如果需要开放公网服务,只能建议用 DDNS 。
veSir
2023-07-08 17:32:55 +08:00
感谢分享!

openwrt 23.05 fw4 需要设置 PMTU 命令吗?
niubee1
2023-07-08 17:39:13 +08:00
@raysonx 确实如你所说,之前打算自己写个 P2P 穿透的程序的时候,被坑了
0o0O0o0O0o
2023-07-08 17:45:10 +08:00
对第 4 5 9 3 1 2 7 8 条都感兴趣,排名分先后
lih24338
2023-07-08 17:51:34 +08:00
所有的都感兴趣,期待更新。
zooo
2023-07-08 17:53:36 +08:00
正需要,期待更新呀

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

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

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

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

© 2021 V2EX