從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)
登錄nps后臺(tái)可以看到新客戶端已經(jīng)上線
下面是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
,