Written with bash
& node.js
for GNOS.
- Configurable profiles
- Linux
netns
isolation - Scrap VPN Gate using
phantomjs
- SYN Scan to check servers latency
- Filtering & Selection using
jq
- Supports both
pkexec
&sudo
- Softether SSL-VPN protocol
- HTTP & SOCKS4 proxy support
- Managed DHCP:
dhclient
- Automatic dependency installation (Ubuntu)
NAME: vpngate
DESC: VPN Gate client for SoftEther VPN-SSL protocol
AUTH: [email protected]
DEPS: SoftEther vpnclient + vpncmd
DEPS: policykit-1 isc-dhcp-client npm jq
FEAT:
polkit integration
GUI server selector
scapping to JSON cache
jq filtering & selection
auto $http_proxy support
HTTP & SOCKS4 proxy support
netns (Linux network namespaces)
user profiles with command execution
USAGE:
vpngate [ OPTS ... ] [ PROFILE_NAME | PROFILE_PATH [ COMMAND [ ARGS ... ] ] ]
vpngate -d PROFILE_NAME
vpngate -l
vpngate -h
ARGS:
PROFILE_NAME Profile name, stored in ~/.config/vpngate/
PROFILE_PATH Profile path
COMMAND Command to execute, or "null" to keep connected
ARGS Command arguments
OPTS:
-d Disconnect profile
-l List active profiles
-h Show help
-r Force reconnect
-u Force cache update
-p HTTP_PROXY HTTP proxy: [http://][user[:password]@]host[:port]
-s SOCKS_PROXY SOCKS4 proxy: [socks://][user[:password]@]host[:port]
-g GUI server selector
-v Verbose output
PROFILE-FORMAT: BASH
cmd Command to execute
proxy HTTP proxy
socks SOCKS4 proxy
filter [VPN Gate] Server-list filter, jq select syntax
select [VPN Gate] Server-list sorter, jq sort_by syntax
connect [VPN] Private server, see args: vpnssl-connect -h
Profiles are stored in ~/.config/vpngate
.
Profiles files are simple bash
declarations.
Variable | Default | Description |
---|---|---|
filter |
'true' |
jq select() expression |
select |
'."SYN scan (ms)"' |
jq sort_by() expression |
mirror |
"" |
Alternative Scrapping url |
connect
replaces Scrapping/Filtering/Scanning/Selecting.
Variable | Default | Description |
---|---|---|
connect |
'' |
Connection string |
IP_ADDR TCP_PORT [ USER_NAME PASSWORD [HUB_NAME] ]
Default USER_NAME
is vpn
with empty PASSWORD
, default HUB_NAME
is vpngate
.
Examples:
# Private server
connect='1.1.1.1 443 my_username "s3cr3t" HUB'
# Forced VPN Gate server: NO credentials required
connect='2.2.2.2 443'
Variable | Default | Description |
---|---|---|
cmd |
'bash' |
Command to execute, or "null" to keep connected |
proxy |
'' |
HTTP proxy |
socks |
'' |
SOCKS proxy |
Examples:
cmd='curl -sSL https://wtfismyip.com/text'
cmd='firejail firefox'
Content is eval
-ed so you can write complex commands but beware of security implications:
cmd='true ; echo "Executed as $(id -u) out of isolation [$(ip netns identify $$)]" '
Also have fun with quoting:
cmd="bash -c 'echo \"quoted text\"'"
cmd='bash -c '\''echo "quoted text"'\'
Variable | Default | Description |
---|---|---|
cacheSeconds |
7200 |
Scrapping cache validity in seconds |
verbose |
"" |
Set to -v to force verbose output |
reconnect |
"" |
Set to -r to force reconnection |
update |
"" |
Set to -u to disable cache |
gui |
"" |
Set to -g to enable GUI server selector |
mirror |
"" |
Scrapping url, read https://bunkerbustervpn.com/vpngate.html |
- Softether
vpnclient
, integrated withsystemd
. - Softether
vpncmd
, declared inPATH
. - Node.js (lts/10), managed by
nvm
. - OPTIONAL,
yad
for GUI
Put files somewhere, for example /opt/vpngate
.
Tested on latest Ubuntu with NPM configured to run npm install -g
without sudo.
This will call pkexec
to gain privileges and pull missing dependencies:
vpngate -i
sudo apt-get install npm jq isc-dhcp-client yad
sudo npm install -g phantomjs casperjs
sudo mkdir /opt/vpngate/node_modules
sudo chown $(id -u) /opt/vpngate/node_modules
npm install ip local-ipv4-address raw-socket
# sudo chown -hR root:root /opt/vpngate/node_modules
To use sudo instead of default automatic pkexec use this alias:
alias vpngate="sudo --set-home NVM_BIN='$NVM_BIN' /opt/vpngate/vpngate -v"
Set $SUDO_UID
to empty to run command as root, not recommended.
alias vpngate="sudo --set-home SUDO_UID= NVM_BIN="$NVM_BIN" /opt/vpngate/vpngate -v"
VPN Gate Scrapping cache is kept at
~/.cache/vpngate/cache.json
VPN Gate Profile cache at
~/.cache/vpngate/PROFILE_NAME/vpngate_{filtered,scanned,sorted,selected}.json
DHCP caches are
~/.cache/vpngate/PROFILE_NAME/dhclient{-script,.leases}
JSON array of objects, named data
, attributes:
"Country code" str notnull empty!
"DDNS hostname" str null!
"IP address" str notnull notempty
"ISP hostname" str null!
"Cumulative users" int null!
"Cumulative transfers (GB)" int null!
"Operator" str null!
"Ping (ms)" int null!
"Score" int null!
"SSL-VPN TCP port" int notnull
"SYN scan (ms)" int notnull
"Throughput (Mbps)" int null!
"Uptime (min)" int null!
"VPN sessions" int null!