【折腾服务器 4】ESXi 中 Ubuntu 安装 NPS 客户端 ( NPC )

Catch Up

书接上回,上一章中,群晖已经能定期给 Windows 物理机服务器做备份了,但是依然无法从外网访问服务器上的内容,本篇讲述如何在 Ubuntu 中安装 NPS 客户端,也就是所谓的 NPC ( Client )。

Chapter 1 准备一个 Ubuntu 系统

在 ESXi 中新建一个虚拟机,我将全部的核心都分配出去了,然后初期分配了 2GB 内存,为的是安装的时候能快一些。然后使用 BIOS 启动,这个虚拟机主要是用于 NPS 客户端服务的,不干别的,因此储存空间只分配了 16GB。然后网口也是分一个独立使用的即可。

系统选择的是 ubuntu-22.04-live-server-amd64.iso 这个镜像,安装的时候仅仅勾选 Open SSH 和一些基础组件,其他的不需要,装了也是占用资源。安装过程中提示镜像源,我更换的是 阿里云的镜像源,地址如下:

http://mirrors.aliyun.com/ubuntu/

安装的时候只使用命令行界面就行,因为根本用不着图像化界面。

镜像在创建的时候以虚拟光驱的形式挂在,第一次安装完成之后,会要求重启,这个时候进入虚拟机设置页面将这个虚拟光驱断开连接,然后就和其他的安装过程一样。

不明白的可以看这篇博客的前半段 Esxi 6.7部署配置Ubuntu-22.04-live-server_Rocky-Lad的博客-CSDN博客_esxi安装ubuntu,博主讲的非常清晰,虽然软件版本不一样但是不影响安装过程。

Chapter 2 安装 NPS 客户端 ( NPC )

我因为已经安装过 NPS 的服务端了,这里就不再展示了,网上有许多的 NPS 服务端的安装教程,但是 NPS 的客户端特别是针对于 Ubuntu 的客户端安装比较少,这里着重展示这一部分。

Step 1 下载配置 Linux 版本的 NPS 客户端 ( NPC )

我的服务端是 0.26.10 版本,因此我是用下面的命令下载这一版本

wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz

如果你使用的是别的版本,请到 Github 中寻找对应版本,Github 仓库地址在此 Releases · ehang-io/nps · GitHub

Step 2 创建启动脚本

解压后,我直接将解压后的全部文件放在了 home/{username}/ 这个目录,其中的 username 是你的用户名。然后在这个目录创建 startnpc.sh 这个文件。并将下面的内容复制进去,然后保存。

#!/bin/sh
cd /home/{username}/
echo '{Your Password}'|sudo -S nohup ./npc -server={Server Addr} -vkey={VKEY} -type=tcp >file.out 2>&1 &
  • {username} 是你的用户名,具体第二行也就是 cd 命令后面的路径,需要和你的解压路径一致,也就是进入这个路径之后,可以看到你解压后的全部文件。
  • {Your Password} 是你的用户密码,最理想的情况下,root 用户和你创建的用户的密码是一致的。
  • {Server Addr} 是你的 NPS 服务端的服务器的 IP 地址及端口号,格式如下: xxx.xxx.xxx.xxx:xxxx
  • {VKEY} 是 NPS 服务端生成的一个密钥。

Step 3 创建自启动脚本

输入下面的指令,进入 /etc/systemd/system 目录,网上也有说前往 /lib/systemd/system 路径的,我试过,没成功,估计是是给 Ubuntu 20.04 使用的,在 22.04 版本失效了。这里需要注意系统版本,如果不成就去另外一个目录试试。

cd /etc/systemd/system/

用管理员权限创建 npc.service,输入下面两个脚本中的一个,我忘记哪个有效了,都试试。

shell 1

[Unit]
Description=一款轻量级、功能强大的内网穿透代理服务器。支持tcp、udp流量转发,支持内网http代理、内网socks5代理,同时支持snappy压缩、站点保护、加密传输、多路复用、header修改等。支持web图形化管理,集成多用户模式。
ConditionFileIsExecutable=/home/{username}/npc

Requires=network.target
After=network-online.target syslog.target
[Service]
LimitNOFILE=65536
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/home/{username}/startnpc.sh "-debug=false"

Restart=always
RestartSec=120
[Install]
WantedBy=multi-user.target
  • ConditionFileIsExecutable 后面填写解压后文件里的 npc 的文件地址
  • ExecStart 后面填写的是 NPC 启动脚本的文件地址

shell 2

[Unit]
Description=npc
After=network.target
<200b>
[Service]
Type=forking
ExecStart=/home/{username}/startnpc.sh
Restart=always
RestartSec=5
PrivateTmp=true
<200b>
[Install]
WantedBy=multi-user.target
  • ExecStart 后面填写的是 NPC 启动脚本的文件地址

创建完成之后,保存,然后输入下面的命令

sudo systemctl daemon-reload 

接着设置开机自启动

sudo systemctl enable npc

设置开启服务

sudo systemctl start npc

查看服务状态

sudo systemctl status npc

Chapter 3 后续设置

上述操作完成之后,就可以重启虚拟机进行测试了。查看服务能否正常自启动,上面的两个代码总有一个能用,具体哪个生效我给忘了,实在抱歉。

之后,都设置完成之后,按照流程关闭虚拟机,然后更改资源分配设置,如图:

image-20221226002338220

image-20221226002352059

我测试过,这个是 Ubuntu 22.04 的最低能启动的配置,因为这个虚拟机只专注于 NPC 客户端服务,因此这个需求足够,我挂在公网的服务器的配置甚至比这个还要低 =)无非就是开机的时候慢一些而已。

然后把这个虚拟机也添加到开机自启动里,这样服务器开始这个虚拟机也就开始工作了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此示例 Microsoft 下载心 Npclnt.exe 说明命名的管道客户端界面,在 Windows 的工作组 (WFW)。 此示例提供了一个 WFW Win32 SDK 命名的管道示例 (NPSERVER) 的命名管道客户端。此示例打开、 读取,并写入 NPSERVER 应用程序创建的命名管道。要从服务器的命名管道,以避免阻塞 WFW 下执行异步读取使用 DosReadAsyncNmPipe API。 注: 在此示例都有两个问题。 NP 回调应在一个固定的代码段在 DLL 。 传递到 DosReadAsyncNmPipe 和 DosWriteAsyncNmPipe 的内存固定和 pagelocked。 更多信息以下文件是可从 Microsoft 下载心下载: Download Npclnt.exe now (http://download.microsoft.com...以下文件是可从 Microsoft 下载心下载: 收起这个图片展开这个图片Download Npclnt.exe now (http://download.microsoft.com/download/platformsdk/npclnt/3.1/w31/en-us/npclnt.exe) 有关如何下载 Microsoft 支持文件的其他信息请单击下面的文章编号,以查看 Microsoft 知识库相应的文章: 119591 (http://support.microsoft.com/kb/119591/EN-US/ ) 如何从联机服务获得 Microsoft 支持文件 Microsoft 扫描此文件的病毒。Microsoft 使用该文件已过帐的日期上获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器,这有助于防止未经授权的情况下对其进行更改文件上。 使用 DosReadAsyncNmPipe 或 DosWriteAsyncNmPipe 时必须小心。因为这两种 api 提供 WFW 在断时调用的函数指针,只有有限的操作可能被执行回调。WFW SDK 引用声明下列有关回调函数: 通常,回调函数可以设置全局变量,并检查有潜在的错误 pusErrCode 参数指定该变量。但回调函数必须不修改寄存器或调用任何 MS-DOS 系统函数、 BIOS 函数或调用 MS-DOS 和 BIOS 的函数的 C 运行时函数。尽管回调函数可以调用 PostMessage 函数,则它必须不调用 SendMessage 函数。 此外,回调函数必须在应用程序的 *.DEF 文件导出。除了导出,应用程序必须在函数调用 MakeProcInstance 之前调用异步 API。注意还必须采取不以读取时调用 FreeProcInstance 或写操作未完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值