Compare commits
2 Commits
9b4411409d
...
6743714326
| Author | SHA1 | Date | |
|---|---|---|---|
| 6743714326 | |||
| d9021c1000 |
68
README.md
68
README.md
@@ -1,15 +1,81 @@
|
|||||||
## Simple DIY VPN
|
# Simple DIY VPN
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
* Starts automatically on demand and shuts down automatically when not used
|
||||||
|
(Using systemd socket activation)
|
||||||
|
* Works on any VPS or home server with just ssh suppport.
|
||||||
|
Distro/architecture/size does not matter. Only working ssh support required.
|
||||||
|
No other software setup required on the server
|
||||||
|
* Easy to setup multiple different VPNs to different server. No need to change
|
||||||
|
whole system network settings.
|
||||||
|
* Simple interactive cli utility to setup. No need to create/edit config files
|
||||||
|
* Simple bash script with no dependencies - (ssh and systemd are usually
|
||||||
|
preinstalled)
|
||||||
|
* Once setup with browser extension, easy to use for non-technical users - Just
|
||||||
|
right-click and choose a container
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
* Linux system with Systemd and ssh client
|
||||||
|
* Server with ssh support. [ssh keys][3] setup for passwordless login
|
||||||
|
* Browser or any app with SOCKS proxy support. [Librewolf][2] with [Container
|
||||||
|
Proxy][1] extension allows to setup different VPN for each container
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
* Archlinux [AUR][0]
|
* Archlinux [AUR][0]
|
||||||
* Manual install: (run as root)
|
* Manual install: (run as root)
|
||||||
|
|
||||||
```
|
```
|
||||||
make install
|
make install
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
❯ diyvpnctl add
|
||||||
|
Server name [e.g. vps1] [required] : homets
|
||||||
|
Listen address [e.g. 127.0.0.1:9090] [required] : 127.0.0.1:8071
|
||||||
|
Idle Timeout [e.g. 5min] [5min] :
|
||||||
|
Remote server Ip [e.g. 1.2.3.4] [required] : 100.64.0.2
|
||||||
|
Remote server ssh port [e.g. 2222] [22] :
|
||||||
|
Remote server username [e.g. dave] [required] : balki
|
||||||
|
SSH private key [e.g. ~/.ssh/id_ed25519] [required] : ~/.ssh/id_ed25519
|
||||||
|
Diyvpn config for homets added. Edit below configs for further changes
|
||||||
|
==> /home/balki/.config/diyvpn/servers/homets/config.rc <==
|
||||||
|
LISTEN_ADDRESS=127.0.0.1:8071
|
||||||
|
IDLE_TIMEOUT=5min
|
||||||
|
|
||||||
|
==> /home/balki/.config/diyvpn/servers/homets/ssh_config <==
|
||||||
|
Hostname 100.64.0.2
|
||||||
|
Port 22
|
||||||
|
User balki
|
||||||
|
IdentityFile ~/.ssh/id_ed25519
|
||||||
|
|
||||||
|
# vim: set filetype=sshconfig:
|
||||||
|
|
||||||
|
❯ diyvpnctl list
|
||||||
|
config path: /home/balki/.config/diyvpn/servers
|
||||||
|
|
||||||
|
Server ListenAddress
|
||||||
|
can1 127.0.0.1:8072
|
||||||
|
homets 127.0.0.1:8071
|
||||||
|
us1 127.0.0.1:8070
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Internals
|
||||||
|
|
||||||
|
TODO: Explain
|
||||||
|
|
||||||
|
## Future Ideas
|
||||||
|
|
||||||
|
* Automatically fire up a VPS instance in a cloud provider on demand. Since
|
||||||
|
most VPS are charged pre hour, for those using rarely, don't have to pay for
|
||||||
|
entire month. A new VPS every time improves privacy.
|
||||||
|
|
||||||
[0]: https://aur.archlinux.org/packages/diyvpn-git
|
[0]: https://aur.archlinux.org/packages/diyvpn-git
|
||||||
|
[1]: https://github.com/bekh6ex/firefox-container-proxy
|
||||||
|
[2]: https://librewolf.net/
|
||||||
|
[3]: https://wiki.archlinux.org/index.php?title=SSH_keys#Copying_the_public_key_to_the_remote_server
|
||||||
|
|||||||
17
diyvpnctl.sh
17
diyvpnctl.sh
@@ -47,15 +47,14 @@ add() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
list() {
|
list() {
|
||||||
echo "config path: $diyvpn_cfg"
|
printf "config path: %s\n\n" "$diyvpn_cfg"
|
||||||
paste <(
|
cd "$diyvpn_cfg"
|
||||||
echo "servers"
|
|
||||||
cd "$diyvpn_cfg"
|
printf "%-20s %s\n" "Server" "ListenAddress"
|
||||||
basename ./*
|
for s in *; do
|
||||||
) <(
|
printf "%-20s %s\n" "$s" "$(sed -n '/LISTEN/s/.*=\(.*\)/\1/p' "$s"/config.rc)"
|
||||||
echo "ListenAddress"
|
done
|
||||||
sed -n '/LISTEN/s/.*=\(.*\)/\1/p' "$diyvpn_cfg"/*/config.rc
|
|
||||||
) | column -t
|
|
||||||
}
|
}
|
||||||
|
|
||||||
action="${1:-none}"
|
action="${1:-none}"
|
||||||
|
|||||||
Reference in New Issue
Block a user