問題引出
華爲搞活動,送了多臺虛擬服務器,但只給了兩個彈性公網ip,沒有贈送NAT網關。一個彈性公網ip只能綁定到一個虛擬服務器,在本地控制服務器、部署環境的時候,很不方便。最後研究了很久終於實現了,把不同服務器的ssh映射的到一個彈性公網ip的不同端口上。主要實現原理,在綁定了公網ip的服務器上安裝nginx實現ssh轉發。
解決過程
vpc準備
-
在華爲雲官網控制檯建立虛擬私有云VPC
建立虛擬私有云
-
將各服務器加入剛剛建立的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的轉發規則和端口