Nps 使用(内网穿透)

安装

文档地址open in new window

服务端

  • 一台用用公网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_portweb管理端口
    web_passwordweb界面管理密码
    web_usernameweb界面管理账号
    web_base_urlweb管理主路径,用于将web管理置于代理子路径后面
    bridge_port服务端客户端通信端口
    https_proxy_port域名代理https代理监听端口
    http_proxy_port域名代理http代理监听端口
    auth_keyweb 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_portp2p模式开启的udp端口
    pprof_ipdebug pprof服务端ip
    pprof_portdebug 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或者powershellpowershell下需要对ip进行引号处理括起来
      npc.exe install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
      
      • 配置文件说明如下
      含义
      server_addr服务端ip/域名:port
      conn_type与服务端通信模式(tcp或kcp)
      vkey服务端配置文件中的密钥(非web)
      usernamesocks5或http(s)密码保护用户名(可忽略)
      passwordsocks5或http(s)密码保护密码(可忽略)
      compress是否压缩传输(true或false或忽略)
      crypt是否加密传输(true或false或忽略)
      rate_limit速度限制,可忽略
      flow_limit流量限制,可忽略
      remark客户端备注,可忽略
      max_conn最大连接数,可忽略
      pprof_addrdebug pprof ip:port

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类型,
     ./npc nat -stun_addr=stun.stunprotocol.org:3478
    
    如果p2p双方都是Symmetric Nat,肯定不能成功,其他组合都有较大成功率。stun_addr可以指定stun服务器地址。
Last Updated: