前段时间把家里的 Mac mini 改造成家庭服务器(就是用 emby jellyfin komga 搭建了私人影视库和漫画库),只要家里的手机,电视和这个Mac mini连接到同一个局域网,就可以随时随地观看和管理影视和漫画。
但是家里没有公网 ip,导致无法在外网访问,所以需要内网穿透。
「内网穿透」有很多种方式,比如 frp、ngrok、sshtunnel、jumpserver 等等。
我选择了 frp,但是在此之前我先试用 ssh ,📝 特此记录下来。
无论是 frp 还是 ssh,都需要有一台服务器,顺便学习一下 linux,你肯定很好奇,都买服务器了,你就不能把资源放服务器上吗?还穿透?
那是因为服务器的存储太贵,而且资源保存着本地比较有安全感,还隐私。
如果你不打算买服务器,可以选一些免费的内网穿透方案,比如 ngrok,但是 ngrok 需要你有一个域名,而且 ngrok 的免费版限制很多,比如只能使用一个域名,而且只能使用 http 协议。
好了,废话不多说,开始吧。
使用 SSH 实现内网穿透 #
1. 在你的本地计算机上设置 SSH: #
- 确保你的本地计算机已安装 SSH 客户端。
- 如果你使用的是 Windows,可以安装如 Putty 这样的 SSH 客户端。
2. 在服务器上设置 SSH 服务: #
- 确保你的服务器安装了 SSH 服务。
- 在服务器的 SSH 配置文件中(通常是
/etc/ssh/sshd_config
),可能需要启用端口转发。查找并确保AllowTcpForwarding yes
和GatewayPorts yes
被设置。 - 手动添加:
AllowTcpForwarding yes
GatewayPorts yes
- 重启服务:
sudo systemctl restart sshd
3. 建立 SSH 隧道: #
- 从本地计算机上,你可以使用以下命令来建立 SSH 隧道:
ssh -R <远程端口>:localhost:<本地端口> 用户名@公网服务器IP
- 这里,
<远程端口>
是在公网服务器上打开的端口,<本地端口>
是你想从外部访问的本地计算机上的服务端口。 - 例如,如果你想通过公网服务器的端口 80 访问本地计算机上的端口 80,命令将是:
ssh -R 80:localhost:80 root@4x.xx.xxx.xxx
系统会提示你输入该用户名对应的密码。一旦输入正确的密码,SSH 隧道就会建立
4. 访问服务: #
- 一旦隧道建立,你可以通过访问
公网服务器IP:远程端口
来访问你的本地服务。
记得你的服务器上要放行对应端口 👇
查询放行的端口: #
sudo netstat -tuln
开端:开启端口 #
- 去服务器商的控制面板开启放行端口
- 服务器上开启放行端口
CentOS 开启放行端口 👇 #
# 开启 firewalld 服务(如果没有开启的话)
sudo systemctl start firewalld
sudo systemctl enable firewalld
#开放 7000 8080 端口
sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
#重载firewalld以应用更改
sudo firewall-cmd --reload
这里,--zone=public
指定了公共区域,这是大多数情况下默认的区域。--add-port=25600/tcp
添加了对 25600 端口的 TCP 流量的支持。--permanent
使这个规则永久生效,即在防火墙重启后仍然有效。
Ubuntu 开启放行端口 👇 #
sudo ufw allow 7000
sudo ufw allow 8080
总结 #
- 服务端要配置一下 sshd
- 打开放行端口
- 客户端/本机要有 ssh 客户端,发送隧道指令
- 这样就可以访问了
缺点是,你必须一直开着这个指令窗口~ 就不是很优雅,最好是能挂在后台
ssh 学习一下就好,frp 听说是更加好的方案!
所以后面要说的就是 frp-内网穿透!