Ich versuche, OpenVPN so einzurichten, dass es Port 443 überwacht und dann den gesamten HTTPS-Verkehr mithilfe der port-share
Option an Apache weiterleitet. Relevante Konfigurations-Snippets sind:
OpenVPN
local ${PUBLIC_IP}
port 443
port-share localhost 443
Apache mit SSL
Listen localhost:443
Mein OpenVPN-Client stellt eine gute Verbindung her, aber beim Öffnen der HTTPS-fähigen Seite werden Fehler angezeigt. Firefox sagt:
SSL hat einen Datensatz erhalten, der die maximal zulässige Länge überschritten hat.
(Fehlercode: ssl_error_rx_record_too_long)
Sagt Curl
Curl: (35) Fehler: 140770FC: SSL-Routinen: SSL23_GET_SERVER_HELLO: Unbekanntes Protokoll
Die Anfrage endet bei Apache, da ich in den Fehlerprotokollen die folgenden Meldungen sehe:
[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
Der Nachrichteneintrag für eine HTTPS-Verbindung lautet
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
Verwenden von httpd-2.2.3-43.el5.centos und openvpn-2.1.1-2.el5.
Was muss ich tun, damit die Portfreigabe funktioniert?
Update : Verwenden
port 443
port-share localhost 10443
und
Listen localhost:10443
macht keinen Unterschied.
Update 2 : Einige Befehlsausgaben
[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
quelle
port-share localhost 443
. Ich habe es versuchtport-share localhost 10443
, aber es hat immer noch nicht funktioniert, der gleiche Fehler.openvpn --help | grep port-share
). Und sind Sie sicher, dass Apache den konfigurierten Port überwacht und SSL funktioniert?Als ich eine Antwort fand, die zu meinem Server passt, fand ich alle, die über die
portshare
Funktion der OpenVPN-Konfiguration sprachen . In meinem Fall muss ich jedoch die tatsächliche Client-IP-Adresse für die Protokollierung und andere Funktionen kennen. Ich habe festgestellt, dass bei Verwendungportshare
die lokale IP des Servers protokolliert wird.Um dies zu beheben,
portshare [port]
Funktion in OpenVPN[port]
ProxyProtocol On
in der Apache-Konfiguration hinzu.Es sollte funktionieren und dem oben genannten Zweck dienen. Habe das gerade gepostet und hoffe, es kann jemandem helfen, der etwas tun möchte, wie ich es getan habe.
quelle
Mit der Port-Share-Option von OpenVPN können Sie Datenverkehr auf eine andere HTTPS-Site und nicht auf einen normalen Webserver umleiten. der Fehler, den Sie sehen
tritt auf, wenn eine SSL-Anforderung an eine Nicht-0SSL-Site gesendet wird. Ich kann den Fehler mit reproduzieren
(anstelle von 443) Wenn Sie Ihre HTTPS-Site korrekt eingerichtet haben, funktioniert die Portfreigabe.
HTH,
JJK
quelle
Update: Ich habe festgestellt, dass sich die IP-Adresse der Website-Besucher immer
127.0.0.1
in Webserver-Protokollen befindet. Dies ist ein Problem, wenn Sie den Ursprung einer Verbindung kennen oder ein Tool wie verwenden möchtenfail2ban
. Es sieht so aus, als ob es keine Möglichkeit gibt, die echte IP-Adresse des Besuchers in Apache-Protokollen zu haben, wenn wir OpenVPNs verwendenport-share
( https://forums.openvpn.net/viewtopic.php?t=22599 ), also habe ich das Tool SSLH verwendet im transparenten Modus: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333Ursprüngliche Antwort:
Wenn jemand OpenVPN Access Server verwendet, müssen Sie zu
/usr/local/openvpn_as/scripts/
(zum Beispiel unter Debian) gehen und diesen Befehl ausführen:./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
Quelle:
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
In meinem Fall musste ich den Befehl für den Schlüssel nicht ausführen
vpn.server.port_share.service
und habeservice openvpnas restart
stattdessen den Befehl verwendet./sacli start
.Ich habe
<LOCAL_IP>
mit127.0.0.1
und<PORT>
mit ersetzt,4443
seit ich Apache so konfiguriert habe, dass er Port 4443 überwacht.Meine Datei
/etc/apache2/ports.conf
ist folgendermaßen konfiguriert:Und meine Apache SSL-Konfiguration
/etc/apache2/sites-enabled/000-default.conf
beginnt wie folgt:<IfModule mod_ssl.c> <VirtualHost *:4443>
Hinweis: Ich habe in der Vergangenheit OpenVPN Access Server verwendet, da die Einrichtung einfach war. Es gibt auch alternative Skripte zum Einrichten von OpenVPN, die den Vorteil haben, Open Source zu sein und die Anzahl der Benutzer nicht zu begrenzen, zum Beispiel: https://github.com/Nyr/openvpn-install
quelle