侧边栏壁纸
博主头像
进一步,海阔天空 博主等级

进一步,海阔天空

  • 累计撰写 140 篇文章
  • 累计创建 19 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

使用NPS实现内网穿透

海阔天空
2022-05-28 / 0 评论 / 0 点赞 / 169 阅读 / 0 字

要实现随时随地访问公司或家里的服务器,我们经常需要进行内网穿透。异地组网大家可能最先想到的是大名鼎鼎的wireguard,
然而wireguard的安装和配置还是比较难于理解的,这让很多菜鸟望而却步。当然你也可以使用非开源的PgyVPN来快速组网,但是
pgyvpn是收费的,免费版有连接限制。NPS 是一款开源的轻量级、高性能、功能强大的内网穿透代理服务器,使用NPS可以快速的
实现TCP转发从而实现内网穿透,配置是通过web界面进行的,相比于wireguard来说实在是简单太多了。

前提条件

  • 一台有公网IP的服务器,如阿里云、腾讯云等云服务,用于安装NPS服务端

NPS服务端安装

我这用用的是docker安装,所有服务器上要安装好docker和docker-compose,使用以下的docker-compose.yaml文件安装即可

version: "3"
services:
  minio:
    privileged: true
    image: ffdfgdfg/nps:latest
    container_name: nps
    restart: always
    network_mode: "host"
    volumes:
      - /home/nps/conf:/conf

到NPS的github官网下载conf目录,复制到/home/nps/conf目录,然后打开nps.conf文件,根据你的实际情况修改以下几个参数,其他默认即可

http_proxy_port=83 #看情况修改
https_proxy_port=9443 #看情况修改
bridge_port=8024 #看情况修改
web_username=xxx #看情况修改,如果不改,默认是admin,建议修改
web_password=xxx #看情况修改,如果不改,默认是123,建议修改
web_port = 9080 #看情况修改

启动容器,如果一切正常,通过浏览器访问http://服务器IP:web_port即可进入NPS管理后台。

新建一个客户端

进入NPS控制台,点客户端->新增客户端添加一个客户端,一般只要输入备注,点新增即可,其他都不用填写。如下图
img.png
添加好之后,点击客户端前面的+号,可以看到如下的内容,其中有客户端启动的命令,该命令在运行客户端时候会用到。
img_1.png

安装客户端

在内网的某一台主机上安装NPS客户端,同样通过docker-compose安装

version: "3"
services:
  minio:
    privileged: true
    image: ffdfgdfg/npc:latest
    container_name: nps_client
    restart: always
    network_mode: "host"
    command: -server=www.xxx.com:8024 -vkey=xxx -type=tcp

这里的command就是上文提到的客户端启动命令,复制过来即可。然后启动客户端。

window客户端安装

下载客户端,进入文件目录,运行以下命令安装window服务即可

npc install -config=config file path -log_level=0

配置TCP转发

客户端如果能正常连接,我们会在客户端状态栏看到客户端的状态为"在线"
img_2.png
点击"隧道",新增一条TCP隧道,如下图,我们通过服务器的8022端口访问内网的192.168.7.23的22端口,从而实现ssh连接。
img_3.png
大功告成,其他更多内容大家自己去研究,例如域名转发等,对微信小程序的本地开发测试是很有帮助的。

建立私密连接

上文中通过TCP转发方式实现ssh连接时,必须在服务器的安全组中另外添加8022端口用于ssh访问,这样比较繁琐,也增加了风险,所以我们
可以采用建立私密连接的方式进行连接。私密连接无需占用多余的端口、安全性要求较高可以防止其他人连接的tcp服务,例如ssh。

使用步骤

在刚才创建的客户端中添加一条私密代理,并设置唯一密钥secrettest和内网目标10.1.50.2:22

在需要连接ssh的机器上以执行命令

./npc -server=server_ip:8024 -vkey=vkey -type=tcp -password=secrettest -local_type=secret
如需指定本地端口可加参数-local_port=xx,默认为2000

注意: password为web管理上添加的唯一密钥,具体命令可查看web管理上的命令提示

假设10.1.50.2用户名为root,现在执行ssh -p 2000 root@127.0.0.1即可通过ssh访问该主机了。

使用socket5代理

  • tcp转发对于ssh访问等场景是可以的,但是如果想像VPN一样便捷的访问内网设备或者资源,最好就用socket5代理了。
    进入客户端列表,选择局域网所在的客户端,点击"隧道",新增一个socket5隧道,如下图所示。
    img_4.png
    然后要在服务端的安全组开放8003端口访问权限。

  • 在访问端安装socket5客户端软件,我用的是Proxifier。这里address是服务端IP,端口即8003,用户名和密码即为nps客户端中设置的密码。
    img_5.png
    启动socket5代理,就可以轻轻松松访问内网的所有资源了。

0

评论区