本教程将向您展示如何使用HAProxy在同一个设备上运行OpenConnectVPN服务器(ocserv)和Apache/Nginx。OpenConnect(ocserv)是CiscoAnyConnectVPN协议的开源实现。
先决条件
为了学习本教程,假设您已经使用LetsEncryptTLSserver证书设置了OpenConnectVPN服务器。如果没有,请遵循以下教程之一。
在Ubuntu0.04上用LetsEncrypt设置OpenConnectVPN服务器(ocserv)使用LetsEncrypt在Ubuntu16.04/18.04上设置OpenConnectVPN服务器(ocserv)使用LetsEncrypt在Debian10Buster上设置OpenConnectVPN服务器(ocserv)使用LetsEncrypt在CentOS8/RHEL8上设置OpenConnectVPN服务器(ocserv)
使OpenConnectVPN服务器和web服务器同时使用端口44
默认情况下,OpenConnectVPN服务器监听端口44。如果您已经让Apache/Nginx监听端口44,那么ocserv无法绑定到端口44。您可以将ocserv配置为在另一个端口上侦听,但这将要求最终用户在客户端软件中指定端口,如果您关心用户体验,应该避免使用该端口。此外,TCP端口44上的TLS流量通常在QoS(服务质量)方面享有更高的优先级,因此您将有更好的速度。
通常一个端口只能由一个进程使用。但是,我们可以使用HAproxy(高可用性代理)和SNI(服务器名称指示)使ocserv和Apache/Nginx同时使用端口44。
Ocserv配置
首先,编辑ocserv配置文件。
sudonano/etc/ocserv/ocserv.conf
取消对以下行的注释。这将允许ocserv获取客户端IP地址,而不是HAproxyIP地址。
listen-proxy-proto=true
然后找到下面一行。
#listen-host=[IP
HOSTNAME]
换成
listen-host=17.0.0.1
这将使ocserv监听17.0.0.1,因为稍后HAproxy将需要监听公共IP地址。保存并关闭文件。然后重启ocserv。
sudosystemctlstartocserv
接下来,我们还需要让web服务器只监听本地主机,而不是监听公共IP地址。
Nginx配置
如果使用Nginx,请编辑服务器块文件。
sudonano/etc/nginx/conf.d/example.