OpenVPNをポート443でリッスンするように設定し、port-share
オプションを使用してすべてのHTTPSトラフィックをApacheに渡そうとしています。関連する構成スニペットは次のとおりです。
OpenVPN
local ${PUBLIC_IP}
port 443
port-share localhost 443
Apache with SSL
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
違いはありません。
pdate 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
port-share
オプションはotherアプリケーションがリッスンするポートを設定します。
あなたがしたいことは、設定することです
ポート共有10443
そしてApacheをポート10443でリッスンするように設定します:
<your-public-ip>:10443をリッスンします
これは、2つのアプリケーションが同時に同じポートを開くことができないためです。
私のサーバーに合った答えを見つけると、OpenVPN構成のportshare
機能についてみんなが話しているのを見つけました。ただし、私の場合、ロギングやその他の機能のために実際のクライアントIPアドレスを知る必要があります。 portshare
を使用すると、サーバーのローカルIPがログに記録されることがわかりました。
これを修正するには、
portshare [port]
関数を追加[port]
をリッスンするように設定しますProxyProtocol On
を追加します。上記の目的で機能し、機能するはずです。これを投稿して、私がしたようなことをしたい人に役立つことを願っています。
OpenVPNのポート共有オプションを使用すると、トラフィックを通常のWebサーバーではなく、別のHTTPSサイトにリダイレクトできます。あなたが見ているエラー
[error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
sSL要求が非0SSLサイトに送信されると発生します。を使用してエラーを再現できます
port-share localhost 80
(443の代わりに)HTTPSサイトを正しく設定すると、ポート共有が機能します。
HTH、
JJK
更新:Webサーバーのログでは、Webサイト訪問者のIPアドレスが常に127.0.0.1
であることに気付きました。接続の発生元を知りたい場合、またはfail2ban
などのツールを使用したい場合、これは問題です。 OpenVPNのport-share
( https://forums.openvpn.net/viewtopic.php?t=を使用している場合、Apacheログにビジターの実際のIPアドレスを含める方法がないようです。 22599 )なので、透過モードでツールSSLHを使用しました: https://unix.stackexchange.com/questions/373717/how-does-sslhs-transparent-mode-work/532333#5323
元の答え:
誰かがOpenVPNアクセスサーバーを使用している場合は、/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#p786
私の場合、キーvpn.server.port_share.service
に対してコマンドを実行する必要はなく、service openvpnas restart
の代わりにコマンド./sacli start
を使用しました。
ポート4443でリッスンするようにApacheを設定したため、<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>
そして、/etc/Apache2/sites-enabled/000-default.conf
のApache SSL構成は次のように始まります:<IfModule mod_ssl.c> <VirtualHost *:4443>
注:簡単にセットアップできるため、以前はOpenVPNアクセスサーバーを使用していました。オープンソースであり、ユーザー数を制限しないという利点があるOpenVPNをセットアップする代替スクリプトもあります。例: https://github.com/Nyr/openvpn-install