【linux网络】linux下实现反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

对我们来言,最直接的解释就是,我们可以通过反向代理来在外网的机器访问内网(公司的局域网)的linux主机服务器。

目的:外网主机C能访问(ssh)内网主机 A

需求:C ——  外网的任意linux主机(手机也可以 安装 Juile ssh即可对云服务器ssh 登录)

          B ——  我们自己独立的云服务器(连接的转接点,推荐腾讯云入门套餐即可10块一月)

          A ——  处于内网(局域网)的虚拟机或者linux主机

正文:

一、首先设置ssh免密码登录

在 内网主机 A 上生产公钥和私钥,并把公钥内容拷到服务器B的~/.ssh/authorized_keys里

$ ssh-keygen -t rsa
...(一直按Enter,最后在~/.ssh/下生成密钥)
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostB
把本机的公钥追到hostB的 ~/.ssh/authorized_keys 里

二、在内网主机A执行反向连接建立端口转发

autossh -M 5678 -NfR 1234:localhost:22 userB@hostB -p 22

语句解释:autossh 没有在线安装即可 (自动登录) 

-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连 

-N表示不执行远程命令,-f表示后台运行,-R则针对后面的绑定参数进行端口映射。

整体意思是:将本机(服务器A)的22与远程服务器的1234端口进行绑定,相当于远程端口映射(Remote Port Forwarding)。

!!!注:如果这步提示Permission denied, please try again. 首先确定我们是在root用户下登录的,如果还是不可以则进行一下操作:

1、vim /etc/ssh/sshd_config    

2、将PermitRootLogin without-password    改为   PermitRootLogin yes

3、service sshd restart

三、此时我们在服务器B 执行以下命令

ss -ant

即可看到端口转发成功

State      Recv-Q Send-Q                           Local Address:Port                                          Peer Address:Port              
LISTEN     0      128                                  127.0.0.1:5678                                                     *:*                  
LISTEN     0      128                                  127.0.0.1:1234                                                     *:*                  
LISTEN     0      128                                          *:22                                                       *:*                  
LISTEN     0      128                                          *:1022                                                     *:*                  
ESTAB      0      0                                  172.21.0.11:22                                          113.208.119.46:54996              
ESTAB      0      0                                  172.21.0.11:55862                                         169.254.0.55:5574               
ESTAB      0      0                                  172.21.0.11:22                                          113.208.119.46:54967              
LISTEN     0      128                                         :::22                                                      :::*                  
LISTEN     0      128                                         :::1022                                                    :::*  

四、在服务器B 通过刚刚建立的反向通道,连接到服务器A

$ ssh localhost -p 1234

即可登录 。(主机C 访问A 即可以通过ssh 登录 B 在 通过 上面的反向通道 连接A )

为了保持端口转发的一直在线状态,我们将之前的建立转发的命令 (autossh -M 5678 -NfR 1234:localhost:22 userB@hostB -p 22)增加开机自启项中。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sudo autossh -M 5678 -NfR 1234:localhost:22 userB@hostB -p 22
exit 0

参考自:https://blog.csdn.net/Weiye__Lee/article/details/79337872

你可能感兴趣的:(Linux)