因为网站下线,故把技术文档备份一下以便查看
IPv6 介绍
什么是 IPv6
IPv6 指互联网协议(IP)第 6 版。目前大家上网主要使用互联网协议第四版,即 IPv4。
在全球互联网高度发展的今天,IPv4 地址资源已经枯竭,互联网正在经历从 IPv4 网络向 IPv6 网络的过渡。
IPv4 地址是类似 A.B.C.D
的格式,共 32 位,用 .
分成四段,用 10 进制表示;
而 IPv6 地址类似X:X:X:X:X:X:X:X
的格式,它是 128 位的,用:
分成 8 段,用 16 进制表示。
RFC2373 中详细定义了 IPv6 地址,按照定义,一个完整的 IPv6 地址的表示法:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
。
IPv4 地址和 IPv6 地址的区别
IPv4地址 |
IPv6地址 |
组播地址(224.0.0.0/4) |
IPv6组播地址(FF00::/8) |
广播地址 |
无,只有任播( anycast)地址 |
未指定地址为 0.0.0 .0 |
未指定地址为 :: |
回路地址为 127.0.0.1 |
回路地址为 ::1 |
公用 IP地址 |
可汇聚全球单播地址 |
私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16) |
本地站点地址( FEC0::/48) |
Microsoft自动专用IP寻址自动配置的地址(169.254.0.0/16) |
本地链路地址( FE80::/64) |
表达方式:点分间隔十进制 |
表达方式:冒号间隔十六进制式 |
子网掩码表示:以点阵十进制表示法或前缀长度表示法(CIDR) |
子网掩码表示:仅使用前缀长度表示法(CIDR) |
清华哪些区域有IPv6网络服务?
清华大学校园网主干网、学生宿舍网、教师宿舍网已经全部支持 IPv6,各院系自建的局域网也基本都支持 IPv6。如所在局域网不支持 IPv6,也可以通过清华大学的 ISATAP 隧道服务访问 IPv6 资源。
如何使用IPv6?
Windows (7+)、Linux (2.6+)、FreeBSD (9+)和 Mac OS X (10.7+)等主流 PC 操作系统,以及 iOS (4.1+)、Android (5+)等移动设备操作系统都自带安装了 IPv6 协议栈,而且默认都会自动获取 IPv6 地址,不需要任何设置。
为什么访问IPv6还会产生IPv4流量?
我们访问的 IPv6 网站往往都是 IPv4 和 IPv6 双栈运行的。大多数用户使用 IPv6 的时候跑 IPv4 流量都是用μTorrent 下载 IPv6 分享站点的资源,然后在设置的时候没有通过启用 IPfilter 规则来屏蔽 IPv4 流量,并且没有断开 IPv4 的认证。因此,如果想访问纯 IPv6 资源,希望避免 IPv4 的流量,可以直接断开 IPv4 的认证或者索性禁用 IPv4 的协议,如果是用μTorrent 下载东西,建议启用μTorrent 的 IPfilter 规则屏蔽 IPv4 流量,主流的 BT 站点都有相关教程。
有哪些常用的IPv6资源?
- 清华大学 TUNA 镜像站: https://mirrors.tuna.tsinghua.edu.cn/
- CNGI 高校驻地网: http://www.6rank.edu.cn
- 北京邮电大学(北邮人 BT): http://bt.byr.cn
- 北京交通大学(晨光 BT): http://ipv6.cgbt.cn
- 东北大学(六维空间): http://bt.neu6.edu.cn
- 上海大学(乐乎论坛): http://bt.shu6.edu.cn/index.php
- IPv6 测试站: http://test-ipv6.com
如何确认本机获取方式为自动获得IP地址?
控制面板→网络和 Internet→打开“网络和共享中心”→更改适配器设置→双击“本地连接”→属性→单击“Internet 协议版本 6(TCP/IPv6)”→确认 IP 地址和 DNS 服务器地址都是自动获取→确定→关闭→关闭。
如何查看本机IPv6地址获取情况?
直接在开始菜单里所有程序中选择命令提示符 cmd.exe 或者在下方搜索框里输入 cmd,然后回车,进入命令提示符窗口。
输入ipconfig /all
命令,可以查看本机是否获取到正确的 IPv6 地址(2402:f000
开头),由于我校 IPv6 的 DNS 服务器搭建在双栈链路之上,无需专门指定 IPv6 的 DNS 服务器参数,沿用 IPv4 的 DNS 服务器设置即可,通常为自动获取。
如何报告IPv6问题?
请联系校园网用户服务部门,并提供如下信息,以便于定位问题。
- 上网位置、上网帐号、联系方式,本机 IPv6 地址,命令提示符下分别输入
ipconfig /all
的结果,输入arp -a
的结果。 - 故障时间,故障现象,系统版本,网卡型号。周围同环境下其他人能否使用 ipv6,把个人电脑换到其他端口上,重新获取 ipv6 地址后,现象是否重现。
-
ping -n 30 ipv6.tsinghua.edu.cn
、tracert www.edu.cn
或其他 IPv6 网站的结果。
ISATAP 隧道设置
什么是ISATAP隧道?
ISATAP 全名是 Intra-Site Automatic Tunnel Addressing Protocol,是一种 IPv6 隧道技术,使用户可以在 IPv4 网络上访问 IPv6 资源。具体技术原理参见(draft-ietf-ngtrans-ISATAP-23.txt)。
清华大学ISATAP隧道信息
- 清华大学 ISATAP 隧道路由器的 IPv4 地址是:
isatap.tsinghua.edu.cn
- 用户设置 ISATAP 隧道的接入点为:
isatap.tsinghua.edu.cn
- 清华大学 ISATAP 隧道 IPv6 地址前缀为:
2402:f000:1:1501::/64
清华大学ISATAP隧道配置方法
Windows 环境(Windows 7及以上系统适用)
以管理员身份运行 cmd 命令,进入命令行模式,输入如下命令
netsh int ipv6 isatap set router isatap.tsinghua.edu.cn
netsh int ipv6 isatap set state enable
以上两条命令分别为设定 ISATAP 路由器和启用 ISATAP 隧道。
此后,通过 ipconfig
应该可以看到一个 2402:f000:1:1501:
为前缀的 v6 地址,hostid 为200:5efe:x.x.x.x
, 其中x.x.x.x
为您的真实的 IPv4 地址,即可访问 IPv6 资源。
以下操作为非必须。如果按照上述提示操作以后仍无法正常访问 IPv6 站点,可以尝试:
- 右键点击桌面“计算机”图标,选择“管理”,展开“服务和应用程序”,选择“服务”,确认“IP Helper”服务已开启;
- 确认 Teredo 隧道已经关闭(管理员模式在命令行运行
netsh int teredo set state disable
); - 确认原生 IPv6 已经关闭(
Internet 协议版本 6 (TCP/IPv6)
前的对勾取消,位置在控制面板
→网络和Internet
→网络和共享中心
→更改适配器设置
→双击本地连接
→属性
); - 尝试重启系统。
Linux 环境
Linux 内核版本在 2.2.0 以后通常支持 IPv6,请查看是否存在 /proc/net/if_inet6
文件,以确定您的系统是否支持 IPv6,如果该文件不存在,可尝试如下命令加载 IPv6 模块:
sudo modprobe ipv6
成功加载后就可以配置 IPv6 了:
编辑 /usr/local/bin/thu6tunnel.sh
,并加入以下内容
#!/bin/bash
REMOTE_IP6="2402:f000:1:1501:200:5efe"
REMOTE_IP4="166.111.21.1"
IFACE4=`ip route show|grep default|sed -e 's/^default.*dev \([^ ]\+\).*$/\1/'`
IP4=`ip addr show dev $IFACE4 | grep -m 1 'inet\ ' | sed -e 's/^.*inet \([^ \\]\+\)\/.*$/\1/'`
sudo ip tunnel del sit1 # 删除已经创建的设备,若没有则忽略
sudo ip tunnel add sit1 mode sit remote $REMOTE_IP4 local $IP4
sudo ip link set dev sit1 up
sudo ip -6 addr add $REMOTE_IP6:$IP4/64 dev sit1
sudo ip -6 route add default via $REMOTE_IP6:$REMOTE_IP4 dev sit1
更改权限
sudo chmod +x /usr/local/bin/thu6tunnel.sh
之后执行 thu6tunnel.sh
即可。
也可以单独执行以下命令:
REMOTE_IP6="2402:f000:1:1501:200:5efe"
REMOTE_IP4="166.111.21.1"
IP4="你的IPv4地址" # 前三行不能有空格
sudo ip tunnel del sit1 # 删除已经创建的设备,若没有则忽略
sudo ip tunnel add sit1 mode sit remote $REMOTE_IP4 local $IP4
sudo ip link set dev sit1 up
sudo ip -6 addr add $REMOTE_IP6:$IP4/64 dev sit1
sudo ip -6 route add default via $REMOTE_IP6:$REMOTE_IP4 dev sit1
关闭 IPv6
sudo ip link set sit1 down
sudo ip tunnel del sit1
Mac OS X环境
编写脚本 /usr/local/bin/thu6tunnel.sh
,加入以下内容
#!/bin/sh
#清除IPV6路由表
route delete -inet6 default
ifconfig gif0 destroy
EN0_IP=`ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'`
EN1_IP=`ifconfig en1 | grep inet | grep -v inet6 | awk '{print $2}'`
if [ -n “$EN0_IP” ]; then
LOCAL_IP=$EN0_IP
else
LOCAL_IP=$EN1_IP
fi
if [ -n "$LOCAL_IP" ]; then
ifconfig gif0 create
ifconfig gif0 tunnel $LOCAL_IP 166.111.21.1
ipconfig set gif0 MANUAL-V6 2402:f000:1:1501:200:5efe:$LOCAL_IP 64
route add -inet6 ::/0 -interface gif0
fi
设置权限
sudo chmod +x /usr/local/bin/thu6tunnel.sh
用 root 权限运行脚本
sudo /usr/local/bin/thu6tunnel.sh
或者,打开终端,单独输入以下命令:
IP4="我的IPv4地址" # 这里不能有空格
sudo ifconfig gif0 create
sudo ifconfig gif0 tunnel $IP4 166.111.21.1
sudo ipconfig set gif0 MANUAL-V6 2402:f000:1:1501:200:5efe:$IP4 64
sudo route add -inet6 ::/0 -interface gif0
这样 ISATAP 就配置好了!
关闭 IPv6
sudo ifconfig gif0 destroy
注意,OS X 中 safari 对于 ISATAP 的 IPv6 接入不友好,仍然会打开 IPv4 地址。 请通过
ping6 ipv6.tsinghua.edu.cn
验证接入。
OpenWRT 路由器作为 IPv6 网关的配置
OpenWRT 是一种嵌入式 Linux 操作系统,广泛应用于家用路由器/网关。本文将介绍几种在清华校园网中,使用 OpenWRT 路由器为接入设备提供 IPv6 服务的配置方法。
本文内容综合有多位贡献者,如有疑问、建议,可以参与内容讨论。
IPv6 NAT
虽然 IETF 的设计中,IPv6 不再有 NAT (网络地址转换), 但 Linux 内核从 3.7 版本开始实现了 IPv6 的 NAT。早年也曾有过 NAT66 等非官方项目,但缺乏维护,目前已经不再推荐使用。 OpenWRT IPv6 NAT 配置部分,由 @Blaok 贡献。
零: 检查内核模块和有用的软件包
ip6tables kmod-ipv6 kmod-ipt-nat6 kmod-ip6tables kmod-ip6tables-extra luci-proto-ipv6 iputils-traceroute6
kmod
开头的内核模块一般无法通过 opkg 直接安装,其他软件包虽然可以通过opkg install
直接安装,但会多占路由器存储空间,推荐在编译固件时就将这些软件包都放入固件
上述软件包除kmod-ipv6
外并非必须。kmod-ipt-nat6
提供 IPv6 NAT 支持,ip6tables kmod-ip6tables kmod-ip6tables-extra
等提供 IPv6 防火墙,luci-proto-ipv6
为 LuCI 提供 IPv6 设置选项,iputils-traceroute6
为 IPv6 提供 traceroute 功能(mtr
是个不错的支持双栈的traceroute
替代品,如果路由器存储空间够大的话)
壹: 打开 OpenWRT IPv6 私网地址分配
OpenWRT 默认会分配 IPv6 私网地址,在Network->Interfaces
页面底下有个Global network options
,IPv6 ULA-Prefix
这里应该有一个随机的fd
开头的/64
地址,LAN 客户端应该能自动获得这个地址范围内的 IPv6 地址,DHCPv6 和 SLAAC 默认都开了
为了让 OpenWRT 后面的设备始终能够获得 IPv6 网关,需要在Network->Interfaces->LAN
下方的DHCP Server
部分的IPv6 Settings
部分,勾选Always announce default router
。否则,由于默认分配的是私网地址,OpenWRT 不会向下游设备公布 IPv6 默认路由(即网关),可能导致路由器上 IPv6 连通但下游设备不通的情况 (感谢@terro提醒)
贰: 打开 IPv6 NAT
客户端有了正确的地址以后,需要在路由器上打开 IPv6 NAT。OpenWRT 默认的防火墙配置不会管 IPv6 的 nat 表,可以在/etc/firewall.user
里面加上
WAN6=eth0
LAN=br-lan
ip6tables -t nat -A POSTROUTING -o $WAN6 -j MASQUERADE
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i $LAN -j ACCEPT
WAN6 和 LAN 分别改成外网 IPv6 和内网网卡(interface)的名字,注意不是防火墙区域(zone)的名字,也不是 LuCI 里面Network->Interfaces
里面看到的名字,而是ifconfig
看到的名字
叁: 正确配置网关
在路由器上ip -6 route
看一下自己的默认网关。如果获得的是
default from 2402:f000:x:xxxx::/64 via fe80::xxxx:xxxx:xxxx:xxxx dev eth0 proto static metric 512
这样坑爹的网关,在转发 NAT 包的时候会有问题,需要把去掉from 2402:f000:x:xxxx::/64
这一部分的以后的默认路由添加到路由表中。可以新建一个/etc/hotplug.d/iface/99-ipv6
,它的内容是
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
iface=wan6
[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0
ip -6 route add `ip -6 route show default|sed -e 's/from [^ ]* //'`
logger -t IPv6 "Add IPv6 default route."
这里iface
是 LuCI 里面Network->Interfaces
里面看到的名字,一般叫 wan6。这个脚本的意思是在 wan6 起来以后读取默认网关,把带 from 的内容去掉,再加到系统路由表里。记得
chmod +x /etc/hotplug.d/iface/99-ipv6