前言
学校的内网服务器非常好用,并且在校期间无额外收费,但是国庆回家了,连不上,急.便有了
一.申请阿里云免费试用服务器
具体步骤就是注册账号,实名认证,找到适用,找一个配置一般般,能用的服务器
有大佬写过文章,这里就不说了
二.配置
问题描述:
- 公网服务器(具有公网 IP 的机器)充当跳板机,将流量转发到内网主机。
- 通过公网服务器的端口 2222 访问内网主机的 SSH 服务。
1. 在内网主机配置反向 SSH 隧道
首先,在 内网主机 上使用 SSH 反向隧道将其端口暴露在公网服务器上。
ssh -N -R 2222:localhost:22 user@PUBLIC_IP
解释:
- `-N`: 只执行端口转发,不执行远程命令。
- `-R 2222:localhost:22`: 将公网服务器的 2222 端口转发到内网主机的 22 端口。
- `user@PUBLIC_IP`: 连接到公网服务器,`user` 是公网服务器上的用户名,`PUBLIC_IP` 是其公网 IP 地址。
此时,在公网服务器上对 2222 端口的访问将被转发到内网主机的 SSH 服务。
2. 自动化反向 SSH 隧道
为了让内网主机开机自动建立反向隧道,我们选择使用 `autossh` 创建一个系统服务。
a. 安装 `autossh`:
sudo apt-get install autossh
b. 创建服务文件:
sudo nano /etc/systemd/system/reverse-tunnel.service
c. 服务文件内容如下
(根据实际情况替换 `user` 和 `PUBLIC_IP`)
[Unit]
Description=AutoSSH reverse tunnel service
After=network.target
[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N -o "StrictHostKeyChecking=no" -R 2222:localhost:22 user@PUBLIC_IP -i /home/username/.ssh/id_rsa
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
这里的/home/username/.ssh/id_rsa 是本地主机的,使用'username'要替换为你需要的,如果不知道换成谁(比如有多个用户),你可以换成当前用户
whoami
d. 保存后,执行以下命令使服务生效:
sudo systemctl daemon-reload
sudo systemctl enable reverse-tunnel.service
sudo systemctl start reverse-tunnel.service
sudo systemctl status reverse-tunnel.service
三. 在公网服务器上测试访问
在 公网服务器 上,尝试通过本地 2222 端口连接到内网主机的 SSH 服务:
ssh -p 2222 localhost
这应该可以直接连接到内网主机。
四.从其他机器连接
现在,你可以从其他机器通过公网服务器的 IP 地址和 2222 端口访问内网主机:
ssh -p 2222 user@PUBLIC_IP
- `user` 是内网主机上的用户。
- `PUBLIC_IP` 是公网服务器的 IP 地址。
注意事项
1.公网服务器的防火墙
确保公网服务器允许 2222 端口的入站流量:
sudo ufw allow 2222/tcp
2. SSH 配置
确保公网服务器的 `/etc/ssh/sshd_config` 文件允许远程端口转发:
AllowTcpForwarding yes
GatewayPorts yes
通过这些步骤,理论上应该可以成功实现通过公网服务器访问内网主机的目的
至少我成功了
------------------------------
10.5
出现了新的问题:
关闭会话后想再开启,将会超时(timeout)
根据分析,猜测应该是关闭后本地服务器没有再次发出连接,因此服务关闭了
于是:
本地和公网(必须)修改
1.编辑配置
sudo nano /etc/ssh/sshd_config
2.查找并取消注释(没有则添加)
AllowTcpForwarding yes # 允许端口转发
GatewayPorts yes # 允许远程客户端绑定端口
ClientAliveInterval 60 # 保持SSH会话活跃,防止超时断开
ClientAliveCountMax 3 # SSH允许最多3次未响应后断开
3.修改服务
sudo nano /etc/systemd/system/reverse-tunnel.service
变更ExecStart
ExecStart=/usr/bin/autossh -M 20000 -N -o "ServerAliveInterval=60" -o "ServerAliveCountMax=3" ... #之后不变
4.重启服务
sudo systemctl daemon-reload
sudo systemctl restart reverse-tunnel.service
sudo systemctl status reverse-tunnel.service
应该没问题了