能把 WireGuard 配置转换成 OpenVPN 吗?
不能把 WireGuard 文件改名成 OpenVPN 配置文件。对端必须说同一种协议,所以解法是拿到匹配的配置文件,而不是找转换器。
你有一个 wg0.conf,而客户端只接受 .ovpn,于是有人建议把文件转换一下。直接改名得到的配置文件 OpenVPN 根本解析不了;而逐字段仔细翻译出来的配置文件虽然能解析,却会在握手阶段失败。原因不在于文件格式。WireGuard 和 OpenVPN 是两种不同的协议,握手方式不同、认证模型不同,对“对端”的理解也不同。所谓的转换只在一种意义上成立:你去找运行对端的人要一份 OpenVPN 配置文件。
你手上的文件描述的是一个对端,而不是一份连接配置
WireGuard 配置之所以很短,是因为协议本身就短:一个带私钥和地址的接口,然后是一个或多个带公钥、端点和 AllowedIPs 列表的对端。没有需要配置的协商层,也没有需要挑选的加密套件。
OpenVPN 配置文件是 TLS 控制通道的客户端,因此它带有证书或凭据引用,以及说明如何认证的指令。
为什么翻译过的文件仍然过不了握手
WireGuard 以基于 Noise 的握手开始,绑定双方的静态密钥;在尚不知道对端公钥时,它一声不响。OpenVPN 则建立 TLS 会话,验证服务器证书或静态密钥,然后用证书、用户名和密码,或两者兼用,来认证用户。WireGuard 文件里对这些一个字都没写。翻译出来的文件会有正确的端点,其余全错。
沿用同样的地址和端口也没用,因为 对端在等的是另一种报文。
该向提供商问什么
如果 WireGuard 文件是提供商给的,就问同一个账户有没有 OpenVPN 权限,并索要那份配置。很多提供商都有,它带着自己的凭据发来,而不是第一份文件的改写版。
如果答案是没有,限制在订阅而不在文件,任何转换器都改变不了。
如果路由器或客户端只会说 OpenVPN
当必须联网的设备只支持 OpenVPN 时,先查对端文档里写明的协议支持,再去找别的扩展名。终结 OpenVPN 的路由器,不会因为导入一个文件就接受 WireGuard。可行的办法是服务器侧提供 OpenVPN 端点,或者换一台会说 WireGuard 的设备。
选择时要看谁管理对端,而不是看你手上恰好有哪个文件。
如果服务器由你自己运营,那就加上这个协议
支持第二种协议意味着再跑一个服务。在 Linux 服务器上,那是一个 OpenVPN 实例,带自己的 CA、服务器证书、客户端证书,以及 server 和 push 指令,另外还要为它的端口加一条防火墙规则。现有的 WireGuard 对端条目对这些对象一个都没描述。地址池和推送路由要跟 WireGuard 的 AllowedIPs 分开规划,因为它们并不是同一个机制换了两个名字。
然后从客户端验证:配置能加载,TLS 会话能完成,推送的路由出现,流量能到达只有通过隧道才能访问的主机。
转换器这个思路在哪儿是安全的
把数值手工抄进笔记没问题,而且常常有用,因为端点、地址和对端公钥只是部署事实。把私钥上传到承诺帮你转换的网站就不行,因为那把私钥就是凭据,而对方根本没有可转换的协议。如果你需要从 OpenVPN 客户端获得同样的访问,请去申请一份 OpenVPN 凭据。
把两份配置并排放着,把它们当作两条独立的访问路径,因为它们本来就是。