纸面上研究了一个早上,基于不同端口应该可以,但要基于域名复用 443 port ,好似不行。。

纸面上研究了一个早上,基于不同端口应该可以,但要基于域名复用 443 port ,好似不行。。

|
geligaoliNov 9, 2021
1
可以,用 stream 模块
|
|
2
@geligaoli #1 基于域名呀?我看好似不行
|
|
chendyNov 9, 2021
3
前后协议不一样做不到吧
|
|
rrfengNov 9, 2021 via Android
4
带 sni 的协议可以。
|
|
defunct9Nov 9, 2021
5
可以
|
|
TinkNov 9, 2021 via Android
6
我也想知道,有没有教程
|
|
fetichNov 9, 2021
7
感觉用 iptables 更合适
|
|
HelloAmadeusNov 9, 2021 via iPhone
8
sni 了解一下
|
|
ihciahNov 9, 2021
9
SSH 又没有 sni 的,域名根本不会发出去=。=
不过换个思路,可以收集一下目标服务器的指纹然后根据这个东西分流,不过就是需要自己写代码了。 |
|
jifenggNov 9, 2021
10
之前研究过,我自己的结论是不行。代理到 ssh ,是走 tcp 协议,也就是 nginx 里的 stream 模块;域名复用走的是 http 协议,也就是 nginx 里的 http 模块。
tcp 协议里没有域名信息,没法基于域名做判断。 |
|
salmon5Nov 9, 2021
11
stream 只能这样代理 https ,这是确认的,通过 SNI ;
但是 SSH 应该是不支持的 |
|
12
|
|
salmon5Nov 9, 2021
13
其实可以换个思路,直接用 jumpserver ,它跑在 https 443 ,通过这个管理不同的 SSH ,这是常规应用
|
|
14
stream {
upstream ssh { server 172.18.31.2:22; } // set up SSL session with certificate for marvel.com, www.marvel.com upstream marvel { server 127.0.0.1:4431; } server { listen 127.0.0.1:4431 ssl; ssl_certificate certs/marvel.pem; ssl_certificate_key certs/marvel.key; proxy_ssl on; proxy_pass https_backend; } // set up SSL session with certificate for dccomics.com, www.dccomics.com upstream dccomics { server 127.0.0.1:4432; } server { listen 127.0.0.1:4432 ssl; ssl_certificate certs/dccomics.pem; ssl_certificate_key certs/dccomics.key; proxy_ssl on; proxy_pass https_backend; } // route connection to the tunnel with correct certificate map $ssl_preread_server_name $upstream { default ssh; marvel.com marvel; www.marvel.com marvel; dccomics.com dccomics; www.dccomics.com dccomics; } upstream ssh { server 172.18.31.2:22; } server { listen 443; ssl_preread on; proxy_pass $upstream; } } |
|
301Nov 9, 2021
15
12 楼正解
|
|
ZeroCloverNov 9, 2021
16
用跳板机,nginx 不可能实现一个 443 端口按需代理到多个 SSH 后端,SSH 又不是 TLS ,不会发送 SNI 。
|
|
ungrownNov 9, 2021
17
|
|
wonderfulcxmNov 9, 2021 via iPhone
18
可以的,stream_ssl_preread 模块通过 SNI 请求的服务器名称选择上游
|
|
nmapNov 9, 2021
19
自己写个前端 proxy ,根据 ssh/https 的协议特征识别后转发到不同端口
|