我们用的是 OpenVPN:协议、引擎还是应用?该改问什么
同一个词既指协议,也指服务器软件包和手机应用。先分清角色,再分别要客户端、配置文件和资源。
「我们用的是 OpenVPN」这句话会出现在工单、采购流程和新人入职文档里,而在每一处它回答的其实是不同的问题。 有时它指的是传输协议,有时指的是网关上跑的软件,有时指的是新员工该装的那个应用。 这三件事指向的下一步完全不同,而先问清对方指的是哪一种,比凭空猜测要省时间。 接下来的排查,都从那个答案开始。
先把手头的角色和品牌分开看,因为品牌同时盖住了这三层。
这个名字涵盖了三种角色,而它们出问题的方式各不相同
作为协议,OpenVPN 描述的是兼容的两端如何建立隧道、如何保护穿过隧道的内容。 作为软件,它是在客户端或服务器角色上讲这套协议的一份实现。 作为客户端,它是有人装在自己设备上的应用,有自己的版本、配置文件格式和平台怪癖。 一个角色出故障,并不代表另一个角色也出了故障,所以「OpenVPN 挂了」这句话缺一个主语。
问对方能看到什么:一个配置文件、一个已安装的程序,还是一台由他管理的网关。 这一点就决定了下一步该去看客户端日志、问软件包的情况,还是检查服务器这一侧的监听。
OpenVPN 2 和 OpenVPN 3 不是一对升级关系
OpenVPN 2.x 既能当服务器也能当客户端,目前大多数网关部署用的仍然是它。 OpenVPN 3 是另一套面向客户端的实现,有自己的配置和会话模型,并不是装在 2.x 服务器上的下一个版本。 OpenVPN Connect 则是基于 OpenVPN 3 引擎构建的客户端应用。 装上其中任何一个都不会凭空多出一个互联网出口服务,出口取决于运营方怎么配置。
协议层面的兼容并不会延伸到配置指令上,所以一个能顺利导入的配置文件,仍可能卡在客户端没有实现的某条指令上。
传输层不是它里面承载的应用
外层连接用 UDP 或 TCP 之类的传输方式去连上已配置的监听地址,隧道承载的一切都在它里面走。 通过 VPN 发出的网页请求不需要自己再开一个 OpenVPN 监听,也不会在链路上变成 OpenVPN 数据包。 在 TLS 模式下,控制通道负责协商密钥材料,数据通道负责保护负载,读日志时这条分界值得分清。
把层次搞混,就会出现「为一个已经能通过隧道访问的网站开端口」这类请求。 端口属于外层连接,不属于应用。
配置文件能承诺什么,不能承诺什么
一个配置文件只告诉某一个客户端如何连到某一项服务:端点、传输方式、身份材料,往往还有一些路由和 DNS 偏好。 它并不说明这项服务由谁运营,也不说明账号是否获准使用。 路由、解析器设置、转发规则和访问策略,才决定这次会话实际能到达哪里。 能成功导入的配置文件只是可用连接的起点,而不是连接本身的证据。
当有人问某个资源能否通过 VPN 访问时,答案取决于服务器侧的策略,而不是客户端的配置文件。
要就要能落地的东西
把那个笼统的名字拆成三件具体的事:客户端及其版本,为该客户端授权的配置文件,以及这个人需要访问的资源。 有了这三样,开通就是一项具体的任务。 没有它们,任何回答都只是在猜问题说的到底是哪个 OpenVPN。
把答案写进请求本身。 下一张工单还会用同样含糊的方式问同一个问题。