Skip to content

Instantly share code, notes, and snippets.

@vimagick
Last active July 11, 2026 04:12
Show Gist options
  • Select an option

  • Save vimagick/d467ca543fcffb8fda4100fb073d5e4e to your computer and use it in GitHub Desktop.

Select an option

Save vimagick/d467ca543fcffb8fda4100fb073d5e4e to your computer and use it in GitHub Desktop.
Run multiple sslocal http proxy instances on openwrt

Extract binary from ipk

URL=$(curl -s https://api.github.com/repos/Openwrt-Passwall/openwrt-passwall2/releases/latest | jq -r '.assets[]|select(.name=="passwall_packages_ipk_arm_cortex-a9_vfpv3-d16.zip").browser_download_url')
wget -O bundle.zip $URL
unzip -j bundle.zip '*-sslocal_*.ipk'
tar xzf *-sslocal_*.ipk ./data.tar.gz
tar xzf data.tar.gz ./usr/bin/sslocal --strip-components=3
./sslocal --version

Create service on openwrt

$ ls /etc/shadowsocks-rust/*.json
hk.json
us.json

$ apk update
$ apk add jq
$ apk info -s jq

$ service sslocal start
$ service sslocal enable

$ ubus call service list '{"name": "sslocal"}'

$ netstat -tnlp | grep sslocal
#!/bin/sh /etc/rc.common
START=99
STOP=99
USE_PROCD=1
PROG=/usr/bin/sslocal
NAME=sslocal
start_service() {
for config in /etc/shadowsocks-rust/*.json; do
instance=$(basename $config .json)
local_http_address=$(jq -r .local_http_address $config)
local_http_port=$(jq -r .local_http_port $config)
procd_open_instance "${NAME}_${instance}"
procd_set_param command $PROG
procd_append_param command --config $config --protocol http --local-addr ${local_http_address}:${local_http_port}
procd_set_param respawn 3600 5 0
procd_set_param stderr 1
procd_close_instance
done
}
{
"server": "x.x.x.x",
"server_port": 8388,
"method": "chacha20-ietf-poly1305",
"password": "******",
"local_address": "0.0.0.0",
"local_port": 1080,
"local_http_address": "0.0.0.0",
"local_http_port": 8080,
"fast_open": true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment