Go 中的 P2P 网络库。致力于设备🌍之间的直接通信,帖子地址: https://www.v2ex.com/t/1025195
Go to file
rkonfj 90be7dccdd
pgcli/vpn: remove --allowed-ip flag
since `--allowed-ip` is an insecure flag, the VPN now uses the system routing table
2024-07-06 12:30:20 +08:00
cmd pgcli/vpn: remove --allowed-ip flag 2024-07-06 12:30:20 +08:00
connmux connmux: add odd/even seq generator 2024-06-22 20:54:14 +08:00
disco p2p: add Peers func 2024-07-05 20:29:42 +08:00
fileshare pgcli/share: folders are supported 2024-06-29 18:22:51 +08:00
lru disco: detect network changed 2024-03-29 23:03:14 +08:00
p2p p2p: add Peers func 2024-07-05 20:29:42 +08:00
peer peer/peermap: add NewURL func 2024-06-01 17:20:12 +08:00
peermap peermap: mark /network/token as deprecated 2024-07-05 19:50:11 +08:00
rdt rdt: Read should return io.EOF when conn is closed 2024-06-23 13:27:47 +08:00
secure p2p: add SharedKey func 2024-04-29 21:24:32 +08:00
upnp disco: add UPnP support 2024-01-27 16:53:24 +08:00
vpn pgcli/vpn: remove --allowed-ip flag 2024-07-06 12:30:20 +08:00
.gitignore peermap: add map exporter api 2024-03-27 21:46:15 +08:00
Dockerfile chore: pgserve -> pgmap 2024-03-28 21:07:45 +08:00
go.mod pgcli/vpn: remove oidc provider selector 2024-07-04 20:52:47 +08:00
go.sum pgcli/vpn: remove oidc provider selector 2024-07-04 20:52:47 +08:00
LICENSE add license 2024-01-19 07:30:49 +08:00
Makefile chore: add mips arch 2024-06-06 20:11:57 +08:00
README_zh_CN.md readme: add nodes time sync notes 2024-07-05 19:59:46 +08:00
README.md readme: add nodes time sync notes 2024-07-05 19:59:46 +08:00

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)
  • 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
sudo pgcli vpn -s wss://synf.in/pg --ipv4 100.64.0.1/24 --ipv6 fd00::1/64
# node2
sudo pgcli vpn -s wss://synf.in/pg --ipv4 100.64.0.2/24 --ipv6 fd00::2/64

p2p file sharing

# share
$ PG_SERVER=wss://synf.in/pg pgcli share ~/my-show.pptx
ShareURL: pg://DJX2csRurJ3DvKeh63JebVHFDqVhnFjckdVhToAAiPYf/0/my-show.pptx
# download
$ PG_SERVER=wss://synf.in/pg pgcli download 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

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.