從2017開始折騰內(nèi)網(wǎng)穿透到現(xiàn)在,根據(jù)我的使用場(chǎng)景,突然失聯(lián)比降速更令人絕望。所以使用的內(nèi)網(wǎng)穿透工具都是中心服務(wù)器轉(zhuǎn)發(fā)類型的,比如nps。大流量場(chǎng)景才用p2p模式的內(nèi)網(wǎng)穿透工具,比如zerotier和tailscale這類。

去年電信開始回收家寬的免費(fèi)公網(wǎng)ipv4,如果要公網(wǎng)ipv4就需要花錢租用,100/月。非常沒有性價(jià)比,100一個(gè)月只能租用一個(gè)動(dòng)態(tài)公網(wǎng)ipv4。于是又花400租了一年30mbps帶寬的4核8g輕量云,加上6mbps的騰訊輕量云,手上有兩臺(tái)服務(wù)器。我在這兩個(gè)服務(wù)器都安裝了nps服務(wù)端,就算一臺(tái)服務(wù)器出問題了,我還可以通過另外一臺(tái)服務(wù)器進(jìn)行穿透。

內(nèi)網(wǎng)中有一個(gè)openwrt,其中的npc插件只允許連接一個(gè)服務(wù)器。本來想使用docker的方式運(yùn)行多個(gè)npc連接多個(gè)服務(wù)器的。但是這個(gè)版本openwrt年代久遠(yuǎn),沒有集成docker插件自行安裝又缺少部分內(nèi)核模塊,本身也配置了很多為內(nèi)網(wǎng)穿透和遠(yuǎn)程組網(wǎng)的轉(zhuǎn)發(fā)規(guī)則遷移太復(fù)雜。

那只能手動(dòng)讓npc客戶端自己后臺(tái)運(yùn)行了!

一般情況下,linux終端運(yùn)行的程序會(huì)在終端關(guān)閉后也會(huì)被關(guān)閉。這個(gè)時(shí)候就可以通過supervisor這個(gè)工具來實(shí)現(xiàn),開機(jī)自動(dòng)啟動(dòng),后臺(tái)運(yùn)行等功能。

supervisor這個(gè)工具是使用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

找到下面的選項(xiàng)并修改,如果配置語句前面面有“;”需要?jiǎng)h除已解除忽略。

#如果為true,則從前臺(tái)啟動(dòng)

nodaemon=true

#配置外部文件加載路徑

[include]

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

新建一個(gè)服務(wù),使得supervisor可以跟隨openwrt系統(tǒng)啟動(dòng)。

vi /etc/init.d/supervisord

復(fù)制下面的內(nèi)容

#!/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

}

使用下面的命令配置自啟動(dòng)并啟動(dòng)supervisord。

chmod +x /etc/init.d/supervisord

/etc/init.d/supervisord enable

/etc/init.d/supervisord start

編輯 supervisor 配置文件讓npc后臺(tái)運(yùn)行,下面是supervisor 配置文件的簡單模版,可以配置多個(gè)

program在同一個(gè)配置文件中。

[program:npcsz-01]

##配置工作目錄為/root/npc,這是我存儲(chǔ)npc程序的地方

directory=/root/npc

##npc啟動(dòng)命令和參數(shù)

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

##自動(dòng)啟動(dòng)

autostart=true

autorestart=true

##日志

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

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

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

supervisorctl update

使用下面的命令查看supervisor工作狀態(tài)

supervisorctl status

可以看到npc客戶端已經(jīng)啟動(dòng)

告別內(nèi)網(wǎng)穿透突然失聯(lián)——使用supervisor運(yùn)行多個(gè)nps客戶端

登錄nps后臺(tái)可以看到新客戶端已經(jīng)上線

告別內(nèi)網(wǎng)穿透突然失聯(lián)——使用supervisor運(yùn)行多個(gè)nps客戶端

下面是supervisor的常用操作命令

輸入命令 supervisorctl 進(jìn)入 supervisorctl 的 shell 交互界面

help # 查看幫助

status # 查看程序狀態(tài)

stop program_name # 關(guān)閉 指定的程序

start program_name # 啟動(dòng) 指定的程序

restart program_name # 重啟 指定的程序

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

update # 重啟配置文件修改過的程序(修改了配置,通過這個(gè)命令加載新的配置)

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

supervisorctl status

supervisorctl update

,

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。