FreeBSD手册第7.3.3~7.3.7讲解了如何配置IPv6。
目录:
7.3.3 IPv6
IPv6优势:
- 128位地址空间
- 减小路由器负担
路由器只在其路由表中存储网络聚合地址,从而将路由表的平均空间减少到8192个条目。
这解决了与IPv4相关的可扩展性问题,IPv4需要在互联网路由器之间交换每个分配的IPv4地址块,导致它们的路由表变得太大,无法进行有效的路由。
- 地址自动配置(RFC2462)
- 强制多播地址
- 内置IPsec(IP安全)
- 简化的标头结构
- 支持移动IP
- IPv6到IPv4的转换机制
IPv6有三种不同类型:
- Unicast(单播)
发送到单播地址的数据包直接到达属于该地址的接口。
- Anycast
于单播类似,但它的寻址范围是一组接口。指定给Anycast地址的数据包将到达最近的路由器接口。
Anycast地址仅由路由器使用。
- Multicast(多播)
这些地址标识一组接口。以多播地址为目的地的数据包将到达属于该多播组的所有接口。
类似于IPv4的 xxx.xxx.xxx.255。
IPv6的规范形式表示为:x:x:x:x:x:x:x:x。
共8段,每个x表示一个16bit,以十六进制值表示,例如:
FEBC:A574:382B:23C1:AA49:4592:4EFE:9982
通常地址内会包含全都是0的一段子串。双冒号(::)可用来取代这些子串。
此外,每个十六进制值最多可以省略三个前导0。
例如,fe80::1对应的规范形式为:fe80:0000:0000:0000:0000:0000:0000:0001。
第三种形式是使用众所周知的IPv4表示法写入最后32位。
例如:2002::10.0.0.1对应于十六进制规范表示2002:0000:0000:0000:000:0000:0a00:0001,这反过来又等效于2002::a00:1。
在FreeBSD系统中可以使用ifconfig命令查看IPv6地址:
em0: flags=8863 metric 0 mtu 1500
options=481249b
ether 00:1f:16:0f:27:5a
inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255
inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1
media: Ethernet autoselect (1000baseT )
status: active
nd6 options=23
此例中,网络接口em0使用fe80::21f:16ff:fe0f:275a%em0,根据MAC地址自动生成的自动配置的链路本地地址。
某些IPv6地址已保留。可以在下表中查看保留地址列表:
IPv6地址 |
前缀长度(位) |
描述 |
备注 |
:: |
128位 |
未说明 |
相当于IPv4的0.0.0.0 |
::1 |
128位 |
环回地址 |
相当于IPv4的127.0.0. |
::00:xx:xx:xx:xx |
96位 |
嵌入式IPv4 |
较低的32位是兼容的IPv4地址 |
::ff:xx:xx:xx:xx |
96位 |
IPv4映射的IPv6地址 |
低32位是不支持IPv6的主机的IPv4地址 |
fe80::/10 |
10位 |
link-local(本地链接) |
相当于IPv4的169.254.0.0/16
对于DHCP客户端,意味着未能获取到正确的IP地址。 |
fc00::/7 |
7位 |
unique-local(独特本地) |
唯一的本地地址用于本地通信,并且只能在一组协作站点内路由 |
ff00:: |
8位 |
多播 |
|
2000::-3fff:: |
3位 |
全局单播 |
所有全局单播地址都是从该池分配的。前3位为001 |
详情参阅RFC3513
7.3.4 配置静态IPv6地址
要将FreeBSD系统配置为具有静态IPv6地址的IPv6客户端,需要设置IPv6地址。
执行以下命令以满足要求:
# sysrc ifconfig_em0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"
要分配默认路由器,请执行以下命令指定其地址:
# sysrc ipv6_defaultrouter="2001:db8:4672:6565::1"
7.3.5 配置动态IPv6地址
如果网络中有一个DHCP服务器,则很容易将网络接口配置为使用DHCP:
# sysrc ifconfig_em0_ipv6="inet6 accept_rtadv"
# sysrc rtsold_enable="YES" 实际上,如果在安装FreeBSD过程中配置IPv6,rc.conf文件中无此句
7.3.6 路由器播发和主机自动配置
本节演示如何在IPv6路由器上设置rtadvd(8)以通告IPv6网络前缀和默认路由。
使用以下命令启用rtadvd(8):
# sysrc rtadvd_enable="YES"
指定在其上执行IPv6路由器播发的接口是很重要的。例如:
# sysrc rtadvd_interfaces="em0"
接下来创建配置文件/etc/rtadvd.conf,类似如下示例:
em0:\
:addrs#1:addr="2001:db8:1f11:246::":prefixlen#64:tc=ether:
7.3.7 IPv6和IPv4地址映射
在服务器上启用IPv6时,可能需要启用IPv4映射的IPv6地址通信。
此兼容性选项允许将IPv4地址表示为IPv6地址。允许IPv6应用程序与IPv4通信,反之亦然可能是一个安全问题。
在大多数情况下,此选项可能不是必需的,并且仅用于兼容性。
此选项将允许仅IPv6的应用程序在双堆栈环境中使用IPv4。这对于可能不支持仅IPv6环境的第三方应用程序最有用。
执行以下命令启用该功能:
# sysrc ipv6_ipv4mapping="YES"