通过nginx转发ssh请求,实现一个公网ip连接多个华为云服务器

问题引出

华为搞活动,送了多台虚拟服务器,但只给了两个弹性公网ip,没有赠送NAT网关。一个弹性公网ip只能绑定到一个虚拟服务器,在本地控制服务器、部署环境的时候,很不方便。最后研究了很久终于实现了,把不同服务器的ssh映射的到一个弹性公网ip的不同端口上。主要实现原理,在绑定了公网ip的服务器上安装nginx实现ssh转发。

解决过程

vpc准备

  1. 在华为云官网控制台建立虚拟私有云VPC

     

    建立虚拟私有云

  2. 将各服务器加入刚刚建立的vpc,并设置服务器ip在vpc下的同一个子网里。主要是各服务器通过局域网ip可以相互访问到。

     

    切换vpc

nginx部署和stream转发

1.安装make

yum -y install gcc automake autoconf libtool make

2.安装c++编译环境,若已安装则跳过

yum install gcc gcc-c++

3.安装OpenSSL

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz
tar -zxvf openssl-1.1.1b.tar.gz
cd openssl-1.1.1b
./config && make && make install

4.安装PCRE库
作用是让 Nginx 支持 Rewrite 功能

cd /usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz 
tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40
./configure && make && make install

5.安装zlib库

cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure && make && make install

6.安装Nginx

cd /usr/local/src
wget http://nginx.org/download/nginx-1.15.10.tar.gz
tar -zxvf nginx-1.15.10.tar.gz
cd nginx-1.15.10
# 注意--with-stream参数,这里一定要有
./configure --with-stream && make && make install

配置转发,启动nginx

1.查询nginx的安装位置

whereis nginx

 

2.修改配置文件,添加stream转发

vi  /usr/local/nginx/conf/nginx.conf

在里面添加转发代码

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
# ssh的地址
stream {
upstream ssh {
server  192.168.0.6:22;
}
upstream ssh2 {
server  192.168.0.3:22;
}
upstream ssh3 {
server  192.168.0.7:22;
}
upstream ssh4 {
server  192.168.0.2:22;
}
## 多个转发服务
server { 
listen       33;
proxy_pass ssh;
proxy_connect_timeout 1h;
proxy_timeout 1h;
}

server { 
listen       44;
proxy_pass ssh2;
proxy_connect_timeout 1h;
proxy_timeout 1h;
}
server {
listen       55;
proxy_pass ssh3;
proxy_connect_timeout 1h;
proxy_timeout 1h;
}
server { #里面可以有多个监听服务,配置监听端口和代理的ip和端口就可以进行tcp代理了
listen       66;
proxy_pass ssh4;
proxy_connect_timeout 1h;
proxy_timeout 1h;
}

}

http {# 后面的配置一般不用改

3.启动nginx

sudo /usr/local/nginx/sbin/nginx

4.打开防火墙上的转发端口

firewall-cmd --zone=public --add-port=33/tcp --permanent
firewall-cmd --zone=public --add-port=44/tcp --permanent
firewall-cmd --zone=public --add-port=55/tcp --permanent
firewall-cmd --zone=public --add-port=66/tcp --permanent
firewall-cmd --reload

华为云安全组配置

注意,只配置centos的防火墙可能还不够,要设置你的每个服务器的使用的安全组的出入规则,需要允许这些接口访问。

 

安全组设置

配置完成

现在通过工具ssh同一公网ip的33、44、55、66接口,就可以分别控制不同的服务器了

重点回顾

回顾这么长的过程,关键点就是两点

1.安装 nginx时安装stream模块

./configure --with-stream && make && make install

2.nginx的配置文件中设置各ssh的转发规则和端口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章