使用frp进行内网穿透与使用nohup命令进行进程的后台运行
使用frp工具来进行内网穿透
该方法的本质是:Server-Client Mode;通过配置Client(个人的主机),将自己的指定端口转发到Server端的固定端口,再让Server端的另一个端口来po出我们原本的端口的内容
首先,针对自己的主机设置(云服务器与要被穿透的服务器上都需要)下载合适版本的frp(一般都是amd64,在linux终端可以通过输入u -name 来查看自己的cpu架构)
wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz
# 建议在解压前,将frp压缩包移动到/opt/文件夹里再进行解压操作
tar -zvxf ./frp_0.64.0_linux_amd64.tar.gz
cd ./frp_0.64.0_linux_amd64
服务端(带有公网ip的云服务器上的配置)
服务端的核心配置是frps(Server)服务
由于服务端是“中转作用”,因此其中需要进行的配置并不多,只需要指定哪些端口来接收“信号”
nano ./frps.toml
# 打开frps的配置文件
# 在frps.toml里输入(首先确保你想使用的端口没有被占用)
# frps监听的端口,用于接收所有客户端的连接请求
bindPort = 7000
关键步骤:
一定在云服务器(不是终端界面)的防火墙里,放行你想使用的所有端口(包括现在设置的bindPort;以及之后可能要用的端口);
并且假如在服务器上配置了宝塔面板的服务的,也要在宝塔面板里将端口开放(想了我一小时,难绷)。
客户端(你想转发的服务器上的配置)
客户端也要像上面一样,先下载frp的压缩包再解压,并进入其文件夹
nano ./frpc.toml
# 注意:这里是frpc cccccccccc
# 在frpc.toml里输入
# frpc.toml
# 指向您的公网服务器IP
serverAddr = "your_server_ip"
serverPort = 7000
# 与frps里的bindPort要完全相同
# --- 示例1: 转发SSH服务 ---
[[proxies]]
name = "ssh-workstation" # 必须唯一
type = "tcp"
localPort = 22
remotePort = 6000 # 必须唯一
# --- 示例2: 转发Web开发服务 ---
[[proxies]]
name = "dev-web-service" # 必须唯一
type = "tcp"
localIP = "127.0.0.1"
localPort = 3180
remotePort = 8081 # 必须唯一
这里每个 [[proxies]] 定义一条隧道规则,可以自行选择是将自己的ssh服务转发(来使用公网ip来进行本地服务器的访问);也可以是将自己Web开发的服务端口转发(上述示例2就是将自己本地的Localport3180转发到了云服务器的8081端口)。
关键:
这个remotePort配置时候也一定要注意云服务器上的该端口没有进程,并一定要在所有防火墙/安全组里配置放行。
连接
测试连接
-
启动服务端: 在公网服务器的frp目录下,执行:
./frps -c ./frps.toml会出现
frps started successfully的日志。保持此窗口不要关闭也不要kill。 -
启动客户端: 在内网机器的frp目录下,执行:
./frpc -c ./frpc.toml如果一切正常,看到
login to server success和start proxy success的成功日志,也不要关闭。 -
验证服务: 现在,找第三台机子来测试连接正常与否。
假如要测试上面的SSH隧道是否建立成功,执行:
ssh your_local_username@your_server_ip -p 6000 # 6000端口是自己在frpc.toml自己定义的如果能成功连接,说明frp配置完全正确。
假如是Web开发端口转发,直接
#在浏览器里输入 your_server_ip:8081
后台持久运行
在配置完成并验证过可以正常连接后:
将两个服务器上的frp设置为”Systemctl”服务,是后台持续平稳运行的核心方法。
-
启动服务端: 在公网服务器的frp目录下,执行:
-
创建服务文件: 在服务器/客户端上创建
/etc/systemd/system/frps.service(服务端) 或/etc/systemd/system/frpc.service(客户端)。在文件里写入配置
# 以 frpc.service 为例 [Unit] Description=FRP Client # 如果是frps就改为 FRP Server After=network.target [Service] Type=simple User=your_username # 运行服务的用户名 Restart=on-failure RestartSec=5s ExecStart=/path/to/your/frpc -c /path/to/your/frpc.toml # 【重要】使用绝对路径;也是,frps来替换frpc [Install] WantedBy=multi-user.target -
启动并管理服务:
sudo systemctl daemon-reload # 重新加载配置 sudo systemctl enable frpc # 设置开机自启 sudo systemctl start frpc # 立即启动 sudo systemctl status frpc # 查看状态
先设置fprs,在设置frpc服务,设置好了后就可以长久运行了。
使用 nohup 后台运行 guan(容器环境)
但是有时候在AutoDL这样的容器环境中,通常没有 systemctl。此时,nohup 是最佳替代方案。
-
启动命令:
nohup ./frpc -c ./frpc.toml > frpc.log 2>&1 &nohup: 保证在退出SSH后,程序不会被关闭。> frpc.log 2>&1: 将所有日志记录到frpc.log文件中。&: 让命令在后台执行。
-
管理后台任务:
-
检查状态与获取PID:
ps aux | grep frp -
查看实时日志:
tail -f frpc.log -
停止任务:
# 将 <PID> 替换为上面查到的进程号 kill <PID>
-

地址