mirror of
https://github.com/sigcn/pg.git
synced 2025-09-26 22:05:50 +08:00
0e9b0a34b8b232f86afae38a12c2c209f35c423f
PeerGuard
Another p2p network library in Go. Committed to direct communication between devices.
[简体中文]
Features
- Elegantly simple architecture (pgcli & pgmap & OpenID Connect)
- NAT traversal with high success rate (STUN & UPnP & PortScan & BirthdayParadox)
- Full support for IPv4/IPv6 dual stack
- Easy-to-use library (net.PacketConn)
- Transport layer security (curve25519 & chacha20poly1305 for end-to-end encryption)
- RDT protocol for reliable data transfer
- Cross-platform compatibility (linux/windows/macOS/iOS/android)
Get Started
Note
Time synchronization between nodes is crucial; the difference should not exceed 5 seconds
p2p vpn
# node1
pgcli vpn -s wss://synf.in/pg -4 100.64.0.1/24
# node2
pgcli vpn -s wss://synf.in/pg -4 100.64.0.2/24
Advanced
Deploy the peermap server
1. run the pgmap daemon
$ pgmap -l 127.0.0.1:9987 --secret-key 5172554832d76672d1959a5ac63c5ab9 \
--stun stun.miwifi.com:3478 --stun stunserver.stunprotocol.org:3478
2. wrap pgmap as an https server
$ caddy reverse-proxy --from https://synf.in/pg --to 127.0.0.1:9987
p2p file sharing
# share
$ pgcli share -s wss://synf.in/pg ~/my-show.pptx
ShareURL: pg://DJX2csRurJ3DvKeh63JebVHFDqVhnFjckdVhToAAiPYf/0/my-show.pptx
# download
$ pgcli download -s wss://synf.in/pg pg://DJX2csRurJ3DvKeh63JebVHFDqVhnFjckdVhToAAiPYf/0/my-show.pptx
Shortcut pgvpn
ln -sf /usr/sbin/pgcli /usr/sbin/pgvpn
You can now use pgvpn
instead of pgcli vpn
.
Use IPC to query the found peers.
pgvpn --peers
Rootless mode VPN
pgvpn -s wss://synf.in/pg -4 100.64.0.1/24 --proxy-listen 127.0.0.1:4090 --forward tcp://127.0.0.1:80 --forward udp://8.8.8.8:53
Uses pre-shared secret file instead of OIDC auth
first
$ export PG_SECRET_KEY=5172554832d76672d1959a5ac63c5ab9
$ export PG_SERVER=wss://synf.in/pg
$ pgcli admin secret --network "<email>" --duration 24h > psns.json
then
sudo pgcli vpn -s wss://synf.in/pg -4 100.64.0.1/24 -f psns.json
License
GNU General Public License v3.0
Contributing
Contributions welcome! Have an improvement? Submit a pull request.
Note
I also maintain a closed-source version, and contributions to the open-source project may be included in the closed-source version.
Languages
Go
93.1%
Vue
3.1%
JavaScript
1.8%
CSS
0.9%
Makefile
0.9%
Other
0.2%