Saya mencoba mengatur OpenVPN untuk mendengarkan pada port 443, dan kemudian meneruskan semua lalu lintas HTTPS ke Apache, dengan menggunakan port-share
opsi. Cuplikan konfigurasi yang relevan adalah:
OpenVPN
local ${PUBLIC_IP}
port 443
port-share localhost 443
Apache dengan SSL
Listen localhost:443
Klien OpenVPN saya terhubung dengan baik, tetapi ketika membuka halaman yang diaktifkan HTTPS, saya mendapatkan kesalahan. Firefox mengatakan:
SSL menerima catatan yang melebihi panjang maksimum yang diizinkan.
(Kode kesalahan: ssl_error_rx_record_too_long)
Curl berkata
curl: (35) error: 140770FC: rutinitas SSL: SSL23_GET_SERVER_HELLO: protokol tidak dikenal
Permintaan berakhir di Apache, karena saya melihat di log kesalahan pesan berikut:
[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
Entri pesan untuk koneksi HTTPS adalah
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
Menggunakan httpd-2.2.3-43.el5.centos dan openvpn-2.1.1-2.el5.
Apa yang harus saya lakukan agar berbagi port berfungsi?
Pembaruan : Menggunakan
port 443
port-share localhost 10443
dan
Listen localhost:10443
tidak ada bedanya.
Pembaruan 2 : beberapa output perintah
[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
sumber
port-share localhost 443
. Saya mencobaport-share localhost 10443
, tetapi masih tidak berhasil, kesalahan yang sama.openvpn --help | grep port-share
). Dan apakah Anda yakin bahwa apache mendengarkan pada port yang dikonfigurasi dan memiliki SSL yang berfungsi?Ketika menemukan jawaban yang sesuai dengan server saya, saya menemukan semua orang berbicara tentang
portshare
fungsi konfigurasi OpenVPN. Namun, dalam kasus saya, saya perlu mengetahui alamat IP klien aktual untuk pencatatan dan fungsi lainnya. Saya menemukan bahwa menggunakanportshare
menyebabkan IP lokal dari server akan dicatat.Untuk memperbaikinya,
portshare [port]
fungsi di OpenVPN[port]
ProxyProtocol On
di konfigurasi Apache.Itu harus bekerja dan melayani tujuan di atas. Baru saja memposting ini dan berharap ini dapat membantu seseorang yang ingin melakukan sesuatu seperti yang saya lakukan.
sumber
Opsi port-share OpenVPN memungkinkan Anda untuk mengarahkan lalu lintas ke situs HTTPS lain, bukan ke server web biasa; kesalahan yang Anda lihat
terjadi ketika permintaan SSL dikirim ke situs non-0SSL. Saya dapat mereproduksi kesalahan dengan menggunakan
(bukan 443) Jika Anda mengatur situs HTTPS Anda dengan benar maka berbagi port akan berfungsi.
HTH,
JJK
sumber
Pembaruan: Saya perhatikan bahwa alamat IP pengunjung situs web akan selalu ada
127.0.0.1
di log server web. Ini adalah masalah jika Anda ingin mengetahui asal koneksi atau ingin menggunakan alat sepertifail2ban
. Sepertinya tidak ada cara untuk memiliki alamat IP sebenarnya dari pengunjung di log Apache jika kita menggunakan OpenVPNport-share
( https://forums.openvpn.net/viewtopic.php?t=22599 ), jadi saya menggunakan alat SSLH dalam mode transparan: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333Jawaban asli:
Jika seseorang menggunakan OpenVPN Access Server, Anda harus pergi ke
/usr/local/openvpn_as/scripts/
(misalnya pada Debian) dan menjalankan perintah ini:./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
Sumber:
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
Dalam kasus saya, saya tidak perlu melakukan perintah untuk kunci
vpn.server.port_share.service
dan saya menggunakan perintahservice openvpnas restart
sebagai gantinya./sacli start
.Saya diganti
<LOCAL_IP>
dengan127.0.0.1
dan<PORT>
dengan4443
sejak saya mengkonfigurasi Apache untuk mendengarkan pada port 4443.File saya
/etc/apache2/ports.conf
dikonfigurasi seperti ini:Dan konfigurasi Apache SSL saya di
/etc/apache2/sites-enabled/000-default.conf
mulai seperti ini:<IfModule mod_ssl.c> <VirtualHost *:4443>
Catatan: Saya menggunakan OpenVPN Access Server di masa lalu karena mudah diatur. Ada juga skrip alternatif untuk mengatur OpenVPN yang memiliki keunggulan menjadi open source dan tidak membatasi jumlah pengguna, misalnya: https://github.com/Nyr/openvpn-install
sumber