OpenVPN 与 Apache/SSL 端口共享

OpenVPN 与 Apache/SSL 端口共享

我正在尝试设置 OpenVPN 以监听端口 443,然后使用该port-share选项将所有 HTTPS 流量传递到 Apache。相关配置片段如下:

OpenVPN

local ${PUBLIC_IP}
port 443
port-share localhost 443

带有 SSL 的 Apache

Listen localhost:443

我的 OpenVPN 客户端连接正常,但打开启用 HTTPS 的页面时出现错误。Firefox 说:

SSL 收到的记录超过了最大允许长度。

(错误代码:ssl_error_rx_record_too_long)

卷曲说

curl:(35)错误:140770FC:SSL 例程:SSL23_GET_SERVER_HELLO:未知协议

该请求最终在 Apache 上,因为我在错误日志中看到以下消息:

[Wed Oct 06 01:10:20 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
[Wed Oct 06 01:11:04 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
[Wed Oct 06 01:11:51 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01

HTTPS 连接的消息条目是

Oct  6 01:13:21 ns1 openvpn[20154]: Re-using SSL/TLS context
Oct  6 01:13:21 ns1 openvpn[20154]: LZO compression initialized
Oct  6 01:13:21 ns1 openvpn[20154]: Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Oct  6 01:13:21 ns1 openvpn[20154]: Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Oct  6 01:13:21 ns1 openvpn[20154]: Local Options hash (VER=V4): 'c0103fa8'
Oct  6 01:13:21 ns1 openvpn[20154]: Expected Remote Options hash (VER=V4): '69109d17'
Oct  6 01:13:21 ns1 openvpn[20154]: TCP connection established with ${CLIENT_IP}:56203
Oct  6 01:13:21 ns1 openvpn[20154]: TCPv4_SERVER link local: [undef]
Oct  6 01:13:21 ns1 openvpn[20154]: TCPv4_SERVER link remote: ${CLIENT_IP}:56203
Oct  6 01:13:21 ns1 openvpn[20154]: ${CLIENT_IP}:56203 Non-OpenVPN client protocol detected
Oct  6 01:13:21 ns1 openvpn[20154]: TCP/UDP: Closing socket

使用 httpd-2.2.3-43.el5.centos 和 openvpn-2.1.1-2.el5 。

我应该怎么做才能使端口共享正常工作?


更新: 使用

port 443
port-share localhost 10443

Listen localhost:10443

没什么区别。


更新 2:一些命令输出

[root@ns1 ~]# openvpn --help | grep port-share
--port-share host port : When run in TCP mode, proxy incoming HTTPS sessions
[root@ns1 ~]# netstat -nltp | grep 443
tcp        0      0 127.0.0.1:10443             0.0.0.0:*                   LISTEN      20088/httpd         
tcp        0      0 ${PUBLIC_IP}:443             0.0.0.0:*                   LISTEN      20066/openvpn       

答案1

port-share选项设置端口其他应用程序正在监听。

你想要做的是配置

端口共享 10443

并将 Apache 设置为监听端口 10443:

监听 <你的公共 IP>:10443

这是因为两个应用程序不能同时打开相同的端口。

答案2

OpenVPN 的端口共享选项允许您将流量重定向到另一个 HTTPS 站点,而不是常规的 Web 服务器;您看到的错误

[error] [client 127.0.0.1] Invalid method in request \x16\x03\x01

当 SSL 请求发送到非 0SSL 站点时发生。我可以通过以下方式重现该错误

  port-share localhost 80

(而不是 443)如果您正确设置了 HTTPS 站点,那么端口共享将会起作用。

高血压,

吉吉克

答案3

在寻找适合我的服务器的答案时,我发现每个人都在谈论portshareOpenVPN 配置的功能。然而,就我而言,我需要知道实际客户端 IP 地址用于日志记录和其他功能。我发现使用portshare会导致服务器的本地 IP 被记录。

为了解决这个问题,

  1. portshare [port]在OpenVPN中添加功能
  2. 设置 Apache 服务器监听[port]
  3. 安装代理协议扩展(按照 repo readme 中的说明),可从以下位置获得:https://github.com/roadrunner2/mod-proxy-protocol
  4. ProxyProtocol On在 Apache 配置中添加该行。

它应该可以工作并达到上述目的。刚刚发布了这篇文章,希望它能帮助那些想做和我一样事情的人。

答案4

更新:我注意到网站访问者的 IP 地址将始终保留127.0.0.1在 Web 服务器日志中。如果您想知道连接的来源或想要使用 之类的工具fail2ban,那么这将是一个问题。如果我们使用 OpenVPN 的port-share(https://forums.openvpn.net/viewtopic.php?t=22599),因此我使用了透明模式下的 SSLH 工具:https://unix.stackexchange.com/questions/373717/how-does-sslhs-transparent-mode-work/532333#532333

原始答案:

如果有人正在使用 OpenVPN Access Server,您必须前往/usr/local/openvpn_as/scripts/(例如在 Debian 上)并执行以下命令:

./sacli --key "vpn.server.port_share.enable" --value "true" ConfigPut ./sacli --key "vpn.server.port_share.service" --value "custom" ConfigPut ./sacli --key "vpn.server.port_share.ip_address" --value <LOCAL_IP> ConfigPut ./sacli --key "vpn.server.port_share.port" --value <PORT> ConfigPut ./sacli start

来源:

https://forums.openvpn.net/viewtopic.php?p=78630#p78630

https://openvpn.net/vpn-server-resources/managing-settings-for-the-web-services-from-the-command-line/#Change_the_web_service_forwarding_settings

就我而言,我不需要对键执行命令vpn.server.port_share.service,而是使用命令service openvpnas restart而不是./sacli start

由于我将 Apache 配置为监听端口 4443,因此我用<LOCAL_IP>127.0.0.1替换<PORT>了。4443

我的文件/etc/apache2/ports.conf配置如下:

Listen 80

<IfModule ssl_module>
        Listen 4443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 4443
</IfModule>

我的 Apache SSL 配置/etc/apache2/sites-enabled/000-default.conf开始如下: <IfModule mod_ssl.c> <VirtualHost *:4443>

注意:我以前使用过 OpenVPN Access Server,因为它很容易设置。还有其他脚本可以设置 OpenVPN,它们的优点是开源且不限制用户数量,例如:https://github.com/Nyr/openvpn-install

相关内容