ipv4的公网IP弄起来还是比较麻烦,所以不管是搭建私人NAS还是远程登陆主机都总是需要进行内网穿透。一般的方案都是用花生壳这类的商用服务,然而这些服务一方面又贵又慢还有流量限制,另一方面还要进行把三代信息都盘出去的实名认证

1G到5G一个月。。。。够干嘛的
现在姑且利用ipv6可以全球ping的特性提供一种实现内网穿透的方法,目前只是用于远程登陆和控制,或许之后可以用于更多的服务器功能。我的方案非常业余而且粗糙,望各位大佬不吝赐教。
基本背景是电信的光猫在安装的时候往往会直接使用 路由模式 而且 直接启用自带的路由器 ,所以要先破解路由器获得路由器的修改权限,将ipv6访问控制的防火墙关闭,把主机的ipv6地址暴露在公网。同时由于这个ipv6地址并不是固定的,使用ddns服务要钱要备案又违背我的初衷,所以使用一个脚本定期将主机的ipv6地址更新到我自己的GitHub仓库里面。
首先登陆这个网站http://test-ipv6.com/检查一下主机接入的网是否支持ipv6:

这里是10/10分,支持
随便找台连接光猫自带的路由器网络的电脑,在浏览器输入192.168.1.1登陆电信光猫自带的路由器:(地址可能因人而异,请以光猫背面信息为准)

你可能会看见这个界面
然而直接登陆这个用户是不够的,因为我们需要进入超级管理员系统才可以修改光猫自带路由器的防火墙。通常来说你可以用这个密码来登陆:
NE7jA%5m
如果这个密码不可用,那么请参考这篇文章来获取路由器超级管理员的密码。
http://www.xgiu.com/dianxin-guangmao-jiemi
获取密码之后,直接将密码输入密码栏然后登陆即可,你应该可以看到这个界面:

说明已经成功进入了光猫的后台,可以对光猫进行任何修改了。
警告:在对光猫进行任何修改之前建议往光猫中插入一枚U盘进行备份,否则自行修改的配置很有可能无法改回来也无法使用。

在这里选择备份
然后将光猫的防火墙的ipv6 session选项关闭:

记得要保存!!
警告:在这步之后你的局域网相当于暴露在外,有一定的网络安全风险
在这之后,从外部网络应该就可以ping到主机了:

然而这还不够,通常来说ipv6地址也并不是固定的,那么当地址重新分配的时候,就没有办法再远程找到主机了。也就是说可能过上两个月这个地址就连不上了。
对此,采用一种简单粗暴的方法。写一个通过crontab来定时运行的shell脚本,将主机的ipv6地址写入一个文本文件,然后通过git推送到github上面。当ipv6的地址改变时,直接上github看新的主机地址就可以了。
首先随便找个位置建一个文件夹ServerControl,然后在里面初始化一个git仓库:
mkdir ServerControl
cd ServerControl
git init
在git中添加一个远程仓库:
git remote add <仓库名> <仓库的ssh地址>
然后建立一个文件夹RemoteControl,进入里面并且新建脚本GitGetIp.sh和存放ipv6地址的IpConfig.txt
touch README.md
mkdir RemoteControl
cd RemoteControl
touch IpConfig.txt
touch GitGetIp.sh
文件结构大概是这样:

脚本GitGetIp.sh,内容如下:
#!/bin/bash
cd /home/a24/ServerControl/RemoteControl
date >> IpConfig.txt
ifconfig >> IpConfig.txt
cd /home/a24/ServerControl
git add .
git commit -m "_______New_______"
git push ServerGit
运行这个脚本将会将ifconfig命令获取到的网络地址命令写入IpConfig.txt这个文本文件里,然后将整个文件夹都推到github仓库中。但是,在IP地址变化之后你并不能登入主机运行这个脚本,因此我们需要让这个脚本自动运行。(可以直接用DDNS,但是这个方案的好处是不用申请域名也不用实名认证也不用花钱)
这里使用crontab命令:
crontab -e
然后根据提示随便选择一个文件修改配置,这里以选择第一个文件为例:

在最后一行加上
05 14 * * * sh /home/<你的用户名字>/<脚本路径>/ServerControl/RemoteControl/GitGetIp.sh
这代表在每天的14点05分运行脚本GitGetIp.sh。值得注意的是,如果想要执行bash脚本,命令中的sh不能漏。
至此,你应该就可以每天在github你的仓库里看到你的远程主机的ip地址了,

红框里面的就是你的主机的ipv6地址,可以在cmd里以这个地址来进行远程ssh连接
ssh -p22 <用户名>@<ipv6地址>

第一次登陆要输入yes和密码
或者用putty:

常见问题:
外网ping不通:

外网的登陆者先在这里http://test-ipv6.com/检查一下是不是支持ipv6的网:

这是不支持的状况
通常来讲手机网络都是支持ipv6的,因此你可以使用手机热点:

然后就可以ping通了:

外网可以ping但是ssh会出现timeout报错:
在调整防火墙这个步骤时可能开启了 ipv6 session防护功能,取消勾选然后重新保存就可以了。