SDB:IPv6
這篇文章現在已經過期了! 原因:{{{1}}} 請參考這篇文章的 討論 頁,以獲得進一步資訊。 |
目录
什么是 IPv6 ?
请见维基百科 IPv6 词条。
国内的 IPv6 网络场景
只有教育网才有 IPv6 地址。公网均为 IPv4 地址。
怎么知道我的网络是 IPv4 还是 IPv6?
su ifconfig
若显示的内容是这样的:
wlan0 Link encap:Ethernet HWaddr 00:1B:77:C4:51:C7 inet addr:192.168.1.106 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::21b:77ff:fec4:51c7/64 Scope:Link
那么您的网络是 IPv4/IPv6 双线的。inet addr 是 IPv4 地址, inet6 addr 是 IPv6 地址。
常见误区
认为只要启用了 IPv6 (Linux 默认启用),不管自己所处的网络环境是 IPv4 还是 IPv6, 只要在浏览器里输入 IPv6 网站的网址 (http://ipv6.google.com) 或 IPv6 格式的 IP 地址 (http:[2001:da8:9000::232]),就应该能够直接访问 IPv6。
出错原因:
IPv4 和 IPv6 目前没有达到无缝互联的高度。
- 你访问一个网站需要经过多级网关中转,这些网关属于 ISP (互联网服务提供商)所有。它们的服务器并没有配置支持 IPv6,你的 IPv6 请求会被丢弃掉,因为识别/解析不了该格式的IP/网址。
- IPv6 和 IPv4 的报头不一样。
报头是网络数据包的头部信息。IPv4 采用的是固定长度的头部 + 可变长度的选项,而 IPv6 采用的是固定长度的头部 + 固定长度的扩展头部。比 IPv4 多了一个扩展头部。因此无法识别该格式的数据包,会被丢弃。
因此如果你所处的网络环境是 IPv4, 那么您需要使用「IPv6 隧道(tunnel)」技术来访问 IPv6 网络。简单说就是给 IPv6 数据包加一个 IPv4 头部来通过 IPv4 网络到达 IPv4 和 IPv6 双线的隧道服务器,该隧道服务器把 IPv4 头部去壳,再转发您的请求给目标 IPv6 网站。返回过程类似。这种加壳去壳需要特殊的服务商提供特殊的软件来做,这种服务商叫做 tunnel broker (隧道经纪)。
IPv6 隧道技术的种类
主要有三类:
- 双协议栈 (Dual Stack):主要用于双线服务器和电信网关,普通人没有。这种技术需要你的主机到目标服务器 (比如 Google) 间的全部节点 (网关路由) 均支持这种技术,不然在中间就会断路。
- 协议转换:即 NAT 技术。Miredo 就是使用了这种技术。
- 隧道封装:简单说就是一个介于你的主机和 IPv4 和 IPv6 双线隧道服务器之间的一个 VPN。这个 VPN 的作用就是架设一条 IPv4 隧道,在隧道中传输 IPv6 数据包。gogoc 就是使用了这种技术。
参考:ipv6 隧道技术概念
完整种类列表:IPv6 transition mechanisms
启用 IPv6
openSUSE 的 IPv6 支持编译在内核中,而不是内核模块。有些非官方教学可能会让您 `modprobe ipv6` 或者在 `lsmod` 的结果中找 ipv6,这些都是不会成功的。因为它已经在内核的二进制预固件里了。同样默认安装激活网卡时就会同时激活 IPv6 的支持。简单说,openSUSE 默认就是支持 IPv6 的。
禁用 IPv6
有流言说激活 IPv6 开机会慢 (因为会多几百毫秒肉眼感觉不到的检测 IPv6 网址的步骤),这是非常无稽的。但是实际使用中某些特殊软件 firefox 确实会因 IPv6 而启动变慢。openSUSE 禁用 IPv6 的方法如下:
- 编辑 /boot/grub2/grub.cfg。在内核命令行后面加上 ipv6.disable=1 禁用内核中的 IPv6 功能。
echo 'Loading Linux 3.7.10-32-desktop ...' linux /boot/vmlinuz-3.7.10-32-desktop root=UUID=9d003617-abbb-4bb1-a6ef-e866ba1debf2 resume=/dev/disk/by-id/ata-SAMSUNG_HN-M101MBB_S2R8J9BB808817-part1 splash=silent quiet showopts ipv6.disable=1
- YaST - 「网络设置」-「概览」-「编辑」-「地址」-「动态地址」-「DHCP」-「DHCP 版本 4 和 6」改成「仅 DHCP 版本 4」。
- 编辑 /etc/hosts 文件,注释掉 # special IPv6 addresses 下的内容。
使用 IPv6
处在 IPv6 网络中
理论上您什么都不用干。ifconfig 返回的地址就是 IPv6 地址。您在使用 NetworkManager 配置网络时去勾选「此连接需要 IPv6 支持」即可。
但实际操作上您可能会遇到两个问题:
- 你手动禁用过 IPv6。这时你要改回来(如果你是用 DHCP 获取地址的话)。
- 有些高校是用自己的客户端来拨号从而得到 IPv6 地址的。因此你面临一个选择,就是禁用 NetworkManager,阻止其对网络设备的独占:
sudo systemctl stop NetworkManager.service sudo systemctl disable NetworkManager.service
然后在网络设置切换到传统的 ipup 模式。接着把自己加到恰当的用户组比如 dialout 等来让普通用户能够使用客户端拨号。
如果你的网络环境中既存在ipv4地址又存在ipv6地址,那么你便可以同时使用ipv4和ipv6网络。然而在某些特殊情况下(如自主架设的教育网收费ip过滤)你无法使用ipv4地址或无法顺利访问某些ipv4地址,那么你可以通过SixXS的代理服务访问此ipv4地址。
处在 IPv4 网络中
你首先需要检查你是否在 YaST 网络设置里禁用了 IPv6。接着您需要配置 IPv6 tunnel 软件。
配置好后,使用 ifconfig 查看,如果得到以下结果:
tun Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet6 addr: 2001:5c0:1000:b::cf33/128 Scope:Global UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1280 Metric:1 RX packets:2259 errors:0 dropped:0 overruns:0 frame:0 TX packets:2348 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:1738638 (1.6 Mb) TX bytes:400736 (391.3 Kb)
那么您的 IPv6 隧道就已经建立起来了(有时候不显示为 tun,可能是比如 teredo,但其实都是 tun 换个名字)。这时您就拥有了 IPv4/IPv6 双线。剩下的比如 NetworkManager 完全不用去管它,因为你的 IPv6 是封装在 IPv4 下的。
但存在下面一个问题,如果是纯 IPv6/IPv4 网站,那么肯定是通过 IPv6/IPv4 访问的,但是如果对方也是一个双线的,是通过什么协议访问的呢?答案是 IPv4。公网的大部分人配置 IPv6 隧道都是有不可告人的目的的。这时就需要编辑 /etc/hosts 文件,强行指定 IPv6 访问:
2404:6800:4005:c00::68 google.com
但这样做的后果就是一旦你没有了隧道,这个网站你就访问不了了。除非你手动删除该映射。
注册 IPv6 隧道服务账户
前面已经说了,公网想要使用 IPv6 是需要隧道经纪提供的隧道服务器的,于是你需要注册一个账户。当然隧道经纪提供的软件也配置了默认的免费账户,但是这种账户你很难连接上。
目前最大的隧道经纪是 Hurricane Electric 和 Freenet6。但前者的配置比较麻烦 (没有客户端,脚本见下),速度也非常慢,我们推荐使用后者。
维基百科隧道经纪列表:
也有台湾的:
http://ipv6tips.ipv6.org.tw/refer3.html (但基本连不上)
IPv6 隧道软件
以下所有软件都需要 tun 这个内核模块。openSUSE 的默认内核是有的。
比较常用的有使用 Teredo 技术的 Miredo 和使用 TSP 技术的 gogoc。
Miredo
使用 miredo 的好处是你不需要账户,只需要安装软件即可。
安装: miredo-client
启动:
sudo systemctl enable miredo-client.service sudo systemctl start miredo-client.service
gogoc
安装:gogoc
配置:
cd /etc/gogoc sudo vi gogoc.conf
把 userid 和 passwd 填好,server 改成你在 freenet6 注册的,auth_method 改成 passdss-3des-1。
启动:
sudo systemctl enable gogoc.service sudo systemctl start gogoc.service
如果成功你就能在 ifconfig 里看到 tun 设备和 IPv6 地址了。
Hurricane Electric (he.net) 配置脚本
ISATAP
国内教育网提供的 6in4 可能还会使用到诸如 isatap 这样的技术,但是网关穿透能力不强,配置也比较麻烦。
IPv6 下的常见命令
ping6
ping 只能 ping IPv4 地址和网址,IPv6 要用 ping6。
traceroute6
原理同上。PS:openSUSE 下的 traceroute 和 traceroute6 位于 /usr/sbin,需要 root 权限。
nslookup
nslookup 默认只能查询 IPv4 网站。要查询 IPv6 网站,需要这样:
$ nslookup (不加任何参数) > set type=AAAA (设置查询对象是 IPv6 制式) > ipv6.google.com Non-authoritative answer: ipv6.google.com canonical name = ipv6.l.google.com. ipv6.l.google.com has AAAA address 2404:6800:4005:c00::69
参考文献
- 维基百科 IPv6 词条
- ipv6 隧道技术概念
- IPv6 transition mechanisms
- List of IPv6 tunnel brokers
- 台湾 IPv6 tunnel broker
- Teredo 技术
- TSP 技术
- isatap 技术
- IPv6 - Ubuntu Wiki
- IPv6 Networking - Funtoo Linux
作者
MargueriteSu 2013年5月15日 (三) 04:04 (MDT)