在最新的 Surge Mac 4.4.0 中,我们带来了一项实验性功能,可以使用 L3 的 WireGuard 协议作为一个代理策略所使用。
[Proxy]
wireguard-home = wireguard, section-name = HomeServer
[WireGuard HomeServer]
private-key = sDEZLACT3zgNCS0CyClgcBC2eYROqYrwLT4wdtAJj3s=
self-ip = 10.0.2.2
dns-server = 223.5.5.5
mtu = 1280
peer = (public-key = fWO8XS9/nwUQcqnkfBpKeqIqbzclQ6EKP20Pgvzwclg=, allowed-ips = 0.0.0.0/0, endpoint = 192.168.20.6:51820)
其中
- 所有的 key 可使用 base64 或 HEX 形式。
- self-ip 字段必须提供,请注意每个设备的 self-ip 必须不同,否则或造成 IP 抢占。
- peer 字段可以配置多个节点,以逗号分隔,用 () 表示为一个节点的配置。
- peer 的 endpoint 可以使用域名,请注意 endpoint 的解析过程由 Surge 主配置的 DNS 解析器完成,和本段的 dns-server 无关。
- allowed-ips 为 0.0.0.0/0 表示可使用该策略访问任意地址,也可以配置为特定内网地址。
- 如果需要通过该策略使用域名访问主机,则必须配置 dns-server,Surge 会通过 wireguard 的 VPN 去该服务器执行 DNS 解析。可配置多个 DNS 地址,逗号分隔。
- [WireGuard NAME] 段可拆分到 Detached Profile Section 文件中。
- 可同时配置使用多个 Wireguard 实例。
- 可以将 wireguard 策略作为其他策略的 underlying-proxy 使用,但是不支持为 wireguard 策略配置 underlying-proxy。
目前尚未完工的部分
- UDP 转发:完成
- Surge iOS:完成
- endpoint 域名自动重解析:完成
- IPv6:连接 endpoint 支持使用 IPv6,但是不支持在 tunnel 中使用 IPv6
- 多 Peer 支持:目前版本仅支持配置一个 peer
另外请注意,由于 WireGuard 本身是 L3 VPN,工作过程中的开销会显著高于其他一般的代理协议。适合于对带宽要求比较低的场景。
一些 Notes:
- 目前 Tunnel 只支持 TCP 协议,UDP 协议尚未完成。另外做了非常简单 ICMP 响应,当 WireGuard 握手成功后,可从服务端 ping 客户端 tunnel IP 进行测试。
- 由于 WireGuard 本身没有异常机制,绝大多数情况下,WireGuard 出错的表现为超时(如密钥错误、防护墙阻挡、未配置服务端 NAT 等等),请自行通过抓包的方式分析原因。
- 在测试的过程中有观察到轻微的内存泄漏,目前暂未能定位到原因,请观察内存占用,如有内存占用过高请回报。