2022-09-24建站0
请注意,本文编写于 246 天前,最后修改于 243 天前,其中某些信息可能已经过时。

目录

如何选择客户端?
安装 Linux 客户端
先别着急安装,需要先行配置客户端参数

看完本文会得到什么

  1. 一台家里的 Linux 的服务器连接到公网的 Linux nps 服务端
  2. 一台家用的 Windows 电脑连接到公网 Linux nps 服务端

如何选择客户端?

一般来说,有内网穿透需求的小伙伴无非是如下几类需求:

  1. 文件、照片上传到家里的电脑上实现一个常规的 nas 需求(什么是 nas? )
  2. 家用 windows 可以通过外网直接远程连接进行操作
  3. 运行一个小型网站或者博客,或者程序员把家里的空闲的机器当作开发环境,便于自己在外也能访问

针对以上第一类需求给出如下选择:

家用 nas 请出门左转搜索 群晖,这里是群晖京东自营旗舰店,不要自建内网穿越,毫无意义。

针对第二类需求,显然你需要的是 windows 客户端

本文主要介绍的如何启动 Linux 客户端和 nps 服务端建立通讯连接的。

安装 Linux 客户端

首先推荐查看官方文档关于客户端这一章节,直达链接nps 安装,抄作业的跟着我走也行。

Windows

强烈推荐 Windows 客户端查看官方文档,Windows 的安装超级简单,就下载一个 exe 文件就可以了,客户端的文件配置跟 Linux 一样本文后面会讲解。

本文以 Ubuntu 为范例,其他 Linux 版本如果有操作不顺的,请联系我。

假设你拥有一台 Ubuntu 的机器(不管是云服务器还是你自己的电脑装有 Ubuntu 都可以

第一步通过 ssh 登录进入

shouyicheng 是我 Ubuntu 机器的用户名,而 5.6.8.9 是我 Ubuntu 机器的 IP,注意这个 IP 可以是你云服务器的公网 IP 或者你家里的 Ubuntu 电脑的内网 IP,只要你当前使用的电脑能登录进去就可以,但是如果你就是直接在家真机实体操作你的 Ubuntu,可以省去 ssh 登录这一步

首先更新一下仓库

$ apt update #如果你不是 root 用户,请执行 sudo apt update

然后安装如下几个非常重要的工具

$ apt install -y curl wget telnet # 如果你不是 root 用户,请执行 sudo apt apt install -y curl wget telnet

然后随便进入一个文件夹,推荐进入当前用户的文件夹目录

$ cd /home/shouyicheng/ # shouyicheng 是我的 ssh 登录用户名,请你换成你的

紧接着下载 Linux 对应的客户端,我这里挑选的是 linux_amd64_client.tar.gz,因为我自己的 Ubuntu 实体机是 x86 架构的,如果你的 Linux 机器是运行在 arm 架构上的,请用如下方式下载对应的版本。

$ wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
# 或者也可以用 curl 进行下载 curl https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz --output linux_amd64_client.tar.gz

下载之后,进行解压

$ tar zxvf linux_amd64_client.tar.gz

先别着急安装,需要先行配置客户端参数

安装好了之后,会在当前目录创建一个默认的 conf 文件夹,我们要去找到配置文件进行修改

$ cd ./conf

进入文件夹之后,查看当前文件夹包含的内容

$ ls
# 会显示 2 个文件
# multi_account.conf  npc.conf

非高端玩家不需要在乎 multi_account.conf ,我们查看 npc.conf

$ cat npc.conf

会显示如下内容

[common]
server_addr=127.0.0.1:8024
conn_type=tcp
vkey=123
auto_reconnection=true
max_conn=1000
flow_limit=1000
rate_limit=1000
basic_username=11
basic_password=3
web_username=user
web_password=1234
crypt=true
compress=true
#pprof_addr=0.0.0.0:9999
disconnect_timeout=60

[health_check_test1]
health_check_timeout=1
health_check_max_failed=3
health_check_interval=1
health_http_url=/
health_check_type=http
health_check_target=127.0.0.1:8083,127.0.0.1:8082

[health_check_test2]
health_check_timeout=1
health_check_max_failed=3
health_check_interval=1
health_check_type=tcp
health_check_target=127.0.0.1:8083,127.0.0.1:8082

[web]
host=c.o.com
target_addr=127.0.0.1:8083,127.0.0.1:8082

[tcp]
mode=tcp
target_addr=127.0.0.1:8080
server_port=10000

[socks5]
mode=socks5
server_port=19009
multi_account=multi_account.conf

[file]
mode=file
server_port=19008
local_path=/Users/liuhe/Downloads
strip_pre=/web/

[http]
mode=httpProxy
server_port=19004

[udp]
mode=udp
server_port=12253
target_addr=114.114.114.114:53

[ssh_secret]
mode=secret
password=ssh2
target_addr=123.206.77.88:22

[ssh_p2p]
mode=p2p
password=ssh3

[secret_ssh]
local_port=2001
password=ssh2

[p2p_ssh]
local_port=2002
password=ssh3
target_addr=123.206.77.88:22

至此,客户端的安装已经完成,现在要回到服务端去创建一个客户端。

打开你的服务端管理的界面:

http://1.2.3.4:8080

(请忽略我自己的配置,因为我已经创建好了一个客户端)

image.png

你需要做的是点击 -> 新建

image.png

这里按照如下信息填写:

  • 备注: 随便取个标记名字,只要你知道它是谁就可以
  • 唯一验证密钥: 这个就是客户端需要匹配的 vkey,很重要,如果你不填写它会帮你随机生成一个

其余均可留空,它默认会帮你生成。

创建完成之后你会看到跟我界面类似的列表

image.png

然后回到你的客户端 Linux,去修改 npc.conf

找到刚才那么一长串的配置文件,你只需要修改的只有如下几个参数

server_addr=127.0.0.1:8024
vkey=123

这个 server_addr 的值就是你在 nps 从零启动 - 1. 服务端 配置的服务器的地址,注意这里需要加上 nps 服务端的桥接转发端口号 bridge_port,假设你没有修改过这个参数的话,并且你的服务端 IP 地址是 1.2.3.4,在客户端你的 server_addr 就应该是 1.2.3.4:8024

而这个 vkey 就是你在服务端管理界面上刚才创建的客户端的 唯一验证密钥,假设你的唯一验证密钥是 abcdefghihjklmn,那么你只需要修改成如下内容即可,把除了以下几行之外的所有配置,全都删除,我们刚刚开始学会使用某一项工具的时候,先不要被过多的参数打扰,只要是暂时用不上的全都删除。

server_addr=1.2.3.4:8024
vkey=abcdefghihjklmn
conn_type=tcp
auto_reconnection=true

然后启动客户端向服务端发出建立连接请求,测试一下网络连通性和密钥是否匹配:

$ ./npc  

你会看到如下内容:
(忽略我的服务器地址就是我当前的域名,你在这里看见的就是你自己的服务端的 IP 地址,例如 1.2.3.4:8024

2022/09/25 07:57:11.986 [I] [npc.go:231]  the version of client is 0.26.10, the core version of client is 0.26.0
2022/09/25 07:57:11.987 [I] [control.go:97]  Loading configuration file conf/npc.conf successfully
2022/09/25 07:57:12.191 [N] [control.go:174]  web access login username:user password:abcdefghihjklmn
2022/09/25 07:57:12.337 [I] [client.go:72]  Successful connection with server 1.2.3.4:8024

恭喜你,已经实现了把你当前的客户端暴露在外网,可以让外网进行访问了。但是目前你本地机器上什么好玩的服务都没有……所以 ->

桥豆麻袋

这里还需要额外的操作才能让你的机器开机就自动连接到服务端,这样省略你每次开机要手动执行 npc start 的步骤

还是在当前文件夹下执行:

$ sudo ./npc install -config=/root/npc/conf/npc.conf 
# 这里必须是绝对路径并且是指定到具体的 npc.conf 文件,不是指定 conf 文件夹,一定要看清楚

然后启动并且设置它开机自动启动:

$ sudo npc start

为了确保正确运行,可以执行如下来查看状态

$ npc status

如果遇到意外情况即使输入

shell
$ sudo npc stop
$ sudo npc restart
$ sudp npc uninstall

出现意外情况

2022/09/27 05:11:56.077 [E] [npc.go:139]  Valid actions: ["start" "stop" "restart" "install" "uninstall"]
Failed to stop nps内网穿透客户端: exit status 5
[email protected]:~$ sudo npc uninstall
2022/09/27 05:12:03.368 [E] [npc.go:160]  Valid actions: ["start" "stop" "restart" "install" "uninstall"]
Failed to uninstall nps内网穿透客户端: exit status 1
[email protected]:~$ sudo npc restart
2022/09/27 05:12:13.159 [E] [npc.go:139]  Valid actions: ["start" "stop" "restart" "install" "uninstall"]
Failed to restart nps内网穿透客户端: exit status 5

我们可以采取强制措施删除它的可执行文件即可,再重新执行安装和启动的步骤。

$ sudo rm -f /usr/bin/npc
$ sudo rm -f /usr/bin/npc-update

紧接着我们就该考虑,如何把自己电脑上可以共享的服务和资源让别人也享受一下,我能想到的最好的就是博客了,正如你现在所看见的博客一样,它就是我通过 nps 技术将我自己家里的服务器建立的博客分享出来的,接下来我就要来手把手还原我是如何建立当前这个博客小站点的。😋