使用Apache / SSL的OpenVPN端口共享


8

我正在尝试将OpenVPN设置为侦听端口443,然后通过使用该port-share选项将所有HTTPS通信传递给Apache 。相关的配置片段为:

开放VPN

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       

Answers:


8

port-share选项设置另一个应用程序正在侦听的端口。

您要做的是配置

端口共享10443

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

听<your-public-ip>:10443

这是因为两个应用程序无法一次打开同一端口。


感谢您的回复。OpenVPN绑定在公共地址上,而Apache绑定在localhost上。如果有机会,我将更改Apache端口,但是鉴于两个应用程序使用不同的地址,它们可以绑定在同一端口上。
罗伯特·蒙提亚努

是的,没错,但是openVPN可能会重定向到相同的IP,而不是本地主机(这是理智的做法)
Hubert Kario 2010年

我实际上是想说port-share localhost 443。我试过了port-share localhost 10443,但是还是没用,同样的错误。
罗伯特·蒙提亚努

啊,对不起,我说的是一件事,而显示另一件事。我猜想apache必须侦听同一IP openvpn,也就是公共的,而不是本地主机。更新了我的答案。
休伯特·卡里奥

还有一件事,您确定您的openvpn版本支持此选项吗?(尝试使用openvpn --help | grep port-share)。而且您确定apache侦听已配置的端口并且SSL正常工作吗?
休伯特·卡里奥

2

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

要解决此问题,

  1. portshare [port]在OpenVPN中添加功能
  2. 设置Apache服务器以监听 [port]
  3. 安装ProxyProtocol扩展(按照回购自述文件中的说明进行操作),可从以下网址获得:https : //github.com/roadrunner2/mod-proxy-protocol
  4. ProxyProtocol On在Apache配置中添加该行。

它应该起作用并达到上述目的。刚刚发布了这篇文章,希望它能对想要做像我一样的人有所帮助。


1

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

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

将SSL请求发送到非0SSL站点时发生。我可以通过使用重现错误

  port-share localhost 80

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

HTH,

J


0

更新:我注意到网站访问者的IP地址将始终127.0.0.1位于Web服务器日志中。如果您想知道连接的起源或想使用诸如之类的工具,这将是一个问题fail2ban。如果我们使用的是OpenVPN port-sharehttps://forums.openvpn.net/viewtopic.php?t=22599),则似乎无法在Apache日志中获得访问者的真实IP地址,因此我使用了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-commandline/#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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.