内网服务器通过公网ssh代理实现内网穿透
前言
有时需要通过外网连接到内网的服务器。
- 前提:需要有广域网服务器,服务器之间免密。
1 环境
服务器类型 | 系统 | 主机名 | 用户名 | IP | 说明 |
---|---|---|---|---|---|
客户端 | Window 10 | node1 | 本机 | ssh连接工具(例如:Xshell) | |
中转服务器 | ubuntu 16.04 | node2 | user2 | 8.8.8.8 | 有广域网IP |
目标服务器 | ubuntu 16.04 | node3 | user3 | 172.16.156.101 | 局域网IP,可以访问外网 |
2 配置目标服务器
2.1 安装autossh服务
sudo apt install -y autossh
autossh命令参数解释如下:
- -f 后台运行
- -C 允许压缩数据
- -N 不执行任何命令
- -R 将端口绑定到远程服务器,反向代理
- -L 将端口绑定到本地客户端,正向代理
- -p 转发服务器B的SSH登录端口号,默认为22
结合:
- ssh -fCNR 反向代理
- ssh -fCNL 正向代理
2.2 命令行配置连接中转服务器--临时有效
建立目标服务器到中转服务器的反向代理,具体指令为
autossh -M 中转服务器端口 -fCNR [中转服务器IP]:中转服务器端口:目标服务器IP:目标服务器端口 中转服务器用户名@IP
例如:
autossh -M 5000 -o "ServerAliveInterval 30" -CNR 6000:localhost:22 $user2@8.8.8.8
说明:端口可以自定义,
- 第一次连接时不加-f后台运行,需要测试;
- -M 5000:中转服务器用来接收目标服务器的信息,如果隧道不正常而返回给目标服务器让他实现重新连接,相当于会话保持;
- -o "ServerAliveInterval 30":保持会话时间间隔,autossh中应该可以省略;
- -CNR 6000:6000为中转服务器的反向代理端口;
- localhost:22:目标Linux服务器的ssh端口,默认22。
3 配置中转服务器
3.1 测试连接目标服务器
ssh $user3@localhost -p 6000
如果可以登陆目标服务器表示成功!
3.2 建立中转服务器的正向代理
建立中转服务器的正向代理,用来做转发,具体指令为
ssh -fCNL [目标Linux服务器IP]:目标Linux服务器端口:中转服务器IP:中转服务器端口 中转服务器用户名@中转服务器IP
例:
ssh -fCNL "*:3000:localhost:6000" $user2@localhost
输入目标服务器的密码
3.3 客户端
直接配置Xshell
IP:8.8.8.8
端口:3000
用户名:$user3
密码:XXXXXXX
或者任意服务器登陆;
ssh -p 3000 $user3@8.8.8.8.8
输入目标服务器的密码
4 配置自启动
4.1 适用于CentOS6 和 CentOS7
输入
vim /etc/rc.d/rc.local
追加如下内容
autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 $user2@8.8.8.8
ServerAliveInterval:保持活力时间
ServerAliveCountMax:允许的最大会话数
授予执行权限
chmod +x /etc/rc.d/rc.local
4.2 适用于system管理的服务,如:CentOS 7 / Ubuntu 16 / Ubuntu 18
4.2.1 编写autossh自启动脚本
vim /lib/systemd/system/autossh.service
添加如下内容
[Unit]
Description=AutoSSH service
After=network.target
[Service]
Type=forking
ExecStart=/etc/autossh.local
[Install]
WantedBy=multi-user.target
Alias=autossh.service
4.2.2 编辑调用的普通脚本
vim /etc/autossh.local
添加如下内容
#!/bin/bash -e
sudo -u $user3 autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 $user2@B_ip &
4.2.3 设置开机自启动
sudo systemctl enable autossh # 加入自启动
sudo systemctl start autossh # 启动服务
sudo systemctl status autossh # 查看服务状态
参考
转载于:https://blog.51cto.com/moerjinrong/2300084