纸面上研究了一个早上,基于不同端口应该可以,但要基于域名复用 443 port ,好似不行。。
1
geligaoli 2021-11-09 13:38:42 +08:00
可以,用 stream 模块
|
2
moxuanyuan OP @geligaoli #1 基于域名呀?我看好似不行
|
3
chendy 2021-11-09 13:50:00 +08:00
前后协议不一样做不到吧
|
4
rrfeng 2021-11-09 13:50:27 +08:00 via Android
带 sni 的协议可以。
|
5
defunct9 2021-11-09 13:56:43 +08:00
可以
|
6
Tink 2021-11-09 14:08:05 +08:00 via Android
我也想知道,有没有教程
|
7
fetich 2021-11-09 14:11:18 +08:00
感觉用 iptables 更合适
|
8
HelloAmadeus 2021-11-09 14:15:17 +08:00 via iPhone
sni 了解一下
|
9
ihciah 2021-11-09 14:15:21 +08:00
SSH 又没有 sni 的,域名根本不会发出去=。=
不过换个思路,可以收集一下目标服务器的指纹然后根据这个东西分流,不过就是需要自己写代码了。 |
10
jifengg 2021-11-09 14:18:31 +08:00
之前研究过,我自己的结论是不行。代理到 ssh ,是走 tcp 协议,也就是 nginx 里的 stream 模块;域名复用走的是 http 协议,也就是 nginx 里的 http 模块。
tcp 协议里没有域名信息,没法基于域名做判断。 |
11
salmon5 2021-11-09 14:21:26 +08:00
stream 只能这样代理 https ,这是确认的,通过 SNI ;
但是 SSH 应该是不支持的 |
12
Xusually 2021-11-09 14:21:49 +08:00 1
|
13
salmon5 2021-11-09 14:23:50 +08:00
其实可以换个思路,直接用 jumpserver ,它跑在 https 443 ,通过这个管理不同的 SSH ,这是常规应用
|
14
defunct9 2021-11-09 14:32:18 +08:00 1
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; } } |
15
301 2021-11-09 14:34:06 +08:00
12 楼正解
|
16
ZeroClover 2021-11-09 14:43:58 +08:00
用跳板机,nginx 不可能实现一个 443 端口按需代理到多个 SSH 后端,SSH 又不是 TLS ,不会发送 SNI 。
|
17
ungrown 2021-11-09 14:47:09 +08:00
|
18
wonderfulcxm 2021-11-09 14:51:44 +08:00 via iPhone
可以的,stream_ssl_preread 模块通过 SNI 请求的服务器名称选择上游
|
19
nmap 2021-11-09 15:22:13 +08:00
自己写个前端 proxy ,根据 ssh/https 的协议特征识别后转发到不同端口
|