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