Open2
TLSなechoサーバ + ngx_stream_ssl_preread_module
socat でTLSのechoサーバーを立てる
$ socat OPENSSL-LISTEN:8443,cert=example.crt,key=example.key,verify=0,fork EXEC:'cat'
openssl s_client で繋げる
$ openssl s_client -connect localhost:8443
(略)
foo
foo
bar
bar
https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html を使ってnginxでTCPサーバーを立てる
stream {
map $ssl_preread_server_name $name {
localhost backend;
default backend2;
}
upstream backend {
server 127.0.0.1:8443;
}
upstream backend2 {
server 127.0.0.1:8444;
}
server {
listen 9443;
proxy_pass $name;
ssl_preread on;
}
}
- nginx は 9443 を listen
- SNI で ClientHello が
localhostの場合は 127.0.0.1:8443 (socatが待っているport) - それ以外は 127.0.0.1:8444 に振る設定 (繋がらない)
nginx(9443) に SNI (-servername localhost) で繋げると socat に TCP で proxy される。
$ openssl s_client -connect localhost:9443 -servername localhost
Connecting to 127.0.0.1
(略)
foo
foo