为你的 IPv6 局域网配置 ULA 吧

2018-09-11 11:00:41 +08:00
 raysonx

近几个月来,三大运营商开始陆续在部分地区提供 IPv6 互联网的接入服务。在号称“每一粒砂子都可以获得一个地址”的 IPv6 时代,所有的设备都可以拥有公网地址,NAT 不再是刚需。那是不是我们不再需要内网地址了呢? 本文将探讨一下这个话题。

IPv4 下的私有网络

曾经的 IPv4 网络也是点对点对等互联的:几乎所有互联网上的设备都拥有公网 IPv4 地址,甚至早期的 FTP 协议都只支持两个点对点连接的设备互传文件:客户端发起连接到服务器传输指令;下载文件时需要监听端口,等待服务器端发起连接。

同时,IPv4 提供了三个私有网络(private network)地址段: 10.0.0.0/8172.16.0.0/12192.168.0.0/16,无需注册申请即可在私有网络中自由使用。 在 NAT 技术出现以前,这样的地址段通常只提供内网通信,不提供互联网访问服务。需要访问互联网时,往往需要依靠同时接入内外网的代理服务器。

后来 IPv4 地址不够用了,IPv6 就被提出出来了,同时顺便解决一下 IPv4 网络的缺陷。然而 IPv6 与 IPv4 完全不兼容,普及十分缓慢。为了缓解地址不够用的问题,NAT44 被大量运用,普通用户的公网 IPv4 地址被收回并高价卖给企业用户,越来越多的用户被安排进内网。再到后来,某些 ISP 甚至明目张胆把 不提供公网 IPv4 地址 写进合同了。

内网地址下的终端设备在互联网上丧失了点对点互联的能力,只能主动向拥有公网 IP 的设备发起连接,无法被动接受连接,P2P 使用受限,就像你拥有一部只能打出而不能呼入的电话。部分内网用户为了使自己的设备能够被远程连接,研究各种打洞、穿透与隧道技术,好不热闹。

IPv6 下的私有网络与 ULA

IPv6 拥有 128 位长的地址,号称“可以为每一粒砂子分配一个地址”,一劳永逸地解决了地址短缺问题。每个设备都可以拥有公网 IPv6 地址,点对点连接又回来了。其实想一想,我们只是重新获得了近十年里失去的东西罢了。

IPv6 时代,ISP 依然会为普通用户提供“动态” IPv6 地址:每次接入网络时,ISP 会重新分配一个 IPv6 地址前缀,这就使得用户侧所有终端的地址发生变化。如果你的终端设备之间有内部互联,这可能会造成服务中断。我们不希望自己运行的网络受制于 ISP !

解决方法自然是:给你的局域网分配一个 IPv6 的内网地址段吧。 当然我不是让你重新使用 NAT。当然 IPv6 依然支持 NAT,如果你愿意,可以为你的终端分配内网 IPv6 地址,然后在网关处部署 NAT66,你就又重新再次回到了 NAT 时代。不过通常而言,NAT66 是没有必要的,而且使用 NAT 技术还会造成非常明显的性能损失。

在 IPv6 网络下,可以为每一个网络接口分配多个 IPv6 地址。你可以为你局域网的设备同时分配公网和内网地址,使你的设备同时接入内外两张网。

IPv6 提供一段称为 Unique Local Address ( ULA )的地址段fc00::/7,包含fc00::/8fd00::/8两部分:目前fc00::/8的使用还没有定义,我们不去管它;fd00::/8可以被自由使用。fd00::/8是一个十分巨大的地址段,你可以从中挑选一个/48的子段分配给你的局域网。RFC 4193建议使用随机生成的方法,使每个局域网的地址段都不同(这也是 ULA 名字的由来),从而避免局域网合并时地址冲突的麻烦。当然这主要是针对企业而讲的,家庭使用的话随机生成还是挑个好记的自己斟酌。如果要随机生成,Google 一下ULA generator有真相。

有了 ULA,你的设备在内部互访时可以直接使用固定的 ULA,和外部互访时则使用公网地址。只要保证你的路由表正确就可以:默认路由使用公网地址作为出口,ULA 地址段使用 ULA 作为出口。如果出现问题,检查一下你的 Router Advertisement 和 DHCPv6 服务的设置吧。

23161 次点击
所在节点    宽带症候群
37 条回复
Liqianyu
2018-09-11 11:16:48 +08:00
FC00:0000:0000:0000:0000:0000:0000:0000

FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
都是可以使用的 ULA(unique local address)
raysonx
2018-09-11 11:59:21 +08:00
@Liqianyu 目前来讲只建议使用 fd 打头的范围,fc 打头的分配策略还没有定义。
Liqianyu
2018-09-11 12:11:31 +08:00
@raysonx
是的,建议使用 FD 前缀。
生成可以用
https://www.ultratools.com/tools/rangeGeneratorResult
另外北京联通我已经拿到 IPv6 一个月了。
raysonx
2018-09-11 12:13:43 +08:00
@Liqianyu 我这边依然还是单栈公网 IP,归属朝阳区五路居电话局。
Liqianyu
2018-09-11 12:14:42 +08:00
https://cd34.com/rfc4193/
这个是按照 RFC4193 生成的。
Archeb
2018-09-11 12:30:54 +08:00
作为懒人我选择直接用 10.0.0.0/8 _(:з)∠)_
wm5d8b
2018-09-11 12:41:50 +08:00
@Archeb #6 你和我们讨论的是同一个东西嘛
你应该这样说“作为懒人我选择直接用 fc00::/64 _(:з)∠)_”
Archeb
2018-09-11 13:00:52 +08:00
@wm5d8b emmm 也可以(
akumax
2018-09-11 13:24:06 +08:00
趴在桌上想了想,什么时候治好懒癌就上 IPv6 _(:з)∠)_
helllkz
2018-09-11 13:24:39 +08:00
恰好相反,我刚把 ULA 给删除了,只保留了电信分配的 PD,家庭内网使用我还是用的 V4
cwbsw
2018-09-11 13:26:00 +08:00
只有 ULA 地址的话 windows 网络属性会显示无 Internet 连接,而且时间长了之后会 ping 不通网关。建议用公网地址来做 NAT。
xenme
2018-09-11 13:45:33 +08:00
@Archeb
@wm5d8b

suffix 基本都靠自动生成,太不爽了。能 fd00::1 就爽了,比 ipv4 还短
raysonx
2018-09-11 13:48:38 +08:00
@akumax
@helllkz
就目前来看内网 IPv4 也是够用的。这是讨论的是纯 IPv6 内网的方案。
@cwbsw 我个人已经使用 IPv6 内网多年,各种系统的设备都有,并没有遇到你所说的问题。
BOYPT
2018-09-11 13:49:06 +08:00
v6 的好处是链路地址,即使没有路由器也能通信;之前一次停电,路由器是 exsi 内的虚拟机,没能自动启动;
想起收藏夹里面藏了 exsi 主机的链路地址[fe80:xxxxx],点开,果然能进去开机;( b 格高点应该是看一下网卡的 mac 地址心算出链路地址)

这种情况下 ULA 也用不上
raysonx
2018-09-11 13:50:17 +08:00
@xenme 当然可以用 fd00::1。不喜欢自动生成 suffix 那就用 DHCPv6 啊,不过 Android 至今不支持 DHCPv6,估计以后也不会支持了。
xenme
2018-09-11 13:51:36 +08:00
@xenme 补充,哈哈,我都是 fd00::1, fd::2 依次类推。
xenme
2018-09-11 13:52:25 +08:00
@raysonx 上面写错。
raysonx
2018-09-11 13:58:40 +08:00
@BOYPT 这种情况只是相当于每个设备多配了一个静态地址没有受 DHCP 宕机影响,同一链路下通信本来就不需要路由器。
多网卡的情况下使用`fe80`地址需要加网卡后缀,比如`fe80::abcd%eth1`。很多软件不支持这种格式,正则都过不了 :(
tyfulcrum
2018-09-11 14:17:51 +08:00
Ant01
2018-09-11 20:40:21 +08:00
@Liqianyu 为什么我天天看我的都还没有

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

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

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

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

© 2021 V2EX