Nps 使用(内网穿透)
安装
服务端
一台用用公网ip的服务器(我这里有台腾讯云轻量服务器centos系统)
查看
centos
版本以及内核的架构[root@VM-16-13-centos ~]# cat /proc/version Linux version 3.10.0-1160.59.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Feb 23 16:47:03 UTC 2022
根据不同的版本和内核安装不同的软件 根据上方的系统版本不难看相互系统架构为x86_64 那么自然而然需要下载x86架构的软件包 (amd64)即可
执行安装和启动以及配置
- 安装
sudo ./nps install
- 更改配置 目录文件在
/etc/nps/conf/nps.conf
下
名称 含义 web_port web管理端口 web_password web界面管理密码 web_username web界面管理账号 web_base_url web管理主路径,用于将web管理置于代理子路径后面 bridge_port 服务端客户端通信端口 https_proxy_port 域名代理https代理监听端口 http_proxy_port 域名代理http代理监听端口 auth_key web api密钥 bridge_type 客户端与服务端连接方式kcp或tcp public_vkey 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式 ip_limit 是否限制ip访问,true或false或忽略 flow_store_interval 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化 log_level 日志输出级别 auth_crypt_key 获取服务端authKey时的aes加密密钥,16位 p2p_ip 服务端Ip,使用p2p模式必填 p2p_port p2p模式开启的udp端口 pprof_ip debug pprof服务端ip pprof_port debug pprof端口 disconnect_timeout 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins - 配合Nginx实现https访问web管理页面 只需要做到简单的转发即可,如果有服务占用8080(默认web端占用的端口,可以修改对应的web_port),同理如果8024端口被占用,那么也可以修改文件为别的端口,然后重启服务(在已启动情况下)
上方步骤操作完即可完成简单nps服务端的部署
客户端
- 根据不同的操作系统下载不同的安装包,我这里是MacOS(M1 芯片),下载的是
darwin_amd64_client
的客户端,至于为啥我试用arm的客户端不可以,我也百思不得其解。 - 然后分为两种执行模式:
1、无配置文件启动 2、注册到系统服务(开机启动、守护进程) 在新建客户端后就会生成一串执行脚本,如果是window只需要将**./npc改为 npc.exe**然后执行即可
示例为:./npc -server=ip:port -vkey=web界面中显示的密钥 -type=tcp
- 安装
直接运行,不注册到系统 在安装包目录下执行web客户端的➕下的脚本即可
注册到系统服务(开机启动、守护进程)
- mac 电脑下直接在脚本
install
前加上sudo
然后执行启动sudo npc start
- window 电脑下需要以管理员身份运行
cmd
或者powershell
在powershell
下需要对ip进行引号处理括起来
npc.exe install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
- 配置文件说明如下
项 含义 server_addr 服务端ip/域名:port conn_type 与服务端通信模式(tcp或kcp) vkey 服务端配置文件中的密钥(非web) username socks5或http(s)密码保护用户名(可忽略) password socks5或http(s)密码保护密码(可忽略) compress 是否压缩传输(true或false或忽略) crypt 是否加密传输(true或false或忽略) rate_limit 速度限制,可忽略 flow_limit 流量限制,可忽略 remark 客户端备注,可忽略 max_conn 最大连接数,可忽略 pprof_addr debug pprof ip:port - mac 电脑下直接在脚本
nps内网穿透的使用(tcp连接篇)
- 在web管理端进行新增客户端,什么都可以不填写,但是要记住生成的id,尽可能添加之后返回的页面没有立即刷新出来新增的客户端(会有➕,➕下的脚本在客户端下需要执行该脚本),需要刷新下页面
- 然后新增TCP隧道,点击新增后,填写刚才的客户端id,然后进行服务端(服务端的端口记得放开策略,不论是防火墙还是云服务器的进出口策略)和客户端的端口的绑定
- 服务端的端口即可直接转发内网的端口的服务(内网需要可以连接公网)
p2p篇 peer-to-peer (点对点连接)
- 点击新增p2p,填入需要被连接的客户端的id,然后将被连接客户端的端口填入,并填入唯一标识密钥,然后点击确定即可生成一个p2p连接客户端,然后用另一个软件去直接连接p2p点(此客户端可以不注册进客户端,但是依旧需要执行生成后的p2p节点的执行脚本),如果连接p2p节点的需要置顶端口,可以在执行脚本后变添加
-local_port=xx
参数,xx为本地端口号 - 服务端需要开启6000-6002(UDP)端口,并且需要服务端的
http_proxy
相关内容注释掉,如果服务端的p2p_port
端口已经被占用,清修改配置文件后并重新启动 - 注意: 流量不经过公网服务器,受nat类型影响较大,不能保证100%成功,支持大部分nat类型,如果p2p双方都是Symmetric Nat,肯定不能成功,其他组合都有较大成功率。stun_addr可以指定stun服务器地址。
./npc nat -stun_addr=stun.stunprotocol.org:3478