English | 简体中文
go-p2ptunnel
Use libp2p to establish a tcp tunnel (does not support udp), the underlying transmission can be realized using quic, tcp, websocket, webtransport, use the noise protocol to encrypt the transmission, comes with nat, and can be used in multi-layer combinations.
If there is no public network ip, you can use the node id to connect. If there is a situation, directly specify the ip and communication protocol to connect.
The node private key file is in the current directory, the suffix of the file name is .key , the default is user.key , and restarting the program after deletion will automatically create a new node id.
Parameter Description
Field |
Type |
Description |
l |
Address |
The listening or forwarding address. If the id is not set, the address is forwarded. If it is set, the remote port is mapped to the local address. The default value is 127.0.0.1:10086 |
id |
multiaddr format |
connection remote service id |
p2p_port |
ip port |
The port used by p2p is also the port that listens for other nodes to connect. The default is 4001, and it will automatically perform nat, but you may need to perform port mapping.If 0, a random port will be chosen |
nodisc |
bool |
Prohibit broadcasting to improve performance, connecting nodes must use links with ip and port |
user |
string |
specify which local key file to use |
update |
bool |
Update the latest version from GitHub, it will verify the upgrade package signature, sha512 |
auto_update |
bool |
auto update |
max_peers |
int |
Maximum number of connections, default 500 |
socks5 |
ip |
socks5 listens to ip, for example 127.0.0.1:10086, if the l field is empty, use this field |
build
go build -trimpath -ldflags="-w -s"
upgrade
./go-p2ptunnel -update
After v0.0.6, the program will automatically update the latest version from GitHub, and verify the sha512 and gpg signature of the file. The gpg signature id is 189BE79683369DA3
Type |
Sample |
Description |
12D3KooWLHjy7D |
Pure id |
Only know id, don't know protocol, ip, etc. |
/p2p/12D3KooWLHjy7D |
pure id |
only know id, not protocol, ip, etc. |
/ip4/1.1.1.1/tcp/4001/p2p/12D3KooWLHjy7D |
Detailed path |
Know ip, protocol, tcp used |
/ip4/1.1.1.1/udp/4001/quic-v1/p2p/12D3KooWLHjy7D |
Detailed path |
Know ip, protocol, use quic |
When the node starts, it will output the corresponding address, just change the ip inside to the public network ip.
You can control the connection behavior through tcp and quic in the path.
open local port
./go-p2ptunnel -l 127.0.0.1:3389
Note that your node id will be output here, and then sent to your friends through chat software. Here, the id is assumed to be 12D3.
The complete ip plus port is required here.
connect
./go-p2ptunnel -id 12D3 -l 127.0.0.1:10089
The connection may take a few seconds to 1 minute. After the connection is successful, the remote port is mapped to 127.0.0.1:10089
Then a friend can connect to 127.0.0.1:10089 on the remote desktop.
releases
goreleaser release --skip-publish --skip-validate --clean
verify signature
gpg --recv-key E1346252ED662364CA37F716189BE79683369DA3
gpg --verify .\ethtweet_0.7.4_windows_amd64.zip.asc .\ethtweet_0.7.4_windows_amd64.zip
If Primary key fingerprint: E134 6252 ED66 2364 CA37 F716 189B E796 8336 9DA3
appears, the verification is successful
Service publishing and sharing(todo)
You can publish your service, and after other nodes search for the service name, they can connect and use it. Must be a tcp-based service, udp is not supported yet.
Service naming Protocol of this application + / + Protocol of the service name
, if it is not a standard well-known protocol, it is recommended to use a form similar to the package name to avoid service conflicts.
Precautions
-
Although this application uses end-to-end encryption, it does not guarantee the security of the transmitted data. Please do not use this application to transmit important data.
-
Since it is a p2p tunnel, this program will connect multiple ip, if you mind, please use frp.
-
If there are multiple client connections, please increase the maximum number of files on the server, otherwise the number of connections may not be enough.
Upstream project
go-libp2p