简体中文 | English

`NetLink` 是建立在[rustp2p](https://crates.io/crates/rustp2p)库基础上的去中心化的网络工具. ## 使用 ``` 管理员权限命令行输入: netLink.exe [OPTIONS] --local --group-code Commands: cmd Backend command help 打印帮助信息 Options: -p, --peer 远端节点地址(需可直接访问). 如: -p tcp://192.168.10.13:23333 或 -p udp://192.168.10.23:23333 -l, --local 设定本地节点地址 CIDR格式. 如: -l 10.26.0.2/24 -g, --group-code 节点所在组的名称(最大长度16),只有同一组的节点才能进行数据访问 -P, --port 本地监听地址 -b, --bind-dev 指定流量出口网卡名. 如: -b eth0 --threads 设置使用线程数, 默认两个线程 -e, --encrypt 设定秘钥并开启加密. 如: -e "password" -a, --algorithm 设定加密算法. 可选择算法: aes-gcm/chacha20-poly1305/xor, 默认是:chacha20-poly1305 --exit-node 网关节点,请配合'--bind-dev'使用 --tun-name 设定本地tun的名称 -f, --config 使用配置文件启动 ``` ## 使用配置文件启动
展开 ```yaml ## ./netLink --config ## 按需修改 ## 后台命令服务监听地址. 默认值 "127.0.0.1" #cmd_host: "127.0.0.1" ## 后台命令服务监听端口. 默认值 23336 #cmd_port: 23336 ## 工作线程数. 默认值 2 #threads: 2 ## 组编号,必填 group_code: String ## 虚拟ipv4 必填 node_ipv4: "10.26.1.2" ## 网段,默认值24,填0则不监听tun网络 #prefix: 24 ## 虚拟ipv6,会自动生成 # node_ipv6: # prefix_v6: 96 ## tun网卡名称,会自己生成 #tun_name: "tun3" ## 开启加密,设置加密密码 #encrypt: "password" ## 加密算法. 可选 aes-gcm/chacha20-poly1305/xor. 默认值 chacha20-poly1305 #algorithm: "chacha20-poly1305" ##监听端口. 默认值 23333 # port: 23333 ## 对端地址 #peer: # - udp://192.168.10.23:23333 # - tcp://192.168.10.23:23333 ## 使用网卡名称绑定出口网卡 #bind_dev_name: "eth0" ## 全局出口,配合 "bind_dev_name"一起使用 #exit_node: ## tun服务 区分udp和tcp服务 #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) ### 使用方法: #### 一. 使用浏览器启动: 1. 命令行启动netlink 2. 在浏览器使用'http://127.0.0.1:23336'访问 #### 二. tauri可执行文件启动: 1. 命令行启动netlink 2. 打开netlink-app ## 特性 | Features | | |--------------------|---| | **Decentralized** | ✅ | | **Cross-platform** | ✅ | | **NAT traversal** | ✅ | | **Subnet route** | ✅ | | **Encryption** | ✅ | | **Efficient** | ✅ | | **IPv6/Ipv4** | ✅ | | **UDP/TCP** | ✅ | ## 快速上手 ```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. 节点 A, B, and C 可以互相访问 ## 多节点 ```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 ``` 所有已连接的节点可以互相访问 而且, 多节点也可以通过'-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 ``` ## 子网路由 ``` 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. **第一步 : 节点Node-A配置转发网卡** > 转发所有来源地址在网段10.26.1.0/24下的流量到指定网卡 **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. **第二步 : 节点Node-C的路由设置** > 将目标地址在网段192.168.10.0/24下的流量通过路由代理到本地tun并且发送到网关10.26.1.3(即 节点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 ``` 此时, Node-C可以通过Node-A访问Node_B, 就像Node-C和Node-B是直连的一样 ## 联系 - 电报: https://t.me/+hdMW5gWNNBphZDI1 - QQ群: 211072783 ## 免费社区节点 - --peer tcp://198.46.149.74:23333