Skip to content

sigcn/pg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b3dabbf ยท Dec 12, 2024
Dec 12, 2024
Sep 27, 2024
Dec 12, 2024
Nov 25, 2024
Nov 30, 2024
Aug 3, 2024
Jul 20, 2024
Dec 12, 2024
Nov 30, 2024
Sep 27, 2024
Sep 27, 2024
Jan 27, 2024
Nov 30, 2024
Mar 27, 2024
Dec 12, 2024
Jan 18, 2024
Sep 27, 2024
Nov 30, 2024
Nov 30, 2024
Dec 12, 2024
Dec 12, 2024

Repository files navigation

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

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

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

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

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.