我的网站上的 https 运行得很好,直到最近政府决定封锁几乎所有的 VPN 协议,现在才可以openconnect
正常运行。
因此,我在我的服务器上安装并配置了它openconnect
,不幸的是它不允许我启动该服务,因为我nginx
使用的是 443 端口(使用端口 443),所以我从我的并运行服务openconnect
中删除了 https 配置。nginx
openconnect
nginx
现在我也想在我的上配置 https 。
我知道一个端口通常不能被两个应用程序/服务使用。但是有没有办法让我在nginx
和openconnect
上都使用端口 443,并让haproxy
或traefik
或nginx
本身之类的程序来监督它们,并让它们都了解 VPN 客户端或浏览器是否想要连接?
编辑:我找到了这个网址,但我想知道这是否是我的问题。
答案1
https://ocserv.gitlab.io/www/recipes-ocserv-multihost.html
此链接解决了我的问题,但需要进行一些更改。
在 /etc/haproxy/haproxy.cfg 中你应该将两行部分default
从
mode http
option httplog
到
mode tcp
option tcplog
该网站的代码中还有一行:
use-server server-vpn if vpn-app
use-server server-web if web-app
use-server server-vpn if !vpn-app !web-app
这对我来说不起作用,这样它会将所有流量路由到 server-vpn,但在我注释掉第三行之后,我就可以让它工作了。
答案2
就我个人而言,正如@amin-vakil 指出的那样,我发现在 ocserv 前面使用反向代理(如 haproxy 或 nginx)效果很好,但有一个问题。如果您希望能够使用 DTLS,并且您正在使用 haproxy,则 haproxy 默认不会代理 UDP(由 DTLS 使用),因此我最终使用 haproxy 仅路由 TCP 连接,并让 ocserv 在主接口上监听 UDP,只是在不同的端口上。由于 DTLS 是在建立初始连接后协商的,由 ocserv 声明用于协商的端口,因此这似乎不是问题。
我的网络设置如下所示:
VPS BOX
|---------------------------------------------------------------------------|
| others *< ----+ |
| | vpn.<domain>.com rev proxy pass-thru to |
| |------@HA Proxy -----------| 127.0.1.1:443 |
| | | (SSL handled by ocserv) |
| [TCP 80 & TCP 443] | |
inet --> public IP - > 10.10.0.5 |---> 127.0.1.1 |
| [udp 44443] [tcp 443] |
| \ | |
| \ @ |
| \-------------------------------------=@ocserv listening on |
| tcp 127.0.1.1:443 & udp 10.10.0.5:44443 |
|---------------------------------------------------------------------------|