从2017开始折腾内网穿透到现在,根据我的使用场景,突然失联比降速更令人绝望。所以使用的内网穿透工具都是中心服务器转发类型的,比如nps。大流量场景才用p2p模式的内网穿透工具,比如zerotier和tailscale这类。

去年电信开始回收家宽的免费公网ipv4,如果要公网ipv4就需要花钱租用,100/月。非常没有性价比,100一个月只能租用一个动态公网ipv4。于是又花400租了一年30mbps带宽的4核8g轻量云,加上6mbps的腾讯轻量云,手上有两台服务器。我在这两个服务器都安装了nps服务端,就算一台服务器出问题了,我还可以通过另外一台服务器进行穿透。

内网中有一个openwrt,其中的npc插件只允许连接一个服务器。本来想使用docker的方式运行多个npc连接多个服务器的。但是这个版本openwrt年代久远,没有集成docker插件自行安装又缺少部分内核模块,本身也配置了很多为内网穿透和远程组网的转发规则迁移太复杂。

那只能手动让npc客户端自己后台运行了!

一般情况下,linux终端运行的程序会在终端关闭后也会被关闭。这个时候就可以通过supervisor这个工具来实现,开机自动启动,后台运行等功能

supervisor这个工具是使用python3写的,所以需要给openwrt安装python3和python3-pip。

先用下面的命令安装python3和python3-pip。

opkg update

opkg install curl

opkg install python3

然后用下面的命令安装supervisor

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py

pip install supervisor

用下面的命令配置supervisor配置文件

mkdir -p /etc/supervisor/conf.d

cd /etc/supervisor/

/usr/bin/echo_supervisord_conf > ./supervisord.conf

找到下面的选项并修改,如果配置语句前面面有“;”需要删除已解除忽略。

#如果为true,则从前台启动

nodaemon=true

#配置外部文件加载路径

[include]

files = /etc/supervisor/conf.d/*.conf

新建一个服务,使得supervisor可以跟随openwrt系统启动。

vi /etc/init.d/supervisord

复制下面的内容

#!/bin/sh /etc/rc.common

# Start/stop/restart supervisor in OpenWrt.

START=91

STOP=15

USE_proCD=1

BINLOADER_BIN="/usr/bin/supervisord"

start_service() {

procd_open_instance

procd_set_param respawn

procd_set_param command "$BINLOADER_BIN" -c /etc/supervisor/supervisord.conf

procd_set_param stdout 1

procd_set_param stderr 1

procd_close_instance

}

stop_service() {

procd_kill "$BINLOADER_BIN"

}

restart() {

stop

start

}

使用下面的命令配置自启动并启动supervisord。

chmod +x /etc/init.d/supervisord

/etc/init.d/supervisord enable

/etc/init.d/supervisord start

编辑 supervisor 配置文件让npc后台运行,下面是supervisor 配置文件的简单模版,可以配置多个

program在同一个配置文件中。

[program:npcsz-01]

##配置工作目录为/root/npc,这是我存储npc程序的地方

directory=/root/npc

##npc启动命令和参数

command=/root/npc/npc -server=1.1.1.1:8024 -vkey=1234456780

##自动启动

autostart=true

autorestart=true

##日志

stderr_logfile=/var/log/npcsz-01.log

stdout_logfile=/var/log/npcsz-01.log

使用下面的命令让supervisor更新配置

supervisorctl update

使用下面的命令查看supervisor工作状态

supervisorctl status

可以看到npc客户端已经启动

告别内网穿透突然失联——使用supervisor运行多个nps客户端

登录nps后台可以看到新客户端已经上线

告别内网穿透突然失联——使用supervisor运行多个nps客户端

下面是supervisor的常用操作命令

输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面

help # 查看帮助

status # 查看程序状态

stop program_name # 关闭 指定的程序

start program_name # 启动 指定的程序

restart program_name # 重启 指定的程序

tail -f program_name # 查看 该程序的日志

update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)

也可以直接通过 shell 命令操作:

supervisorctl status

supervisorctl update

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。