使用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 successstart 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 是最佳替代方案。

  1. 启动命令:

    nohup ./frpc -c ./frpc.toml > frpc.log 2>&1 &
    • nohup: 保证在退出SSH后,程序不会被关闭。
    • > frpc.log 2>&1: 将所有日志记录到 frpc.log 文件中。
    • &: 让命令在后台执行。
  2. 管理后台任务:

    • 检查状态与获取PID:

      ps aux | grep frp
    • 查看实时日志:

      tail -f frpc.log
    • 停止任务:

      # 将 <PID> 替换为上面查到的进程号
      kill <PID>

发表回复

Your email address will not be published. Required fields are marked *.

*
*

Who Am I?

SDU Statistics –> WHU DS

张敬老师课题组研究生

主要对具身智能、ML、DRL相关工作有兴趣,现在在进行Digital Human相关工作,欢迎合作指导。

热爱🎸、⚽、📕,永远热爱生活

联系我

地址
B103,计算机学院,武汉大学

联系方式

cdj_wh@126.com