最近有一些需求,服务器是部署在内网的,然后在服务器上部署了一些web服务,需要在公网上进行访问。但是由于网络的限制,公网是无法访问当前内网服务器的服务的,因此需要在内网的服务器上把80和443端口给映射到公网上,然后通过公网进行访问。本文记录下详细的操作过程。
一、准备两台服务器
这里我们准备两台服务器,一台服务器是在公司的内网的,一台服务器是在云服务器(例如阿里云上),下面的列表是假设我们准备的服务器
序号 | 服务器 | ip | 说明 |
1 | web服务器(服务器A) | 192.168.31.212 | 这台服务器是部署在内网的,没有固定外地带宽,上面部署了一个web服务,可以通过http://192.168.31.212进行访问 |
2 | 公网映射服务器(服务器B) | 181.213.243.72 | 这台服务器是在云上购买的低配云服务器只是做web端口映射使用。 |
二、配置ssh免密码登录
这里我们需要配置一个ssh免密码登录,使其可以直接在服务器A上使用ssh命令到服务器B而不需要输入密码,详细的操作步骤如下:
1)在服务器A上操作如下的命令:
#生成ssh登录公钥 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #把公钥上传到服务器B上 scp -r ~/.ssh/id_rsa.pub root@181.213.243.72:~
2)登录服务器B,操作如下的命令:
#进入到root的根目录下 cd ~ #把服务器A的公钥加入到本地的ssh文件中 cat id_rsa.pub >> ~/.ssh/authorized_keys
3)登录服务器A,测试ssh
#使用ssh登录到服务器B ssh 181.213.243.72
如果不需要输入免密,登代表配置成功了。
三、开启端口转发
这里的话,我们需要去服务器B上开启端口转发的配置,操作步骤如下:
#进入到ssh目录下 cd /etc/ssh/ #修改sshd_config文件 vim sshd_config
具体修改的内容是:
把GatewayPorts no修改为GatewayPorts yes
然后保存sshd_config文件,再重启下ssh服务
#重启ssh服务 service sshd restart
四、安装autossh
这里我们继续登录服务器A,安装这个autossh,详细的安装命令如下:
#更新下服务器的gcc yum install wget gcc make #下载autossh安装包 wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz #解压autossh安装包 tar -xf autossh-1.4e.tgz #进入到解压后的安装包 cd autossh-1.4e #执行c语言编译 ./configure #执行autossh安装 make && make install
以上步骤执行成功之后,我们就可以看到服务器有autossh命令了
五、创建映射的配置文件
这里我们继续在服务器A上操作,主要是创建对应的映射文件,操作步骤如下:
#创建一个放配置文件的文件夹 mkdir -p /home/pubserver/ys #进入到放配置文件的文件夹 cd /home/pubserver/ys #创建一个配置文件 touch ssh-ips.sh
然后我们把下面的模板放到这个配置文件中即可,配置示例内容如下:
#!/bin/bash if ! grep -q 'www.aaa.com' /etc/hosts;then echo '181.213.243.72 www.aaa.com ' >>/etc/hosts fi webport=80 sslport=443 ps -ef|grep ssh|grep -E "$webport|$sslport"|awk '{print $2}'|xargs kill -9 sleep 3 autossh -M 0 -2 -4 -Nf root@181.213.243.72 -p 22 \ -o ServerAliveInterval=5 -o ServerAliveCountMax=3 -o StrictHostKeyChecking=no -o TCPKeepAlive=yes \ -R $webport:localhost:80 \ -R $sslport:localhost:443 && echo tunnel OK || echo ERROR!
这里的话根据我们的实际情况进行修改即可,涉及到修改的地方如下图:
把内容粘贴到ssh-ips.sh文件之后,然后大家根据实际情况进行修改即可,修改完毕之后保存ssh-ips.sh这个文件,然后做如下的操作:
#给ssh-ips.sh文件授予可执行权限 chmod 777 ssh-ips.sh #执行ssh-ips.sh文件 ./ssh-ips.sh
执行完毕之后,我们在服务器A上可以使用如下的命令可以看到是否执行成功
ps -aux|grep autossh
这时候我们可以看到文件执行成功了。然后我们使用telnet可以查看是否映射成功
telnet 181.213.243.72 80 telnet 181.213.243.72 443
如果能telnet成功就代表成功了。
此时我们把www.aaa.com域名解析到外网服务器181.213.243.72上,用浏览器访问下,看看是否能成功。
以上就是使用autossh做内网穿透,使可以通过公网访问内网的详细教程。
备注:
1、这里我们用浏览器访问www.aaa.com,那么在内网服务器A上需要有nginx配置www.aaa.com域名的监听,不然的话访问不到。
2、使用这个教程,除了映射http,还可以映射其他端口,如果映射其他端口的话,我们就不需要配置如下部分:
3、这里公网服务器我们只需要做两件事:
1、接收内网服务器的ssh公钥 2、打开端口转发
所以这里公网的服务器不需要很高的配置,1C1G也可以满足需求。
还没有评论,来说两句吧...