找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

IPV6 随时随地登录家里树莓派

admin 2019-11-18 13:30 163人围观 嵌入式相关

导语

上周为了讲解Arm下crash dump(user space和kernel)分析,需要简单例子。而编译环境被Docker封装起来,导致写个C程序去描述Arm的一些基本特性(参数传递规则、stack protector和一些汇编指令),并不是那么方便。于是下班回家在树莓派上编写了demo程序,用板子上自带原生的host gcc。

其实很多有思路的时候,想立刻找台相应的设备来测试。家里的树莓派在路由器后面,在家以外都无法直接访问它。

想随时随地访问家中的树莓派,有办法吗?

2家庭路由器内外网

如下图所示,外网无法直接访问家中的局域网。



原因是:
1) Internet网络中,只有公网IP(如210.xxx.xxx.xxx)是能够互相通讯的
2)局域网内,同一网段的私有IP地址(如192.168.xxx.xxx)能够互相通讯
3)路由器一般有两个IP。一个是WAN口的公网IP(每次拨号获得的公网IP或不同)。另外一个是LAN口的。
4)路由器后面的设备,获得的IP,只是内网(私有)IP(比如192.168.1.30)。这里192开头的IP是IPV4地址。
有没有办法可以公网穿透访问呢,有。
在路由器上NAT转换。不过这要求路由器的IP地址不能变化。实际中,每次拨号,用户得到的IP是运营商分配得来的,经常变化。比如今天拨号得到的公网ip地址218.93.18.62,隔2天再次拨号变成218.93.19.37。此时,由于无法及时知道新ip,从而错误连接到原先地址218.93.18.62,多半被拒绝。
IP会变,但如果想办法把域名绑定到这个IP,然后利用域名来访问,就可以真正随时穿透内网访问了。花生DDNS就提供这样的服务。
类似的,我刚开始用树莓派的时候,想过利用Amazon云来和它通讯,做一些简单的比如开关之类的动作。

2IPV6

上述讲的都是IPV4下的家庭网络。
最近公司的产品加上了IPV6支持,也就是dual stack。我突然想到是否南京地区本身已经支持ipv6了?如果可以,那就可以从外网直接访问家里路由器后面的设备了。
在准备测试之前,先搜索新闻,看南京地区是否已经支持Ipv6。答案是鼓舞人心的。
家里电信光猫缺省是桥接模式,后面的路由器,用PPPoE拨号。
到底家里或者手机是否真的有ipv6地址,访问www.test-ipv6.com来验证。
一个大大的红叉,最下面是0/10。说明PC并没有获得Ipv6地址。



通过电信的固网,没得到Ipv6。那试试空中网,手机测试反而通过。



说明南京电信是支持Ipv6的。那为什么固网没有获得Ipv6地址呢?是哪里被阻塞或者需要额外打开吗?
检查PC网卡的连接属性,ipv6是勾选上的。



既然两端(一段是服务端-运营商,另外一端客户端-PC)都支持ipv6,而终端依然没有获得相应地址,唯一的可能性就是中间环节-路由器。
登录华硕路由器,点击高级设置下的IPV6,果然默认情况下是关闭的。



为了打开,联机类型选择Native。具体,参见[2]。
Native需要运营商(ISP)支持。南京电信是支持的。这种情况下,允许路由器下级的客户端与拨号服务器直接通信并获取原生IPv6地址。
接下来,接口类型选择PPP。再点击最下面的应用本页面设置。



之后系统生效到100%,自动logout,再次登录ipv6页面,发现ipv6地址已经显示出来。



下一步检查路由器后面的设备是否有ipv6。在Win下,开始->运行->cmd,Dos窗口输入ipconfig,提示网卡获得了ipv6地址。



再登录树莓派,输入ifconfig,WAN接口也有ipv6地址。



注意到地址皆是以240e开头。这是因为各大运营商的地址分配是:电信- 240e 开头移动- 2409 开头
联通- 2408 开头

另外,fe80开头的地址,类似ipv4的169.245.xxx.xxx(保留的内网地址)。下面介绍填写ipv6地址的地方,一概不填写它。
另外一个ip -6命令也可以看网卡的ipv6信息。



3Termius测试SSH树莓派

 现在家里一些设备都已获得Ipv6地址,于是测试是否可以直接登录树莓派。   iPad下载Termius这个terminal 工具,选择Basic(免费)功能,创建一个new host。在Hostname一栏输入树莓派的Ipv6地址(不是以fe80开头的)
当出现Continue按钮时,表明连接成功。接下来输入用户名和对应的密码,即进入树莓派。





考虑到是在家里用iPad方便。如果出门在外,只能用手机。而手机走的是空中网(4G或者5G)。
 关掉手机的Wi-Fi,也下载Termius这个软件,如iPad同样步骤,结果提示No route to host。



  为什么Wi-Fi可以,4G不可以?
  Wi-Fi下,iPad和树莓派都处在路由器的后面(地址段相同)。4G下,手机在路由器的另外一边(地址段不同)。不同网络访问,被拒绝,一般是防火墙阻挡。于是检查树莓派本身是否有防火墙。
  输入iptables -nL,并没有任何一条规则。



  再尝试删除/etc/sysctl.conf中forwarding那一行最开头的##net.ipv6.conf.all.forwarding=1



重启树莓派,再次连接,依然失败。
 既然树莓派上没有防火墙之类的限制。那剩下一个可能就是路由器。
  果然,默认情况下,防火墙是开启的(不单对Ipv6,对Ipv4同样)。



4路由器Ipv6 CIDR设置

防火墙最下面,有一栏Remote IP/CIDR。CIDR(Classless inter-domain routing),这个ipv4下如何填写很熟悉,Ipv6怎么填写呢?
 先看看连接到树莓派上的Remote Ipv6到底是多少?
 netstat -an会把Ipv4的也显示出来。



于是加个"-6"选项,也就是netstat -an -6,这样只显示Ipv6的地址信息。



 Foreign Address栏,地址并没有完全显示出来。记得Busybox的ps命令有-w(lowercase)选项。运用此option在netstat上,并不生效,输入man netstat,发现得用-W (uppercase)。参见[4]。



后来,发现还有另外一个命令ss一样可以起到类似效果。



知道了远端的地址,接下来,就尝试填写正确的CIDR。
开始添加一个新条目,同时放开远端和本地地址的限制,端口号填写ssh的端口号22。4G Termius测试通过。



实际中,不加限制的开放地址,是很不安全的。于是下一步限制本地IP。



根据[6]和[7],逐步测试,收紧远端地址。



上图,240e是16位,所以斜杠后面写16。



5总结

路由器上防火墙设置后,再次用手机测试



点击Continue,下一步准备输入用户名



输入完密码后,最后重要登录进树莓派的系统



总之,有如下要点:
1)检查当时运营商是否部署了Ipv6网络

2)确保家里用的路由器支持Ipv6(我用的是华硕中端路由器)
3)加入防火墙规则,以放行某个Ipv6的地址段通讯

注意:1)打开Ipv6后,由于优先使用Ipv6地址,故要加强路由器的密码强度。防止被他人网络扫描(虽然理论上Ipv6无穷,不像Ipv4那样好暴力穷举)并尝试攻击。
2)路由器后面的设备也要加强密码保护。一个好的例子是:Ken Thompson的密码,39年后才在今年10月初被攻破。
有了Ipv6,是否就可以访问谷歌?答案是否定的。

那有这个还有什么用?a)可以远程访问路由器后面的设备,对我来说,提高生产力。

b)有助于物联网普及(虽然个人觉得还是借助各种云和各家的App更安全和对普通用户友好)。

参考:

[1] https://www.asus.com.cn/support/FAQ/1013638/

[2] https://www.asus.com/support/FAQ/113990/

[3] https://qiaodahai.com/asus-router-enable-ipv6.html

[4] https://askubuntu.com/questions/834807/format-of-ipv6-addresses-in-the-netstat-output

[5] https://www.rainasmoon.com/business/ipv6/

[6] https://www.mediawiki.org/wiki/Help:Range_blocks/IPv6

[7] https://docs.netgate.com/pfsense/en/latest/book/network/ipv6-subnets.html




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:返无归一,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......