什么是 Serveo
Serveo
是一个免费的内网穿透服务,Serveo
可以将本地计算机暴露在互联网上,官方声称其为 Ngrok
的绝佳替代品。
Serveo
其最大优点是使用现有的 SSH
客户端,无需安装任何客户端软件,即可完成端口转发。
Serveo
工作原理很简单:当用户通过 SSH
连接到 Serveo
时会与该网站建立一个远程代理,Serveo
随后会生成一个 公共 URL
,任何人都可以通过这个 URL
访问你的本地计算机。
项目地址: https://serveo.net
使用 Serveo
Serveo
的使用非常简单,只需要可以使用 SSH
客户端并且能连接到互联网的任意系统都行。比如:Linux
、Windows
、MacOS
等系统,就算是 Android
、iOS
也同样没问题。下面我们来看几个最常用的使用实例:
- 开放本地服务到公网
将一个本地应用的 8080 端口映射到公网中。
1 | # 如果要转发其它端口,只需替换端口为其它就可以了 |
SSH
连接成功后,会随机生成一个 serveo.net
二级域名。随后你就可以使用浏览器访问这个随机生成的二级域名 heryum.serveo.net
间接访问到本地计算机 8080 端口上的服务了。
SSH
初次和一个新服务器建立连接时会有提示,直接选择 yes 即可。
如果你不想使用随机域名,想指定一个固定的二级域名也是可以的。
1 | # 这里指定为 ywzm.serveo.net,可以根据自身情况进行替换 |
SSH
连接成功后,此时就可以在公网上使用 ywzm.serveo.net
访问到你本地计算机 8080 端口的服务了。
上面的例子中,我们转发的是 HTTP
服务。如果你需要转发的是 TCP
服务,又应该怎么做呢?其实方法也很简单,同样只需设置公网的转发端口和本地端口就可以了。例如:我们需要将本地 3306 端口转发到公网中,使用下面命令即可。
1 | # 可以自行设置公网端口,这里设置为 1492 |
- 将本地 SSH 重定向到公网
在很多场景下,我们需要远程访问到本地计算机的 SSH
服务。要实现这样的需求也很简单,只需要使用下面的命令。
1 | # 名称为自定义的,这里设置为 myhost |
连接成功后,接下来你就可以从公网上对这个内网计算机的 SSH
进行访问了。
1 | $ ssh -J serveo.net myuser@myhost |
-J
选项是在 OpenSSH 7.3
版本才引入的,如果你使用的 SSH
客户端版本较旧,则可以使用 ProxyCommand
选项来替代。
1 | $ ssh -o ProxyCommand="ssh -W myhost:22 serveo.net" user@myhost |
一些其它技巧
- 保持 SSH 连接不超时
众所周知,SSH
连接一旦超时就会自动断开,这样就很容易造成服务中断。这里我们只需给 SSH
连接增加一个保活参数 -o ServerAliveInterval=60
就可以了。
1 | # 每隔 60 秒做一次连接保活 |
- 对 SSH 连接进行守护
上面的方法虽然可以解决超时的问题,但进程始终是在前台运行的。为了彻底解决这个问题,官方推荐使用 AutoSSH
来进行进程守护。
AutoSSH
是一个用来对SSH
连接进行监控的程序,可在遇到程序问题或者是网络问题时自动进行重连,以达到长期保持SSH
稳定连接的目的 。
- 安装 AutoSSH
1 | # Debian / Ubuntu 系统 |
- 将 AutoSSH 加入到系统服务
这里以加入到 Systemd
系统服务为例,此方法适用于 CentOS 7
、Debian 8
、Ubuntu 16
及以上系统版本。首先,我们创建一个 AutoSSH 的 Systemd 服务。
1 | $ cat > /etc/systemd/system/autossh.service <<EOF |
AutoSSH
的-M
参数主要用于指定一个监听端口来监视SSH
连接状态,这里指定为 0 的主要目的是禁用AutoSSH
的监控端口。保活依然使用SSH
自己的ServerAliveInterval
和ServerAliveCountMax
选项来完成。
其次,Systemd
系统服务创建完成后,我们启动这个 AutoSSH
的服务并设置为开机自启。
1 | $ systemctl start autossh |
- 如果你无法通过 22 端口连接到 Serveo,官方还预留了 443 端口给你使用
1 | $ ssh -p 443 -R 80:localhost:8080 serveo.net |
- 使用自定义的域名 / 子域名
默认情况下,我们都是使用的 Serveo
生成的二级域名进行连接的。如果你想使用自己的域名也是可以的,方法非常简单。只需要在你的域名所在 DNS 中添加一条 A 记录和一条 TXT 记录就可实现。
4.1 添加一条 A 记录
1 | A | serveo | 159.89.214.31 |
4.2 添加一条 TXT 记录
1 | TXT | serveo | authkeyfp=SHA256:pmc7ZRv7ymCmghUwHoJWEm5ToSTd33ryeDeps5RnfRY |
authkeyfp
后面跟的那一串字符是RSA
密钥指纹,你可以使用ssh-keygen -l
命令进行查看。
DNS 解析记录增加好后,你就可以使用自定义域名进行连接了。
1 | $ ssh -R serveo.ywzm.org:80:localhost:3000 serveo.net |
至此,Serveo
的基本用法就介绍完了。如果你对它有更多的兴趣,欢迎去官网进行探索。