WireGuard+Clash实现异地组网
1 前言
声明:此方案仅用于异地组网方案,不得将其用于非法活动
2 环境配置
2.1 设备准备
此处仅以一台 Windows 电脑和一台 Android 手机进行异地组网进行演示。
需要设备:
Windows 电脑一台
Android 手机一台
VPS 一台(为了访问速率/合规性考虑,此处将其置于中国境内)
2.2 环境配置
2.2.1 VPS
安装 WireGuard:
sudo apt update && sudo apt install wireguard -y
生成密钥对:
# 生成服务端密钥
wg genkey | tee server_privatekey | wg pubkey > server_publickey
# 生成电脑密钥
wg genkey | tee desktop_privatekey | wg pubkey > desktop_publickey
# 生成手机密钥
wg genkey | tee mobile_privatekey | wg pubkey > mobile_publickey
# 查看密钥
cat server_privatekey
# cat ... 后略
配置 wg0.conf:
sudo nano /etc/wireguard/wg0.conf
内容如下:
[Interface]
PrivateKey = <server_privatekey>
Address = 172.27.88.1/24 # 此处可以选择任何你喜欢的网段(私有地址),后续异地组网的网段就用的这个地址
ListenPort = 51820 # 任何一个你喜欢的端口
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 电脑
[Peer]
PublicKey = <desktop_publickey>
AllowedIPs = 172.27.88.2/32
# 手机
[Peer]
PublicKey = <mobile_publickey>
AllowedIPs = 172.27.88.3/32启动并开启内核转发:
sudo sysctl -w net.ipv4.ip_forward=1
sudo wg-quick up wg0
2.2.2 Windows/Android
为了和Clash 配合,此处用的是 Clash 的脚本功能。
对于 Clash Verge,点击【订阅】->【全局扩展脚本】
在里面填写如下内容(下面是一个案例,需要根据自己的需求修改):
function main(config, profileName) {
// 1. 定义你的 WireGuard 节点
const myWireGuard = {
name: "DesktopWireGuard",
type: "wireguard",
server: "XXX", // VPS IP
port: 51820, // 确保此处与 VPS 的 wg0.conf 端口一致
ip: "172.27.88.2/32", // 电脑/Android 的 IP
"private-key": "XXX", // 电脑的私钥
"public-key": "XXX", // VPS 的公钥
udp: true,
mtu: 1420,
"remote-dns-resolve": false,
"udp-over-tcp": false
};
// 2. 将节点插入到配置的 proxies 数组最前面
if (!config.proxies) {
config.proxies = [];
}
config.proxies.unshift(myWireGuard);
// 3. 将分流规则插入到 rules 数组最前面
// unshift 会确保它是第一条规则
if (!config.rules) {
config.rules = [];
}
config.rules.unshift("IP-CIDR,172.27.88.0/24,DesktopWireGuard,no-resolve");
// 4. 解决 404 问题的关键:DNS 过滤
// 很多时候访问报错是因为被 Clash 的 Fake-IP 劫持了
if (config.dns) {
config.dns["fake-ip-filter"] = config.dns["fake-ip-filter"] || [];
config.dns["fake-ip-filter"].push("172.27.88.*");
// 强制让组网网段不经过 Fake-IP,直接走真实 IP 路由
}
return config;
}3 局限性
上述方案有一些局限性,在此还是需要和诸位读者说明:
连接不稳定,有时候连接过一会儿就会断掉(我实在是不知道这是什么原因造成的,debug 了很久)。
之所以不用 WireGuard 官方客户端,是因为在 Android 上,他和 Clash 不能共存(众所周知,Android 只有一个 VPN 槽位)
由于这个方案实在不稳定,我现在实际上已经弃用了,不过还是把总结的经验和踩过的坑写出来,希望对大家有帮助。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 LinJHS
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

