导语
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。 ---------------------------------------------------------------------------------------------------------------------- |