简体中文 | English

NetLink is a decentralized networking tool built on the [rustp2p](https://crates.io/crates/rustp2p) library. ``` Usage: netLink.exe [OPTIONS] --local --group-code Commands: cmd Backend command help Print this message or the help of the given subcommand(s) Options: -p, --peer Peer node address. e.g.: -p tcp://192.168.10.13:23333 -p udp://192.168.10.23:23333 -l, --local Local node IP and prefix. e.g.: -l 10.26.0.2/24 -g, --group-code Nodes with the same group_code can form a network (Maximum length 16) -P, --port Listen local port -b, --bind-dev Bind the outgoing network interface (using the interface name). e.g.: -b eth0 --threads Set the number of threads, default to 2 -e, --encrypt Enable data encryption. e.g.: -e "password" -a, --algorithm Set encryption algorithm. Optional aes-gcm/chacha20-poly1305/xor, default is chacha20-poly1305 --exit-node Global exit node,please use it together with '--bind-dev' --tun-name Set tun name -f, --config Start using configuration file ``` ## Start with config file
open ```yaml ## ./netLink --config ## On demand use, unnecessary configurations can be deleted ## Command server host. default is "127.0.0.1" #cmd_host: "127.0.0.1" ## Command server port. default is 23336 #cmd_port: 23336 ## Number of program task threads. default is 2 #threads: 2 ## group code. cannot be empty group_code: String ## node tun ipv4. cannot be empty node_ipv4: "10.26.1.2" ## node tun network prefix. default is 24 #prefix: 24 ## node tun ipv6. The program will automatically generate node_ipv6 # node_ipv6: # prefix_v6: 96 ## tun device name. The program will automatically generate tun_name #tun_name: "tun3" ## Enable data encryption #encrypt: "password" ## Set encryption algorithm. Optional aes-gcm/chacha20-poly1305/xor. default is chacha20-poly1305 #algorithm: "chacha20-poly1305" ## Listen local port. default is 23333 # port: 23333 ## Peer node address #peer: # - udp://192.168.10.23:23333 # - tcp://192.168.10.23:23333 ## Bind the outgoing network interface (using the interface name) #bind_dev_name: "eth0" ## Global exit node,please use it together with "bind_dev_name" #exit_node: ## stun server addr #udp_stun: # - stun1.l.google.com:19302 # - stun2.l.google.com:19302 #tcp_stun: # - stun.flashdance.cx # - stun.nextcloud.com:443 ```
## Web UI [netlink-app](https://github.com/rustp2p/netlink-app) ### Usage Instructions: #### 1. Launch using a Browser: 1. Start netlink. 2. Access http://127.0.0.1:23336 using a browser. #### 2. Launch using Tauri Executable: 1. Start netlink. 2. Open the netlink-app. ## Features | Features | | |--------------------|---| | **Decentralized** | ✅ | | **Cross-platform** | ✅ | | **NAT traversal** | ✅ | | **Subnet route** | ✅ | | **Encryption** | ✅ | | **Efficient** | ✅ | | **IPv6/Ipv4** | ✅ | | **UDP/TCP** | ✅ | ## Quick Start ```mermaid flowchart LR subgraph Node-A 8.210.54.141 node_a[10.26.1.2/24] end subgraph Node-B node_b[10.26.1.3/24] end subgraph Node-C node_c[10.26.1.4/24] end node_a <-----> node_b node_c <-----> node_b node_a <-----> node_c ``` 1. Node-A ``` ./netLink --group-code 123 --local 10.26.1.2/24 ``` 2. Node-B ``` ./netLink --group-code 123 --local 10.26.1.3/24 --peer 8.210.54.141:23333 ``` 3. Node-C ``` ./netLink --group-code 123 --local 10.26.1.4/24 --peer 8.210.54.141:23333 ``` 4. Nodes A, B, and C can access each other ## Multi Node ```mermaid flowchart LR subgraph Node-A 8.210.54.141 node_a[10.26.1.2/24] end subgraph Node-B node_b[10.26.1.3/24] end subgraph Node-C 192.168.1.2 node_c[10.26.1.4/24] end subgraph Node-D node_d[10.26.1.5/24] end node_b -----> node_a node_c -----> node_a node_d -----> node_c ``` ``` Node-A: ./netLink --group-code 123 --local 10.26.1.2/24 Node-B: ./netLink --group-code 123 --local 10.26.1.3/24 --peer 8.210.54.141:23333 Node-C: ./netLink --group-code 123 --local 10.26.1.4/24 --peer 8.210.54.141:23333 Node-D: ./netLink --group-code 123 --local 10.26.1.5/24 --peer 192.168.1.2:23333 ``` All connected nodes can access each other. Furthermore, multiple nodes can be connected using '-peer'. example: ``` Node-A: ./netLink --group-code 123 --local 10.26.1.2/24 Node-B: ./netLink --group-code 123 --local 10.26.1.3/24 --peer 8.210.54.141:23333 Node-C: ./netLink --group-code 123 --local 10.26.1.4/24 --peer 8.210.54.141:23333 Node-D: ./netLink --group-code 123 --local 10.26.1.5/24 --peer 192.168.1.2:23333 --peer 8.210.54.141:23333 ``` ## Subnet route ``` Public Node-S: 8.210.54.141 Subnet 1: 192.168.10.0/24 Node-A: 192.168.10.2 Node-B: 192.168.10.3 Other subnet: Node-C Node-S: ./netLink --group-code xxxx --local 10.26.1.1 Node-A: ./netLink --group-code 123 --local 10.26.1.3/24 --peer 8.210.54.141:23333 Node-C: ./netLink --group-code 123 --local 10.26.1.4/24 --peer 8.210.54.141:23333 Node-C <--> Node-A(192.168.10.2) <--> Node-B(192.168.10.3) ``` 1. **Step 1 : Node-A Configure network card forwarding** > forward the traffic whose source is within 10.26.1.0/24 to the specified network interface **Linux** ``` sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -o eth0 -s 10.26.1.0/24 -j MASQUERADE ``` **Windows** ``` New-NetNat -Name testSubnet -InternalIPInterfaceAddressPrefix 10.26.1.0/24 ``` **Macos** ``` sudo sysctl -w net.ipv4.ip_forward=1 echo "nat on en0 from 10.26.1.0/24 to any -> (en0)" | sudo tee -a /etc/pf.conf sudo pfctl -f /etc/pf.conf -e ``` 2. **Step 2 : Node-C Configure route** > route all traffic whose destination is within 192.168.10.0/24 to 10.26.1.3(i.e. the node_id of Node-A) **Linux** ``` sudo ip route add 192.168.10.0/24 via 10.26.1.3 dev ``` **Windows** ``` route add 192.168.10.0 mask 255.255.255.0 10.26.1.3 if ``` **Macos** ``` sudo route -n add 192.168.10.0/24 10.26.1.3 -interface ``` At this point, Node-C can access the IP address of Node-B(192.168.10.3) via Node-A as if Node-C was directly connected to Node-B. ## Contact - TG: https://t.me/+hdMW5gWNNBphZDI1 - QQ group: 211072783 ## Free community nodes - --peer tcp://198.46.149.74:23333