1.起因
家里一直有一台软路由,且一直都携带着公网V4,之前有装openwrt的时候,都会开个ss用来回家用,但是现在不是很想装openwrt。于是有了以下的一些折腾。
因为我使用的是ios,也购买了Surge,同时其支持WireGuard协议,最后再去看了下mihomo,也支持WireGuard那么使用WireGuard回家将是最好的选择啦~
最后简单介绍下自己的设备吧。
软路由:5105 (ikuai 主路由、 Debian 、Windows10)
Debian - > 服务端
装有ios的Surge - > 客户端
2.安装
因为Debian相对来说稳定,因此把wg安装到Debian下。
Debian在root权限下执行
apt install wireguard
3.生成公钥私钥
所有的公钥私钥 都是从服务端来生成的 这点是重中之重
3.1 服务端公钥私钥生成
先生成服务端的公钥私钥
cd /etc/wireguard
wg genkey | tee server_private.key | wg pubkey > server_public.key
3.2 客户端公钥私钥生成
其实就看你有多少个客户端,比如你想用一台装有surege的iphone 和 一台装有mihomo的windows 那就是生成2对公钥私钥
简单理解 几个设备 → 几对公私钥对
同样的命令 也是 在 /etc/wireguard
这个目录下 执行
wg genkey | tee ios_private.key | wg pubkey > ios_public.key
4.编写wg*.conf
wg的conf 必须在 /etc/wireguard 下,且命名必须是 wg*.conf 的形式 * 放数字就行,比如 wg0.conf
[Interface]
# 服务端的IP地址和子网掩码,定义了WireGuard接口的网络范围
Address = 192.168.63.1/24
# WireGuard服务器监听的UDP端口(注意 端口需要放行)
ListenPort = 22334
# 服务器的私钥,用于加密和身份验证
PrivateKey = <服务端私钥 也就是 server_private.key 的值>
# ens18是网卡 需要自己查看
# 在WireGuard启动时执行的命令,设置防火墙规则以允许流量转发和NAT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
# 在WireGuard关闭时执行的命令,移除之前添加的防火墙规则
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE
# 以一台装有surge的iphone为例
[Peer]
# 客户端的公钥,用于验证客户端身份
PublicKey = <ios公钥 也就是 ios_public.key 的值>
# 允许此客户端使用的IP地址,/32表示单个特定IP
AllowedIPs = 192.168.63.2/32
# 以一台装有mihomo的windows为例
[Peer]
# 客户端的公钥,用于验证客户端身份
PublicKey = <windows公钥 也就是 windows_public.key 的值>
# 允许此客户端使用的IP地址,/32表示单个特定IP
AllowedIPs = 192.168.63.3/32
接下来说说自己的踩坑点
4.1 注意点
1.端口一定要放行,只需要放行udp就行了
2.密钥的一些交互,一定不要错了,简单理解
服务端的conf只需要放 服务端自己的私钥 和 其他客户端的公钥 即可
3.网卡 一定要看自己出口的是哪张网卡,一般不能照抄!!!
4.如果对子网掩码有疑问,简单理解就是,服务端包含整个网段,所以是24;客户端因为指代的就是一个设备,所以是32
至此 wg0.conf
配置完毕
5. 服务端启动
cd /etc/wireguard
wg-quick up wg0
启动完可以 输入 wg
看下是否确实启动了
6. 配置Surge
一共有三个地方需要配置,具体如下:
[Proxy]
Home = wireguard, section-name = Home
[Rule]
IP-CIDR,192.168.88.0/24,Home,no-resolve
[WireGuard Home]
private-key = <ios私钥 也就是 ios_private.key 的值>
self-ip = 192.168.63.2
mtu = 1280
peer = (public-key = <服务端公钥 也就是 server_public.key 的值>, allowed-ips = "0.0.0.0/0, ::0/0", endpoint = ddns.cn:22334, keepalive = 25)
6.1 注意点
因为我实现的是通过wg就能访问家里所有设备 我家里是88网段,所以[Rule]是88网段 (这点很重要 我之前把 Interface 的网段也写进来了 但是 不能访问家里所有设备)
1.self-ip 需要与 Interface 同一个网段
2.endpoint 家里公网ip的 ddns:端口 即可
7. 配置mihomo
参考的官方的 与 surge 其实类似
proxies:
- name: "wg"
type: wireguard
ip: 192.168.63.3
# 我不用V6 所以不开
# ipv6: fd01:5ca1:ab1e:80fa:ab85:6eea:213f:f4a5
private-key: <windows私钥 也就是 windows_private.key 的值>
peers:
- server: ddns.cn
port: 22334
public-key: <服务端公钥 也就是 server_public.key 的值>
allowed-ips: ['0.0.0.0/0']
# pre-shared-key: 31aIhAPwktDGpH4JDhA8GNvjFXEf/a6+UaQRyOAiyfM=
# reserved: [209,98,59] # 字符串格式也是合法的,如"U4An"
udp: true
# mtu: 1408
# dialer-proxy: "ss1" # 一个出站代理的标识。当值不为空时,将使用指定的 proxy/proxy-group 发出连接
# remote-dns-resolve: true # 强制dns远程解析,默认值为false
# dns: [ 1.1.1.1, 8.8.8.8 ] # 仅在remote-dns-resolve为true时生效
至此教程结束