要说 什么简单 省事
唯有 组网
就是有点爽 爱好 与 红尘
定义
这是个基于 UDP 的异地组网工具
先放下官方的定义 对等体/节点/设备 Peer/Node/Device
诺 如下
| 名称 | 虚拟ip | 自带网段 |
|---|
| Isaac | 192.168.99.1/32 | |
| Alice | 192.168.99.2/32 | 192.168.2.0/24 |
| Bob | 192.168.99.3/32 | 192.168.3.0/24 |
| Carol | 192.168.99.4/32 | 192.168.4.0/24 |
| Dave | 192.168.99.5/32 | 192.168.5.0/24 |
安装
- 将
net.ipv4.ip_forward = 1 添加到 /etc/sysctl.conf
debian
1
| apt install wireguard-tools iptables
|
alpine
1 2
| apk add wireguard-tools-wg-quick iptables wireguard-tools-openrc rc-update add sysctl
|
修改 /etc/conf.d/iptables 中 IPFORWARD 为 yes
配置
- 公钥私钥采用
wg genkey | tee key.privatekey | wg pubkey > key.publickey 生成 每个人都是独立的 - 配置文件在
/etc/wireguard 文件名就是网卡名 规则为 ^[a-zA-Z0-9_=+.-]{1,15}$ - 以下配置文件有精简
Alice 和 Bob 一起玩 Alice 有公网
Alice /etc/wireguard/wg_ab_a.conf
1 2 3 4 5 6 7 8
| [Interface] Address = 192.168.99.2/24 ListenPort = 51820 PrivateKey = {Alice_PrivateKey} [Peer] # Name = Bob PublicKey = {Bob_PublicKey} AllowedIPs = 192.168.99.3/32, 192.168.3.0/24
|
Bob /etc/wireguard/wg_ab_a.conf
1 2 3 4 5 6 7 8
| [Interface] Address = 192.168.99.3/24 PrivateKey = {Bob_PrivateKey} [Peer] # Name = Alice Endpoint = {Alice_ip}:51820 PublicKey = {Alice_PublicKey} AllowedIPs = 192.168.99.2/32, 192.168.2.0/24
|
Alice Bob Carol 一起玩 Alice 有公网
wg-quick up wg_abc_aBob Carol 玩耍时通过 Alice 中转
Alice /etc/wireguard/wg_abc_a.conf
1 2 3 4 5 6 7 8 9 10 11 12
| [Interface] Address = 192.168.99.2/24 ListenPort = 51820 PrivateKey = {Alice_PrivateKey} [Peer] # Name = Bob PublicKey = {Bob_PublicKey} AllowedIPs = 192.168.99.3/32, 192.168.3.0/24 [Peer] # Name = Carol PublicKey = {Carol_PublicKey} AllowedIPs = 192.168.99.4/32, 192.168.4.0/24
|
Bob /etc/wireguard/wg_abc_a.conf
1 2 3 4 5 6 7 8
| [Interface] Address = 192.168.99.3/24 PrivateKey = {Bob_PrivateKey} [Peer] # Name = Alice Endpoint = {Alice_ip}:51820 PublicKey = {Alice_PublicKey} AllowedIPs = 192.168.99.2/32, 192.168.3.0/24, 192.168.4.0/24
|
Carol /etc/wireguard/wg_abc_a.conf
1 2 3 4 5 6 7 8
| [Interface] Address = 192.168.99.4/24 PrivateKey = {Carol_PrivateKey} [Peer] # Name = Alice Endpoint = {Alice_ip}:51820 PublicKey = {Alice_PublicKey} AllowedIPs = 192.168.99.2/32, 192.168.2.0/24, 192.168.4.0/24
|
Alice Bob Carol 一起玩 都有公网
Q&A
Address 和 AllowedIPs 什么
站在 Alice 的角度
Address 是组网的ip地址 只有同个局域网才能一起玩[Peer] 可以找谁一起玩AllowedIPs 是路由 找他可以通过那个路出去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [Interface] # 我组了一个局域网 Address = 192.168.99.2/24 # 监听地址是这个 ListenPort = 51820 # 我的私钥 PrivateKey = {Alice_PrivateKey} [Peer] # Name = Bob # 访问 192.168.3.0/24 网段时 去找 Bob PublicKey = {Bob_PublicKey} AllowedIPs = 192.168.99.3/32, 192.168.3.0/24 [Peer] # Name = Carol # 访问 192.168.4.0/24 网段时 去找 Carol PublicKey = {Carol_PublicKey} AllowedIPs = 192.168.99.4/32, 192.168.4.0/24
|
至于 WireGuard 怎么知道是 Bob 还是 Carol 来找自己了
那不是有 PublicKey 字段嘛 我推测是用它判断的
站在 Bob 的角度
1 2 3 4 5 6 7 8 9 10 11 12
| [Interface] # 我组了或者加入了一个局域网 Address = 192.168.99.3/24 # 我的私钥 PrivateKey = {Bob_PrivateKey} [Peer] # Name = Alice Endpoint = {Alice_ip}:51820 PublicKey = {Alice_PublicKey} AllowedIPs = 192.168.99.2/32, 192.168.3.0/24, 192.168.4.0/24 # 每25秒去敲下 Alice 的门 防止他忘记我 PersistentKeepalive = 25
|
可以通过 Endpoint 这个去找 Alice 玩
我也想去找 Carol 玩 但是他和我都没得 公网
那我只能把相关的网段都给 Alice 让他去中转
参考地址