一款轻量级、高性能、功能强大的内网穿透代理服务器
几乎支持所有协议,支持内网http代理、内网socks5代理、p2p等,简洁但功能强大的WEB管理界面,支持服务端、客户端同时控制,扩展功能强大,全平台兼容,一键注册为服务。
为什么要用P2P模式?
P2P是peer-to-peer的缩写,因为点对点,不消耗你VPS或独服的流量,假如你买的是国内VPS或独服本身因为价格和国情的原因,流量就吃紧,假如要传送一个几十G的数据,用传统TCP穿透模式,你传送多少流量,你的VPS就消耗多少流量,而且p2p模式一旦握手成功,就直接交给2端独立通讯,自身是断开的,并且速度快于TCP。
使用Docker安装服务端nps(在服务端-->中转服务器)
安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
拉取镜像安装 server
拉取镜像并修改配置文件
docker pull ffdfgdfg/nps
mkdir nps && cd nps
wget https://archive.etoiles.me/d/博客附件/nps_p2p-1/conf.tar.gz && tar -zxvf conf.zip
cd conf
vim nps.conf ##按照下面修改必要的配置文件
修改必要的配置文件
#bridge
bridge_type=tcp
bridge_port=6800 #监听端口为6800可修改
bridge_ip=0.0.0.0
#p2p
p2p_ip= #修改127.0.0.1,填写公网IP地址,不要填写域名
p2p_port=6000 #p2p端口可修改,官方默认6000,但是防火墙一定要放行6000-6002
#web
web_username= #设置web页面用户名
web_password= #设置web页面密码
web_port= #设置web页面端口
web_ip=0.0.0.0
启动nps服务端
#<本机conf目录>可以自己设置,按照本例为/root/nps/conf
docker run -d --name nps --net=host -v <本机conf目录>:/conf ffdfgdfg/nps #请勿照抄
安装npc客户端并配置-->内网机器-->客户机-->需要被穿透的
下载已经编译好的npc,注意,建议去作者github下载对应系统架构文件,演示使用的是amd64
cd ~
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz && tar -zxvf linux_amd64_client.tar.gz
cd npc
chmod 755 npc
安装npc访问端-->需要访问内网服务的机器
注意:是访问端,访问端!!!举例说明:你需要访问家里内网服务器的ssh,此时已经配置了nps(服务端用于连接客户端和访问端)和npc(用于内网ssh服务),此时,你需要在公司使用电脑(访问端)访问家里ssh。这里的公司电脑就是访问端!!
访问端的安装方式与客户端一样,下面用windows来举例:
github下载对应的windows-npc
https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_client.tar.gz
解压后找到npc和conf文件夹
npc就是我们等会需要启动使用的程序
开始配置服务(服务端nps与客户端npc)
在服务端nps-web页面上添加客户机-->客户机即需要被穿透的机器-->内网服务
在客户机内输入命令
在服务端nps-web页面上添加p2p隧道
目标 (IP:端口) :填写客户机需要被穿透的端口,例如127.0.0.1:8080
唯一标识密钥:自己设置,不能重复
在访问端开启p2p访问
复制刚刚nps-web的命令打开访问端的命令行页面,windows就是cmd
注意:这里复制的命令我们可以在后面添加-local_port=xx,xx可以自定义端口,默认为2000
下图表示成功通过p2p隧道连接成功
下图表示p2p失败,流量通过服务端(就是前面配置的nps端),可以尝试通过重启访问端重试
Enjoy!
按照本例中的连接内网8080端口,配置完整后可以直接连接访问端输入127.0.0.1:2000即可,其他用法可以参考官网wiki。
注意:不是所有的nat类型都支持p2p,使用下面脚本检测
只需要在客户端和访问端npc输入命令检测即可,参考wiki
./npc nat -stun_addr=stun.stunprotocol.org:3478
按照检测类型分类,能否成功参考下图:
注意:按照上面命令检测的类型,Not behind a NAT 等于下表中的全锥型(Full Cone)
一般来讲, NAT可以分为四种类型,分别是:全锥型(Full Cone);受限锥型(Restricted Cone), 或者说是IP受限锥型;端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型;对称型(Symmetric)