NPS折腾记录
内网穿透折腾记录
还是草稿,以后有时间写
在宿舍里搞了一台ubuntu server折腾用。想在校园网的特殊环境下实现外网访问内网的需求,从而能随时使用个人博客与code server等服务。
以下为我在大二开学诞生这个需求,直到大三开学才基本实现的一整年的折腾过程的记录。由于计算机网络方面的知识十分浅薄(日常吐槽计网),文章中可能会出现十分多不专业的内容,欢迎各位大佬勘误与科普。同时也给正在折腾的朋友们一些十分不严谨的参考。
First try
使用第三方frp/ngrok方案。
这个方案源自于和朋友联机minecraft的经历。Minecraft服务器架设在内网端口,但可以通过一些frp服务来暴露到一个域名上,从而通过这个域名就能访问到mc服务器。
对于其他的内网服务,这个方案基本也是可行的。好了问题解决了,这篇文章可以结束了。
并不能。这种方案太不优雅了。临时使用的话现成frp或ngrok很不错。
但是,使用现成frp缺点很多无法忍受:
- 极小的带宽。一般免费隧道带宽只有3M以内,付费也就10M封顶。如果是好几个人一起玩mc或者传个文件啥基本就爆了。
- 限流量。之前用的好几个frp的流量都有每日签到领取,这个太难绷了。
- 随机域名/定死的顶级域名。没法用自己的域名,这个接受程度因人而异。
- 安全问题。数据都要走服务商那里转发,如果服务商被hack了就相当于裸奔了,不安全。
- 隧道数限制、校园网拦截等等
frp用了一两天后我直接关隧道跑路了,还是寻求其他方案吧。
Second try:
这次的方案转向了一个更加普遍的方案,就是直接通过某种方法拿到本机的公网IP。
这种方案对于家里宽带有公网IPv4的十分方便且自由。但现在运营商基本不给公网ip了,所以IPv4基本走不通。
但是,号称每一粒沙子都能分到地址的IPv6似乎就宽松很多了。如果能拿到服务器的IPv6地址,再绑个ddns,似乎基本就能实现我们的需求。
开干。但是经历了九九八十一难,最终还是没能成功。
第一难是路由器。我的路由器型号是Redmi 4A,官方的固件虽说能拿到IPv6的IP,但是没法关闭防火墙放行IPv6的出站流量。所以我给路由器刷了一个openwrt。
第二难是openwrt。由于之前没接触过刷机,所以在找刷机包和编译上花了很多时间。最后还是用了大佬做好的刷机包。还好这个过程有breed防砖,不然路由器已经死了一百遍了。
第三难是校园网IPv6分配。openwrt中获取到IPv6地址了,但是校园网的v6地址是/128的,也就是说真的只分配了一个地址,没法组子网。这个地址直接分给路由器了,路由器下的内网设备如果要以IPv
6向外提供服务,就只能通过NAT6。这个NAT6难搞得一比,主要原因是路由器存储空间太小了,没法安装直接配置NAT6的插件。
最后在这一步放弃了,因为在一次测试中突然发现了校园网是个大内网,你的路由器能上行不代表校园网中层层墙能让你上行……
还有一个大问题。IPv6的站点只能由支持IPv6的设备访问,而就目前IPv6的普及情况……估计半数以上的情况都访问不了。
Third try
第二次尝试失败后,由于学业繁忙,折腾的进程陷入停滞……
转机在软工II课上,我为课程项目的后端购买了一个阿里云ECS。使用ecs一段时间后,我突然想到,能不能将ecs的公网IP,用在我的内网服务上呢?
答案是肯定的。这种利用云服务器实现内网穿透的方案就是代理。
Reference
如何用阿里云实现内网穿透?如何在外网访问家里内网设备?-阿里云开发者社区 (aliyun.com)
ffdfgdfg/nps - Docker Image | Docker Hub