美文网首页树莓派玩转树莓派
为树莓派添加he的ipv6隧道

为树莓派添加he的ipv6隧道

作者: 疯智子 | 来源:发表于2019-10-27 09:13 被阅读0次

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是公网地址,直接暴露在网上还是挺危险的,可以考虑加一些防火墙,详情可以参考其他的文章。

相关文章

  • 为树莓派添加he的ipv6隧道

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

  • 树莓派4b启用ipv6

    树莓派能获取到2408开头的ipv6地址,但是搭建在树莓派上的Adguad Home添加ipv6 dns一直出错,...

  • 树莓派针脚图

    树莓派40Pin引脚对照表 本表格适用于树莓派B+、树莓派2B、树莓派A+,并且兼容树莓派B,树莓派B为26Pin...

  • 为树莓派添加电源按钮

    前言 树莓派常用的关机方法有两种: 使用SSH登录然后敲命令sudo shutdown -h now 拔电源(简单...

  • 树莓派初识及系统安装

    树莓派背景 树莓派是什么?树莓派是为学习计算机编程教育而设计,只有信用卡大小的微型电脑。 树莓派各硬件版本对比 图...

  • Linux主机支持IPv6隧道方式

    创建IPv6隧道 免费创建IPv6隧道网站:https://www.tunnelbroker.net/ 创建 免费...

  • 树莓派从选购到入门一条龙

    树莓派是什么? 树莓派(英文:Raspberry Pi)是基于 Linux 的单片机电脑,你可以简单的理解为 树莓...

  • 树莓Pi基础

    树莓pi 3B+ 简介与基础开发 树莓派是什么? Raspberry Pi(中文名为“树莓派”,简写为RPi,或者...

  • 树莓派Docker上安装Mysql

    树莓派Docker上安装Mysql 在树莓派上官方mysql镜像无法使用,因为树莓派的架构为arm这里使用的映像是...

  • 树莓派简介

    1、树莓派是什么 Raspberry Pi(中文名为“树莓派”,简写为RPi,或者RasPi/RPi)是为学生计算...

网友评论

    本文标题:为树莓派添加he的ipv6隧道

    本文链接:https://www.haomeiwen.com/subject/axjpvctx.html