内容目录
这是一个内网穿透技术的实践笔记,包含如下内容。
- 为什么我要倒腾这个东西,要解决我的什么问题?
- 什么是内网穿透?
- 具体步骤教程
本教程并不是从小白开始教起,虽然直接照着我的步骤做一遍也可以复现(前提是有一个有公网IP的云服务器),但是你需要基础计算机网络的知识,你才能彻底理解你在干啥。
1. 为什么我需要内网穿透
本人有一台有显卡的windows电脑,一台没有显卡的windows笔记本,以及一个有公网IP的云服务器。
由于AI学习过程中的需要经常调用显卡算力资源,但是每天从外面跑回家里或者宿舍跑模型实在是太不方便了,所以我就开始思考:又没有什么方法能让我用我的小笔记本远程连接我的显卡机,远程给他下发命令任务呢?
于是我就开始思考和实践解决方法,一开始尝试了Zerotier,在几个设备之间组了虚拟局域网,但是说实话我没搞懂这玩意到底怎么工作的,而且有时候总是断联,之后就弃用了。然后又尝试了一些桌面远联软件,发现他们都是直接把整个桌面的画面传过来给你操控,但是其实我只是想调用终端以及ssh连接,所以有点浪费网络的感情,不过最蛋疼的还是不够稳定,这几个软件在服务器上有时候总会莫名其妙停摆,它摆几次之后我也开摆,就没怎么管了。
就这样持续了一段时间,显卡机正式没怎么干,CSGO的画面倒是处理了很多。现在转眼到了暑假,终于有时间可以倒腾一下了,然后我再次探索解决方案,发现了一个神奇的,我刚好能做的方案,也就是 内网穿透。
2. 什么是内网穿透?
正常情况下,只有一个局域网内的服务器可以相互访问,如果不是一个局域网内,就互联不上了。这是因为不是每个电脑都有公网IP(不多说了,上过计算机网络的都知道)。
简单理解,就是不在一个wifi下就没办法ssh连接。
而有公网IP的服务器,每个电脑,无论你有没有公网IP,都是可以访问和接受来自它的信息的。因此,它就可以充当一个 中转服务器, 把两台原本无法不能互相连接的主机连接起来,让后这两主机就可以互相通信了。

原理就是这么简单,现在直接进入实操流程。
3. 具体步骤
3.1 买一个有公网IP的服务器
这里不多说,网上有很多资源。
3.2 给显卡机安装openssh服务
首先windows+I, 搜索框搜索可选功能之后点进去:

在添加可选功能里面搜索openssh服务器,然后安装

3.3 给云服务器配置frps服务
- 在这个官方frp页面下载安装包,传到服务器上
根据你的云服务器系统选择安装包,一般选linux_amd64那个
- 下载之后是个压缩包,解压到
/root目录下
tar -zxvf frp_0.63.0_linux_amd64.tar.gz

- 进入文件夹,编辑配置
frps.toml文件- 绑定一个frps的端口
- 设置一个安全token,之后frpc要用
# frps.toml 配置示例
bindPort = 7000 # frp 服务端与客户端通信的端口,重要!
auth.token = "" # 这里设置一个安全token
- 设置为系统服务,使其可以方便地启动,停止,配置后台运行和开机自启动
# 1. 先安装systemd
apt install systemd
# 2. 创建frps.service文件
sudo vim /etc/systemd/system/frps.service
在文件中写入如下内容:
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
然后你就可以使用systemd管理frps服务了(这里只是命令示例,别执行)
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
我们先不管这些,执行frps开启自启动服务,然后启动并看下它的状态如何:
sudo systemctl start frps
sudo systemctl status frps
出现类似的界面就是成功了。

3.4 给显卡机安装frpc服务
- 安装frpc客户端
还是在这个官方frp页面下载安装包,然后随便找个地方解压。
这里选择windows的安装包就行
- 配置
frpc.toml文件
解压好之后直接编辑frpc.toml文件,配置示例如下:
serverAddr = "" # 你云服务器的公网IP
serverPort = 7000
auth.token = "" # 安全连接token,和服务器端的一致
[[proxies]]
name = "windows-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
- 试着启动一下
.\frpc.exe -c frpc.toml

出现这个界面就是成功
- 设置为开机自启动
同样的,设置为开机自启动,因为懒得每次开电脑在开一遍
首先安装一个nssm,它可以很方便的把简单命令打包成系统服务。
scoop install nssm
接下来创建一个名字叫frpc的系统服务
nssm install frpc
然后会弹出来一个弹窗,你需要把几个选项填一下:

-
Path (路径): 点击 … 按钮,选择你的 frpc.exe 文件的完整路径。
例如:C:\frp\frpc.exe -
Startup directory (启动目录): 填写 frpc.exe 所在的目录。
例如:C:\frp -
Arguments (参数): 填写 frpc 启动所需的参数 -
例如:c frpc.toml
- 设置为开启自启,启动服务
Set-Service -Name frpc -StartupType Automatic
net start frpc # 启动服务
Get-Service -Name frpc # 看看服务启动没

这样就是成功启动了。
4. 远程连接
-
看看你是谁
要ssh连接,首先要知道显卡机上我的用户名是什么,打开cmd,输入whoami,你就知道你在显卡机上的用户名了。 -
远程连接
ssh -o Port=6000 显卡机用户名@云服务器IP

然后我就成功的登录进去了。这下终于可以愉快的远程给他分配深度学习任务,不用每次都跑回来本地跑了。
758

被折叠的 条评论
为什么被折叠?



