用nps实现内网穿透
前面的文章聊了使用Nextcloud创建自己的网盘。通常在自己机器上搭的网盘只能在家里的内网用。这一期就来讲一讲,用nps实现内网穿透,让我们在公网上也可以访问家里的网盘。
最直接的内网穿透方式就是DDNS。如果有公网IP的话,采用这个方式是成本最低效果最好的。但由于现在监管严格,基本上家用宽带无法申请到公网IP了。
与DDNS效果差不多,但稍微麻烦一点的是P2P内网穿透,比较知名的P2P内网穿透软件有zerotier、n2n等。这种方式对网络的NAT类型要求比较严格。只有锥形NAT可以被穿透。而国内的宽带大部分都是对称型NAT,虽然网上有人说可以打电话申请改变自家宽带的NAT类型但成功的很少。
那剩下最后一条路就是用一个服务器作为反向代理,实现内网穿透。这个方案是最简单的,只要能连上网就能够穿透,缺点就是这个方案的成本很高。虽说国内的it行业发达,基础设施完善,但带宽却贵得离谱。阿里云最便宜的机器一年也要600多,带宽只有1M,相比之下国外的服务器就便宜多了带宽通常都有1G。
但国外的服务器往往很不稳定,而且延时太高,实际使用体验很差。那有没有既便宜,又稳定,带宽大,延时小的服务器呢?我搜了一圈还真的有,其实云服务器除了标准的VPS外还有NAT VPS。NAT VPS共享ip,共享带宽,通常内存及硬盘的配置会差一些能用的端口数量有限,所以费用能便宜不少,国内提供NAT VPS的云服务商规模都不大,服务器通常只有几个地区可以选择。
我买的NAT VPS的配置如下:
我是在618的时候买的,打了6折,年付230。目前已经用了1个月,带宽基本能够跑满,服务器也一直比较稳定,我买的这款因为内存太小,只能跑ubuntu18.04系统,如果装20.04会死机。
接下来继续讲内网穿透吧,以云服务器作为反向代理实现内网穿透的方案主要有frp、ngrok和nps。frp配置起来稍微有些麻烦,ngrok开源版本已经不更新了,nps提供了一整套解决方案,可以很方便的在其配置页面上添加更改相关配置,对小白非常友好,所以最终我选择了nps。
nps的GitHub地址:
https://github.com/ehang-io/nps
nps的官方文档:
https://ehang-io.github.io/nps/
nps下载地址:
https://github.com/ehang-io/nps/releases
nps的安装非常简单,到它GitHub的Release页面下载相应系统的服务端和客户端,如linux系统一般下载 linux_amd64_xx,windows系统下载 windows_amd64_xx, 下载后解压就能使用了,服务端可以通过sudo ./nps install进行安装,而后使用sudo nps start启动。
启动后可以通过web界面进行相关的配置,如果使用NAT VPS首先需要配置一下端口,nps的默认web管理界面的端口是 8080,默认与客户端通信的端口是 8024,所以需要对这两个端口进行配置
设置好后,就可以在浏览器里通过ip:端口号来访问nps的管理后台了,默认用户名是 admin,默认密码为 123 ,正式使用的时候别忘了改密码。
登陆后点击客户端,点击新增:
只需要在备注中填写一个名字即可,压缩和加密选项也可以选上
之后在客户端列表上就可以看到刚刚添加的客户端了。
接下来配置客户端,不同系统平台的客户端使用方法类似,
安装自启服务: sudo ./npc install -server=ip:port -vkey=唯一验证密钥
启动程序: sudo npc start
,port默认是 8024
,如果配置了端口映射则要输入映射后的端口。注意,在windows中需要用管理员权限打开命令行黑窗口。
如果使用powershell,需用英文双引号将ip:port和密钥引起来不然会出错,用命令提示符不需要引号。连接成功的界面如下图,之后点击隧道,在新的页面上点击新增:
接下来设置服务器开放的端口,以及客户端上要暴露服务的端口。如果是NAT VPS则要注意这里的端口是内网映射之前的端口,而之后通过浏览器访问的时候要用映射后的端口。