nginx 实现 sshd 的端口转发功能

警告
本文最后更新于 2022-09-13,文中内容可能已过时。

通过 nginx 实现端口转发

安装 nginx with stream

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
## 如果是从源代码安装,需要在编译时候配置
 ./configure  --prefix=/opt/apps/nginx --with-stream
 make && make install

## 或者直接用下面的命令安装
#执行下面的命令,根据提示完成安装
wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh && bash nginx.sh

#安装完成后执行下面的命令让环境变量生效
source /etc/profile

#执行下面的命令查看nginx信息
nginx -V

## 在版本 1.9 以上会出现 --with-stream,即可证明可以用 sshd 断隧道功能了

配置端口转发

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
cd /etc/nginx
vim nginx.conf


## stream 是与 http 通级别的

#... ...
#... ...
events {
    use epoll;
    worker_connections  65535;
}
#stream配置
stream {
    #将12345端口转发到192.168.1.23的3306端口
    server {
        listen 12345;
        proxy_connect_timeout 1h;
        proxy_timeout 1h;
        proxy_pass 192.168.1.23:3306;
    }
    #将tcp 1022端口转发到192.168.1.23 22端口
    server {
        listen 1022 reuseport;
        proxy_timeout 1h;
        proxy_pass 192.168.1.23:22;
    }
    #将udp 53端口转发到192.168.1.23 53端口
    server {
        listen 53 udp reuseport;
        proxy_timeout 1h;
        proxy_pass 192.168.1.23:53;
    }
    #ipv4转发到ipv6
    server {
        listen 9135;
        proxy_connect_timeout 10s;
        proxy_timeout 30s;
        proxy_pass [2607:fcd0:107:3cc::1]:9135;
    }
}
http {
#... ...
#... ...
}
  • listen:后面填写源端口(也就是当前服务器端口),默认协议为TCP,可以指定为UDP协议
  • proxy_connect_timeout:连接超时时间
  • proxy_timeout:超时时间
  • proxy_pass:填写转发目标的IP及端口号

这样,我们可以访问 nginx 所在网络的指定端口,去访问目标机器

1
2
3
nginx -s reload

ssh -p 1022 user@127.0.0.1

相关内容

william 支付宝支付宝
william 微信微信
0%