前言
由于工作需要使用服务器的IP是内网IP,在家之后就没有办法远程办公了。所以在网上搜了一些关于内网穿透的一些教程。最开始使用的是cpolar,这个不需要root权限,也不需要公网ip,就直接可以做内网穿透,但是缺点就是,他提供的连接隧道是不稳定的,每个24小时都会切换一下端口,所以不符合我的需求。但是在后面说教程的时候,我会简单的提一下这个该怎么用。主要还是讲一下关于frp内网穿透。
注意frp我试了一下,穿透一台客户端还行,穿透多台的时候会出问题,建议大家下载0.58.1版本的frp,文章内容我也做了一些更新。—2024.6.9
1. Cpolar内网穿透
1.1注册cpolar账号
cpolar一般用于临时内网穿透,首先需要去官网注册一个账号:https://www.cpolar.com,选择免费的套餐就可以了,这个我就不赘述了。
1.2无root安装screen
一般内网穿透的进程都需要后台运行的,直接终端运行的话就是前台进程,关闭当前终端之后这个进程也会被随之杀死,所以是不可行的。当然可以使用nohup
命令,但是不方便管理,screen
是一个不错的选择用于管理不同的任务,如果你已经安装过了screen就可以跳过这个步骤了,这里讲的是不需要root安装screen。
#进入你想安装screen的目录下面,我一般是选择一个创建一个app目录,然后在下面放一些应用。
cd
mkdir app
cd app & mkdir screen
cd screen
pwd
#复制pwd的输出的路径
#进入scream目录之后开始下载安装包
wget http://ftp.gnu.org/gnu/screen/screen-4.9.0.tar.gz
#解压
tar -zxvf screen-4.9.0.tar.gz
cd screen-4.9.0
#运行指令产生编译环境,编译、安装
./autogen.sh
./configure --prefix= 粘贴刚才复制的路径
make
make install
#添加环境变量
vim ~/.bashrc
#在最后一行追加如下内容,保存退出
export PATH=粘贴刚才复制的路径/bin:$PATH
#更新环境变量
source ~/.bashrc
1.3下载cpolar
#在app目录下创建一个新的文件夹cpolar
cd ~/app & mkdir cpolar
#下载解压
wget https://static.cpolar.com/downloads/releases/3.3.12/cpolar-stable-linux-amd64.zip
unzip cpolar-stable-linux-amd64.zip
cd cpolar-stable-linux-amd64/
#复制pwd的输出的路径
pwd
#添加cpolar的环境变量
vim ~/.bashrc
#最后一行追加如下内容
export PATH=粘贴刚才复制的路径:$PATH
#更新环境变量
source ~/.bashrc
1.4配置内网穿透
cpolar version
如果能显示cpolar版本号,则证明环境变量配置正确。
登录cpolar官网后台,点击左侧的验证,查看自己的认证token,复制里面的命令运行即可。
随后我们开启一个screen,开启cpolar进程
#开启一个新的screen,名称为keep_cpolar
screen -S keep_cpolar
#启动cpolar
cpolar start-all -daemon=on -dashboard=on -log=stdout
先按ctrl+A,再按ctrl+D,退出screen界面,实现后台挂载。简单说一下screen的常用命令
screen -S cpolar #创建名称为cpolar的screen窗口
screen -ls #查看有哪些窗口
screen -r name #回到对应的窗口
exit #结束掉当前窗口,返回之前的窗口,注意直接杀掉了就没了,要用ctrl+A,再按ctrl+D实现后台挂载
进入后台管理,浏览器输入http://你的局域网ip:9200,如跳出以下界面成功访问。账号密码为cpolar官网注册的账号密码,你可以在改面板中创建管理隧道。
2. frp内网穿透
frp内网穿透更稳定点,不会周期性的更换端口号,但是需要在服务端有root权限,且服务端是一个公网ip。简单说frp分为三个部分
- 被连接服务器A(公司电脑,学校服务器,内网当中在家无法直接链接)
- 中介服务器C(可以被公网访问ip的终端,例如阿里云服务器)
- 想要连接服务器A的电脑B(家里的电脑,想要去连接服务器的电脑)
可见cpolar虽然没找我们要公网IP,是因为他自己提供了中介服务器C,所以找我们收费升级更稳定更快的服务。
2.1下载frp
一般linux服务器都是x86的我们下载https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz这个就好了。你可以运行uname -m
来确定自己处理器是什么架构的,来下载对应的安装包
输出 | 架构 |
---|---|
i386 , i686 | i386 |
x86_64 | amd64 |
arm , armel | arm_garbage |
armv7l , armhf | armv7** |
aarch64 , armv8l | arm64 |
mips | mips* |
mips64 | mips64* |
下载完成之后,将其解压整个命名为frp,然后放在app目录下,就不赘述了。
可以看到里面主要有这些文件,其中frpc表示frp的client客户端需要运行的程序,也就是内网中需要被穿透的主机。frps表示中介服务器,即带有公网IP的服务器作为服务端。
2.2配置中介服务器C
编辑frps.ini
vi frps.toml
#将其内容修改如下
# frps.toml
bindPort = 7000 # 服务端与客户端通信端口
transport.tls.force = true # 服务端将只接受 TLS链接
auth.token = "public" # 身份验证令牌,frpc要与frps一致
# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0" # 后台管理地址
webServer.port = 7500 # 后台管理端口
webServer.user = "admin" # 后台登录用户名
webServer.password = "admin" # 后台登录密码
编辑完成之后,我们同样创建一个frps的screen然后运行
screen -S frps
./frps -c frps.toml
#CtrlA+D后台挂起
可以在浏览器中输入服务器C的公网IP:7500查看是否有frp的面板。如果有,则服务端的frp配置完成。
2.3配置内网主机A
同样还是需要下载frp的文件,解压。不过这次我们配置的文件是frpc.ini
vi frpc.toml (注意哦,不是frps.toml)
# 客户端配置
# frpc.toml
transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "x.x.x.x"
serverPort = 7000 # 公网服务端通信端口
auth.token = "public" # 令牌,与公网服务端保持一致
[[proxies]]
name = "test-http"
type = "tcp"
localIP = "127.0.0.1" # 需要暴露的服务的IP
localPort = 9000 # 将本地9000端口的服务暴露在公网的6060端口
remotePort = 6060 # 暴露服务的公网入口
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
编辑完成之后,我们同样创建一个frpc的screen然后运行
screen -S frpc
./frpc -c frpc.toml
#CtrlA+D后台挂起
如果提示没有什么关键字啥的,那就把注释去掉,新版的好像不支持注释了。如果提示success那就是部署完成了。
现在我们可以在家里的连接内网的服务器了。
ssh -p 6000 name@xxx.xxx.xxx.xxx
要注意到这的xxx.xxx.xxx.xxx是中介服务器C的公网IP,但是这里的name是被连接服务器A的用户名。这里使用的6000端号是和被连接服务器A中frpc.ini配置文件中的remote_port端口对应的。输入的密码也应该是被连接服务器A的name用户的密码,而并不是中介服务器C的密码。
特别注意:中介服务器B的相关端口一定要开放,不然是无法访问的主要就是6000 7500.