超强内网穿透nps 解决所有无公网IP问题(上)

2019-03-07 17:13:36 512点赞 6582收藏 241评论

两年前写了一篇关于内网穿透的文章,至今还有不少朋友询问内网穿透的问题,至少表明内网穿透的需求没有减少,而且我发现这个系列教程也很久没有更细了。

当初的文章如下:IT男的VPS系列教程 篇一:内网穿透(Frp)-拯救没有公网IP的你

背景和需求

需求

目前来说,各大运营商都在减少对个人用户提供公网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管理端。

本教程依然面对小白用户,但是需要前期的文章做基础,其中对VPS的基础操作请看IT男的VPS系列教程 篇一:内网穿透(Frp)-拯救没有公网IP的你

原理

超强内网穿透nps 解决所有无公网IP问题(上)

这张图很好解释了内网穿透的原理,由于内网(通常情况是家里的有线宽带)没有公网IP,无法在路由器上做端口映射,或者利用动态DNS连接回家里的设备,所以需要一个具有公网IP的设备来进行传递数据公网IP设备和家里的能够建立一个稳定的隧道。(请忽略关于HTTP/1.1和/2的逻辑)

在nps中,我们把具有公网IP的设备称为服务端,就是标题中提到的VPS,不明白的看本系列第一篇文章,没有公网IP的内网设备称为客户端,一般是家里的设备,可能是路由器、NAS、树莓派等。

数据流的传递方向:外网设备 - 服务端(VPS) - 客户端(内网设备)

功能场景

那么nps能够实现什么功能

  • 在外网使用HTTP代理访问内网站点----> http代理模式,比如在外网访问群辉的HTTP界面,这应该是最常用的

  • 想在外网通过远程桌面连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式,穿透3389端口

  • 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式

  • 搭建一个内网透明穿透,在外网如同使用内网一样访问内网资源或者设备----> socks5代理模式,比如在外网直接通过192.168.1.1访问路由器,连域名都不需要

如果你有以上需求,那么用nps完全ok。以下教程全部在Vultr上实现,日本节点,Ubuntu18.04系统64位。基础知识请参阅前期教程。


服务端

VPS和域名准备

  1. 准备好你手头的VPS,保证IP正常,防火墙开放。阿里、AWS都需要单独开放防火墙的。

  2. 准备好你的域名,并做好泛域名解析。比如我这里用将 *.nps.imgki.com 的A记录指向我的服务器IP。

  3. 准备好SSH登录器,比如Xshell、Putty等。

超强内网穿透nps 解决所有无公网IP问题(上)

泛域名准备好之后,我的*.nps.imgki.com就全部指向服务器了。以上准备工作如果有不明的请看前期教程。

服务端安装

去Github的页面下载服务端程序 这里可能大家就迷糊了,这么多选哪个?我简单解释一下:

带有server的都是服务端,client的都是客户端;在根据架构选择适应自己系统,比如X86-64架构,在BSD家族及其他Linux发行版则使用“amd64”,而32位版本则称为“i386”(或 i486/586/686)。


超强内网穿透nps 解决所有无公网IP问题(上)

对于Vultr在登录的时候,说的很明白,X86-64位,应该选择linux_amd64_server.tar.gz。


超强内网穿透nps 解决所有无公网IP问题(上)


下载并解压程序

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

超强内网穿透nps 解决所有无公网IP问题(上)

新建客户端

超强内网穿透nps 解决所有无公网IP问题(上)

点击client-new-填入连接名称。这个新建客户端建立一次就可以。

超强内网穿透nps 解决所有无公网IP问题(上)

之后就可以看到客户端的具体内容,表明offline不在线,这是当然,应为客户端还没连接呢。黄色的命令请记好,一会需要用到。

超强内网穿透nps 解决所有无公网IP问题(上)

服务端更多配置

服务端就装好了。当然服务端还有一些参数可以修改,比如端口、用户名密码、服务模式等等。这些配置参数全部在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就表明连接成功了。

超强内网穿透nps 解决所有无公网IP问题(上)


使用场景

经过以上流程,客户端和服务端的通信就建立好了,也相当于为我们连接家里的所有设备增加了一个窗口,以下就是针对具体的使用环境来配置了,有web界面当然是方便多了。

场景1:连接回家里的路由器

家里内网网段是192.168.1.X,主路由是192.168.1.1:8080,域名是router.nps.imgki.com

Client-Hostl-Add host

超强内网穿透nps 解决所有无公网IP问题(上)

添加名称、域名和内网IP,注意内网IP要加端口

超强内网穿透nps 解决所有无公网IP问题(上)

之后访问router.nps.imgki.com可以看到Ac68u的登录界面啦

超强内网穿透nps 解决所有无公网IP问题(上)


场景2:远程桌面连接家里HTPC

家里HTPC端口为192.168.1.8:3389,穿透端口为8024

Client-Tunnel-增加tcp代理

超强内网穿透nps 解决所有无公网IP问题(上)

超强内网穿透nps 解决所有无公网IP问题(上)

之后远程桌面登录202.182.107.162:8024

超强内网穿透nps 解决所有无公网IP问题(上)


场景3:SOCK5透明代理

如果你觉着这种域名的形式还是太恶心,太麻烦,希望直接输入192.168.1.X连回家里的各种设备的话,那么:

Client-Tunnel-增加Sock代理

超强内网穿透nps 解决所有无公网IP问题(上)

增加一个8003的端口

超强内网穿透nps 解决所有无公网IP问题(上)

在sock的代理中增加代理目的地,比如chrome中增加利用SwitchyOmega增加一个sock5代理,添加服务器地址和端口。

超强内网穿透nps 解决所有无公网IP问题(上)

在浏览器中直接输入192.168.1.1,直接访问到路由器,连域名都省了。

超强内网穿透nps 解决所有无公网IP问题(上)

超强内网穿透nps 解决所有无公网IP问题(上)


总结

优点超强内网穿透nps 解决所有无公网IP问题(上)

功能强大、支持TCP/UDP,支持HTTP(s)、Sock5代理;具有web管理界面;客户端可以使用无配置模式;加密、压缩等特性。

不足超强内网穿透nps 解决所有无公网IP问题(上)

稳定性略差,最近几天来看时不时服务端崩溃;目前资料和教程较少;嵌入式系统目前成熟的运用较少。


虽然存在一些遗憾,但是不妨碍nps成为一款优秀的内网穿透软件。此外,由于产品比较年轻,Github上也只有160commits、31issues,整体上还有一段路要走,特别是在稳定性和成熟性上有待加强,但至少值得期待。

我的建议超强内网穿透nps 解决所有无公网IP问题(上)

如果你追求稳定,穿透配置不会经常变化,没有太多要求,建议用frp;如果你想试试新产品,喜欢web界面,不怕麻烦,可以试一试nps。

本文计划还有下篇,主要是nps还有一些高级用法,比如安全私密代理、p2p穿透、数据压缩加密等,但一般需求比较小众,稍微总结一下另文在谈吧。

写的比较急,如果有不对的欢迎大家指出!

展开 收起
241评论

  • 精彩
  • 最新
  • 境外低价vps速度和延迟感人(广东移动亲测新加坡的vps好点),贵的vps还不如多拉条电信。国内白嫖的学生云做穿透速度感人,但延迟不错。适合远程桌面之类的应用,做nas穿透还是算了吧。(折中方案,全都买,学生云+境外低价vps,境内用来做操作类穿透,境外的走大流量穿透)。如果有好的p2p穿透麻烦大牛们告知一下我 [邪恶] 不过我已经有公网IP了 [高兴]

    校验提示文案

    提交
    你这算是氪金啊,国内1m鸡做穿透还行,是我主力。境外鸡拿来当错Plex的穿透看视频用。

    校验提示文案

    提交
    我非常乐意为体验买单 [邪恶] 现在2线接入,迟点把王卡宽带搞了,看看能不能肛个公网IP

    校验提示文案

    提交
    还有7条回复
    收起所有回复
  • frp现在有人做了面板和配置可视化了

    校验提示文案

    提交
    前几天在hostloc看到过,不过比较简陋

    校验提示文案

    提交
    不知道是不是同一个,你在github上搜frpMgr

    校验提示文案

    提交
    收起所有回复
  • 我现在用的ddns.to,我觉得也是超级好用,超级无脑!唯一就是限制五个穿透地址,不过完全够用了。

    校验提示文案

    提交
    愿意折腾的自己建吧,用ddsn.to也很好,不过好像限速?

    校验提示文案

    提交
    我前几天信心满满买了一年的轻量化服务器,还注册了域名,搞了解析,结果最后钱花了,发现不行,wget 命令宝大的安装包地址失效了。

    校验提示文案

    提交
    还有18条回复
    收起所有回复
  • 电信装维人员都有权限设置公网IP

    校验提示文案

    提交
    移动的只能干瞪眼了

    校验提示文案

    提交
    移动前几天装了个,上来就是公网ip

    校验提示文案

    提交
    还有15条回复
    收起所有回复
  • 看起来好复杂,我还是继续用电信用公网IP吧,虽然时不时给你变一下……

    校验提示文案

    提交
    有公网ip害怕啥,幸福人啊

    校验提示文案

    提交
    用梅林固件路由,去阿里买个10几块的域名,直接搞定,管他怎么变

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 阿里弄个便宜域名,梅林装个aliddns的插件就解决了,完全不用这么麻烦吧。 [皱眉]

    校验提示文案

    提交
    你这种要基于有公网ip基础上吧,有些是给你公网ip,但会天天换那种,这种是基于没有公网ip条件下的,要看情况

    校验提示文案

    提交
    亲 主要就是解决无公网ip的问题,原理和frp相同

    校验提示文案

    提交
    还有7条回复
    收起所有回复
  • 我想问下,我装的移动,没有公网ip。但是我在单位可以用手机操作开关空调。这啥道理啊

    校验提示文案

    提交
    比如是小米的话,他是连自己服务器的

    校验提示文案

    提交
    这是空调设备广商本身有云服务器在联网做了中转。
    无公网IP搭建服务让外网访问,做内网穿透是比较通用易用的方案,常见类似有如ngrok、nat123、frp、等等不少方法,可以在目标本地将内网地址转换成域名的原理实现。

    校验提示文案

    提交
    收起所有回复
  • 内网穿透用花生壳,方便又好用

    校验提示文案

    提交
    花生壳需要公网iP

    校验提示文案

    提交
    花生壳内网穿透有流量限制 不如挂个蒲公英盒子在内网

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 抄作业弄了一下,然后域名访问的时候提示我需要备案,人麻了。备个案看看吧。。。

    校验提示文案

    提交
    全部换到国外去。

    校验提示文案

    提交
    收起所有回复
  • 这个方法和zerotier相比,有什么优势?真的是太复杂了

    校验提示文案

    提交
    zerotier上次看貌似只能用他家的服务器?延迟有点高啊

    校验提示文案

    提交
    可以自己搭建moon节点,而且zerotier是点对点通信,zerotier的服务器只起连接建立前的解析功能

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 能很小白说一下这个什么意思吗?上次家里的华硕梅林路由器想在上班时候操作,网上胡乱一搜说是要什么什么,是不是这个意思???

    校验提示文案

    提交
    就是在办公室想回家里看NAS,但家里有没有公网ip

    校验提示文案

    提交
    我在外面连家里nas 看的最多的是小姐姐 [皱眉] [皱眉]

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 办公室只能上办公内网 不能上外网 有办法吗?

    校验提示文案

    提交
    跟你们管理员搞好关系 [装大款]

    校验提示文案

    提交
    手机可以啊,紫薯布丁

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 我还要一台电脑安装客户端才能用。能不能直接安装在NAS上的。

    校验提示文案

    提交
    当然可以,黑白群晖都能实现。我就是涂了个省事

    校验提示文案

    提交
    收起所有回复
  • [脸红] 江苏联通低消39送的宽带还是公网ip

    校验提示文案

    提交
    幸福啊 [大妈三宝] ,山东的感觉都不好要

    校验提示文案

    提交
    现在呢,还是公网ip吗?

    校验提示文案

    提交
    收起所有回复
  • 电信还是比较容易的,打10000号,省里会出单给市里,市里不敢不接,移动的应该没公网了,听说打电话也没用。

    校验提示文案

    提交
    移动家宽压根就没有公网,怼也没用

    校验提示文案

    提交
    收起所有回复
  • 你客户端有Ubuntu干嘛不直接装一个面板,所有frp的调试都解决了 [高兴]

    校验提示文案

    提交
    frp只能在客户端操作,nps可以面板服务端操作。

    校验提示文案

    提交
    收起所有回复
  • 流量走vps吗?

    校验提示文案

    提交
    流量全走VPS

    校验提示文案

    提交
    收起所有回复
  • frp穿透网站有一个网速瓶颈,最高也是6M/s

    校验提示文案

    提交
    目前我没有这么高的vps ,最快的国内NAT鸡也就50M的速度,一般还跑不满。家宽上行也没有这么多/

    校验提示文案

    提交
    家里网络电信上传200M,就是没有80端口,本来还想用frp穿透。

    校验提示文案

    提交
    收起所有回复
  • 小白不懂什么叫公网IP 有什么用处 怎么知道自己是不是公网IP

    校验提示文案

    提交
    公网IP可以直接连接,具体可百度一下

    校验提示文案

    提交
    收起所有回复
  • 联通卡,加10块钱开宽带就有公网ip [皱眉] ,坐标023

    校验提示文案

    提交
    老师··你好

    校验提示文案

    提交
    这是光明正大啊

    校验提示文案

    提交
    还有3条回复
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
6.5K
扫一下,分享更方便,购买更轻松