为树莓派添加he的ipv6隧道

0 概述

这次安装he隧道的过程真的是充满了艰辛,来来回回折腾了好几天,各种查资料和发邮件发帖求教,相当心累了。

先大概说下我对he隧道的理解吧,这是一个6in4的协议,即把ipv6数据包封装在ipv4包里进行通信。流程简述如下:

  • 客户端发送ipv6的请求,通过he隧道将ipv6请求封装在ipv4的数据包中
  • 客户端通过本地的ipv4网卡发送上述数据包到隧道服务器
  • 隧道服务器将ipv6的数据从ipv4的包中解析出来,再由服务器的ipv6地址去路由找到剩下的内容
  • 隧道服务器将找到的内容再次封装成ipv4的数据,原路返回客户端

要完成这个过程需要以下几个地址都是可访问的:

  • 服务器的ipv4地址,即server ipv4 address,用于帮客户端找到服务器
  • 服务器的ipv6地址,即server ipv6 address,用于同外部的ipv6进行通信
  • 客户端的ipv4地址,即client ipv4 address, 用于帮服务器找到发起隧道请求的客户端

至于最后客户端的ipv6地址,用途是给外网的ipv6服务器做身份标识,比如在test-ipv6.com的测试中,展示的本机ipv6地址就是这个client ipv6 address。

说完大致的原理,来看下给树莓派创建he隧道的过程。

1 创建he隧道

先保证自己有一个可ping通的公网ip,详情可以咨询自己的运营商。

登录he的官网: tunnelbroker.net,注册账号啥的就不说了,直接点击创建隧道,这里有两种,我们选第一个regular tunnel就可以了。然后是填公网ip和服务器地址,事先可以测试一下各个服务器的延迟,具体教程很多这里就不重复了。

然后是重点:隧道创建完成后一定要先确认server ipv6 address是外网可Ping通的,不然结局就是我们本地可以发送ipv6数据到服务器,但是收不到任何响应,因为服务器的ipv6不通就表示外网的服务进不来。

推荐一个测试网站:http://www.ipv6now.com.au/pingme.php

这里以ipv6.google.com为例,把自己的server ipv6 address输进去点击Ping now之后就能看到结果,基本和普通的ping测试没啥区别。

image

如果自己的server ipv6 address没法ping通,要么发邮件到he的开发团队让他们帮忙看,要么自己再向运营商换个公网ip然后重新创建个tunnel,不过一般重启下光猫就能有个新的公网ip了。

2 给树莓派设置静态ip

我的光猫只给了一个千兆口和一个百兆口,但家里的设备较多,又想让它们都能用满我200M宽带的全部带宽,就接了一个千兆路由器。但这里要注意的是,he隧道虽然可以支持nat穿透,但为了避免麻烦,最好只有一层穿透,即内网都在同一个网关后面,这就需要把光猫出来的网线插到路由器的LAN口,让路由器只充当一个交换机的角色。

所以我的网络连接就是,光猫通过光纤接外网,把千兆LAN口接到路由器的LAN口上,其他所有的设备都接到路由器上,不管有线还是无线(有线当然也只能接路由器的LAN口哈)。这个连接下,我所有的设备都同处一个网段,后期方便使用局域网的文件共享服务。

接着登陆光猫的管理界面,找到树莓派,复制其mac地址。

image

然后找到光猫对应的静态ip设置界面,将该mac地址与ip绑定。

image

当然设置静态ip的事也可以通过树莓派自身来完成,不过我觉得相比而言更麻烦一点,就直接在光猫统一管理了。

补充一点,如果光猫有IPV6 DHCP服务,最好让其处于默认状态,不确定的设置前可以先重置一下光猫。我之前不小心设置了一下忘了还原,就也一直连接不上。

image

3 登录树莓派并配置he隧道

在局域网内,用其他电脑ssh登录进树莓派,当然如果你的树莓派本身也接了显示器键鼠啥的用它自己也行。

在tunnelbroker的页面,打开刚刚创建的tunnel,在example configurations里选择Debian/Ubuntu,然后复制里面的内容。(假设里用的就是树莓派的默认系统raspbian)

编辑树莓派的/etc/network/interfaces文件,把刚刚复制的内容粘贴进去,同时把local后面的地址改成内网刚刚配的静态ip。

我的配置文件如下,已隐去ipv6地址,实际中替换为自己的真实地址即可

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:470:XXX:XXX::2
        netmask 64
        endpoint 66.220.18.42
        local 192.168.1.10
        ttl 255
        gateway 2001:470:XXX:XXX::1

保存文件,重启网络,可以用命令 sudo system networking restart,当然也可以直接重启树莓派。

重启之后用ifconfig看看,如果有he-ipv6这个隧道就说明创建成功了。

pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::e9c3:109e:90b0:e90f  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:4b:44:80  txqueuelen 1000  (Ethernet)
        RX packets 2648  bytes 211645 (206.6 KiB)
        RX errors 0  dropped 5  overruns 0  frame 0
        TX packets 353  bytes 38884 (37.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

he-ipv6: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
        inet6 fe80::c0a8:10a  prefixlen 64  scopeid 0x20<link>
        inet6 2001:470:xxx:xxx::2  prefixlen 64  scopeid 0x0<global>
        sit  txqueuelen 1000  (IPv6-in-IPv4)
        RX packets 26  bytes 2648 (2.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29  bytes 2952 (2.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:1e:11:d5  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4 检查隧道的连通性

最直接的方式就是用ping6这个命令看看通不通。

pi@raspberrypi:~ $ ping6 ipv6.baidu.com
PING ipv6.baidu.com(2400:da00:2::29 (2400:da00:2::29)) 56 data bytes
64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=2 ttl=40 time=456 ms
64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=3 ttl=40 time=456 ms
64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=4 ttl=40 time=456 ms
64 bytes from 2400:da00:2::29 (2400:da00:2::29): icmp_seq=5 ttl=40 time=456 ms
^C
--- ipv6.baidu.com ping statistics ---
6 packets transmitted, 4 received, 33.3333% packet loss, time 47ms
rtt min/avg/max/mdev = 455.605/456.204/456.471/0.352 ms
pi@raspberrypi:~ $ ping6 ipv6.google.com
PING ipv6.google.com(tsa03s01-in-x0e.1e100.net (2404:6800:4008:802::200e)) 56 data bytes
64 bytes from tsa03s01-in-x0e.1e100.net (2404:6800:4008:802::200e): icmp_seq=1 ttl=55 time=306 ms
64 bytes from tsa03s01-in-x0e.1e100.net (2404:6800:4008:802::200e): icmp_seq=2 ttl=55 time=307 ms
64 bytes from tsa03s01-in-x0e.1e100.net (2404:6800:4008:802::200e): icmp_seq=3 ttl=55 time=313 ms
64 bytes from tsa03s01-in-x0e.1e100.net (2404:6800:4008:802::200e): icmp_seq=4 ttl=55 time=307 ms
^C
--- ipv6.google.com ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 6ms
rtt min/avg/max/mdev = 306.193/307.996/312.721/2.759 ms

然后可以用第1步提到的测试网站看看自己的client ipv6 address能不能通,以保证在之后的访问中其他网站的服务器可以识别自己的身份。

5 Debug

如果上面没有ping通的话,可以再用ifconifg看看各个接口的信息,注意he-ipv6那部分,有两个重要字段,即RX packets 和 TX packets,下面简称RX和TX。

  • 如果RX、TX都是0,多半说明隧道没配成功,可以仔细对比下配置文件是否有错误
  • 如果RX为0,但TX不为0,多半是服务器没正常启用,因为本地已经可以发送了,但服务器没法和外部通信,也就没法返回后续的内容。参考第1步里最后测试server ipv6 address的部分

一般现代的操作系统不管是树莓派、路由器、还是光猫,它们都是支持ipv6的,包括这种6in4协议,如果发现自己连不通可以试试重装系统,恢复出厂设置等方式。

6 后续

由于ipv6是公网地址,直接暴露在网上还是挺危险的,可以考虑加一些防火墙,详情可以参考其他的文章。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容