利用SSH做内网穿透的方法【简单有效】
内网穿透
通常在局域网里的服务器无法被外网访问,但是通过一个公网IP就可以做到流量转发。
具体流程是:
- 现在内网和公网IP建立一个流量转发连接
在内网机器上执行的ssh命令是:
nohup ssh -CqTnN -R 公网IP:8022:127.0.0.1:22 ubuntu@公网IP > /dev/null 2>&1 &
- 通过外网IP和上面创建的端口8022建立的连接就可以把任何服务流量转发到内网。
上面以ssh服务为例,就可以通过8022连接到内网服务器。当然不只是ssh的22端口, 80,3306,都是一样的道理。
高可用
到此为止,内网穿透已经做完了,如果再做点高可用的工作就是,定期检查连接,防止自动断掉,在.ssh目录下的config文件中加上自动刷新连接的配置:
Host myserver
HostName 公网IP
Port 22
User ubuntu
IdentitiesOnly yes
IdentityFile /home/ubuntu/.ssh/id_rsa
ServerAliveInterval 30
把上面的ssh命令做成一个脚本,配置到crontab里
#!/bin/bash
APP_NAME=公网IP:8022:127.0.0.1:22
echo "try to stop service..."
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]; then
echo Application is already stopped
else
echo kill $PID
kill -9 $PID
fi
echo "start service..."
nohup ssh -CqTnN -R 公网IP:8022:127.0.0.1:22 myserver > /dev/null 2>&1 &
上面的脚本可以自动启动一个连接,但是如果挂掉了,就得跑去单位一趟。我们做成一个crontab,定期刷新连接. 假如上面的脚本是在/opt下,文件名是tunnel_ssh,那么执行命令:
crontab -e
添加下面内容:
2 4 * * * cd /opt&sh tunnel_ssh
更多内容关注公众号:8分钟读书

浙公网安备 33010602011771号