Loading... 两年前写了一篇关于**内网穿透**的文章,至今还有不少朋友询问内网穿透的问题,至少表明内网穿透的需求没有减少,而且我发现这个系列教程也很久没有更细了。 当初的文章如下:[IT男的VPS系列教程 篇一:内网穿透(Frp)-拯救没有公网IP的你][1] <!--more--> ### 背景和需求 #### 需求 目前来说,各大运营商都在减少对个人用户提供公网IP,这已经是一个趋势,估计在IPv6普及前不会有好转。虽然可以通过客服要回公网ip,但是难度太大了,就算能要到运营商也得恶心恶心你,所以目前外网访问家里路由器、NAS、智能家居等成了问题。 对于没有公网IP的解决办法也有很多:收费的有花生壳、TeamView,免费的有frp、ngrok等。目前我也一直使用frp。 #### frp的问题 FRP非常稳定,功能强大,我也是一直稳定使用。但是还是有几个不爽的地方,**主要问题**体现在: - **没有可视化界面**,全部操作都是conf文件配置,有些路由器单独做了可视化界面(比如Koolshare),操作还方便一点,但是其他平台只能通过配置文件了。 - **不能服务端操控**,每次添加隧道都需要在客户端完成。如果你有多台设备,修改连接的时候需要登录每一台设备去操作。 发现nps 近期我一直在寻找看有没有做Frp面板的项目,但是一直未果,这期间发现了一些自己带面板操作的内网穿透项目,比如nsp、landproxy等,其中nps算是比较成熟、稳定的。所以今天拿来给大家演示。 > nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。 i> 本教程依然面对小白用户,但是需要前期的文章做基础,其中对VPS的基础操作请看IT男的VPS系列教程 篇一:[内网穿透(Frp)-拯救没有公网IP的你][2] --- #### 原理 超强内网穿透nps 解决所有无公网IP问题(上) 这张图很好解释了内网穿透的原理,由于**内网(通常情况是家里的有线宽带)没有公网IP**,无法在路由器上做端口映射,或者利用动态DNS连接回家里的设备,所以需要一个**具有公网IP的设备来进行传递数据**,公网IP设备和家里的能够建立一个稳定的隧道。(请忽略关于HTTP/1.1和/2的逻辑) 在nps中,我们把具有公网IP的设备称为服务端,就是标题中提到的VPS,不明白的看本系列第一篇文章,没有公网IP的内网设备称为客户端,一般是家里的设备,可能是路由器、NAS、树莓派等。 ![pangolin_dataflow.png][3] 数据流的传递方向:**外网设备 - 服务端(VPS) - 客户端(内网设备)** #### 功能场景 那么nps能够实现什么功能: - 在外网使用HTTP代理访问内网站点----> http代理模式,比如在外网访问群辉的HTTP界面,这应该是最常用的 - 想在外网通过远程桌面连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式,穿透3389端口 - 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式 - 搭建一个内网透明穿透,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式,比如在外网直接通过192.168.1.1访问路由器,连域名都不需要 - 如果你有以上需求,那么用nps完全ok。以下教程全部在Vultr上实现,日本节点,Ubuntu18.04系统64位。基础知识请参阅前期教程。 ### 服务端 #### VPS和域名准备 - 准备好你手头的VPS,保证IP正常,防火墙开放。阿里、AWS都需要单独开放防火墙的。 - 准备好你的域名,并做好泛域名解析。比如我这里用将 *.nps.imgki.com 的A记录指向我的服务器IP。 - 准备好SSH登录器,比如Xshell、Putty等。 泛域名准备好之后,我的*.nps.imgki.com就全部指向服务器了。以上准备工作如果有不明的请看前期教程。 #### 服务端安装 去Github的页面下载服务端程序 这里可能大家就迷糊了,这么多选哪个?我简单解释一下: 带有server的都是服务端,client的都是客户端;在根据架构选择适应自己系统,比如X86-64架构,在BSD家族及其他Linux发行版则使用“amd64”,而32位版本则称为“i386”(或 i486/586/686)。 对于Vultr在登录的时候,说的很明白,X86-64位,应该选择linux_amd64_server.tar.gz。 下载并解压程序 wget https://github.com/cnlh/nps/releases/download/V0.17.3/linux_amd64_server.tar.gz &&tar -zxvf linux_amd64_server.tar.gz && cd nps 运行程序 ./nps start 程序默认的web端口是8080,隧道端口是8284,所以请提前放行这两个端口,也保证不要占用。 之后访问IP:8080可以登录web页面,默认用户名admin,密码123 #### 新建客户端 点击client-new-填入连接名称。这个新建客户端建立一次就可以。 之后就可以看到客户端的具体内容,表明offline不在线,这是当然,应为客户端还没连接呢。黄色的命令请记好,一会需要用到。 #### 服务端更多配置 服务端就装好了。当然服务端还有一些参数可以修改,比如端口、用户名密码、服务模式等等。这些配置参数全部在conf/nps.conf下。不过即使不改这些配置已经可以使用了。 vi conf/nps.conf 下面说几个重要的,其他配置还有不少,详情请见官方介绍:服务端配置 httpport web管理端口 是管理界面的登录端口 password、username 是服务端管理界面的用户名和密码 bridgePort 服务端和客户端通信端口 是隧道的通信端口 httpsProxyPort 域名代理https代理监听端口 httpProxyPort 域名代理http代理监听端口 超强内网穿透nps 解决所有无公网IP问题(上) ### 客户端 我客户端是家里的HTPC下Hyper-V运行的虚拟机,安装系统也是ubuntu。 #### 下载并解压程序 mkdir npc && cd npc && wget https://github.com/cnlh/nps/releases/download/V0.17.3/linux_amd64_client.tar.gz &&tar -zxvf linux_amd64_client.tar.gz #### 连接客户端 刚才新建client的命令可以拿来用了。这个表明让客户端连接服务器的公网ip8284端口 nohup ./npc -server=202.182.107.162:8284 -vkey=v9tkr51x7618o3b >/dev/null 2>&1 & 之后看到web端Online就表明连接成功了。 --- ### 使用场景 经过以上流程,客户端和服务端的通信就建立好了,也相当于为我们连接家里的所有设备增加了一个窗口,以下就是针对具体的使用环境来配置了,有web界面当然是方便多了。 #### 场景1:连接回家里的路由器 家里内网网段是192.168.1.X,主路由是192.168.1.1:8080,域名是router.nps.imgki.com,依次点击Client-Hostl-Add host 添加名称、域名和内网IP,注意内网IP要加端口,之后访问router.nps.imgki.com可以看到Ac68u的登录界面啦 #### 场景2:远程桌面连接家里HTPC 家里HTPC端口为192.168.1.8:3389,穿透端口为8024,依次点击Client-Tunnel-增加tcp代理,之后远程桌面登录202.182.107.162:8024 #### 场景3:SOCK5透明代理 如果你觉着这种域名的形式还是太恶心,太麻烦,希望直接输入192.168.1.X连回家里的各种设备的话,依次点击Client-Tunnel-增加Sock代理,增加一个8003的端口,在sock的代理中增加代理目的地,比如chrome中增加利用SwitchyOmega增加一个sock5代理,添加服务器地址和端口。 在浏览器中直接输入192.168.1.1,直接访问到路由器,连域名都省了。 其他场景在作者Github中说的很详细了,可以具体看看:[https://github.com/cnlh/nps][4] --- ### 总结 ####优点 功能强大、支持TCP/UDP,支持HTTP(s)、Sock5代理;具有web管理界面;客户端可以使用无配置模式;加密、压缩等特性。 ####不足 稳定性略差,最近几天来看时不时服务端崩溃;目前资料和教程较少;嵌入式系统目前成熟的运用较少。 虽然存在一些遗憾,但是不妨碍nps成为一款优秀的内网穿透软件。此外,由于产品比较年轻,Github上也只有160commits、31issues,整体上还有一段路要走,特别是在稳定性和成熟性上有待加强,但至少值得期待。 !> 如果你追求稳定,穿透配置不会经常变化,没有太多要求,建议用frp;如果你想试试新产品,喜欢web界面,不怕麻烦,可以试一试nps。 [1]: https://post.smzdm.com/p/a07md2nr/ [2]: https://post.smzdm.com/p/a07md2nr/ [3]: https://imgki.com/usr/uploads/2019/03/1215592241.png [4]: https://github.com/cnlh/nps Last modification:March 8, 2019 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏
12 comments
东西太多不知道从哪里入手
nps挂cdn貌似不能连接,服务端用docker、nginx中转流量到nps容器。有什么方案吗?
nps后来弃坑了,稳定用frp和zerotier
装在VPS上,用默认IP+8080打不开,想到是docker有占用了8080,关了docker,可以登录NPS。
不过更改nps.conf文件的web prot为8082,开启docker后,IP+8082不能登录。怎么回事
请教一下,这个web页面的用户名密码的怎么修改,代码小白实在不知道这个代码应该怎么写
nps最近已经弃坑了 感觉还是frp好用啊
讲讲nps为什么弃坑啊
讲真的,不如frp好用,有时甚至还不如zerotier
内网每个设备都要安装客户端对吧,这样外网才能访问内网设备?
还有路由器系统怎么弄?怎么运行客户端
内网客户端不用都安装,在一个设备上安装客户端就可以了。
打破0回复~Σ(っ °Д °;)っ
感谢打破零回复~