FRP内网穿透

Posted by Cooper on February 19, 2024

使用frp(Fast Reverse Proxy)实现内网穿透是一个有效的方法,允许你通过具有公网IP地址的服务器A访问在没有公网IP地址的服务器B上运行的Django项目。以下是一步步指导:

第1步:下载frp

首先,在服务器A(作为frp服务端,frps)和服务器B(作为frp客户端,frpc)上下载相应的frp版本。你可以从frp的GitHub发布页面下载最新版本。选择与你服务器操作系统相匹配的版本下载。

以X86_64 Linux为例:

下载
1
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz

第2步:配置frp服务端(服务器A)

  1. 解压下载的文件:在服务器A上,解压下载的frp压缩包。使用命令行工具,可以使用以下命令(以特定版本为例,确保命令中的版本号与你下载的版本匹配):

    1
    2
    3
    
    wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
    tar -xzf frp_*.tar.gz
    cd frp_*/
    
  2. 编辑frps.toml文件:在解压的文件夹中,找到frps.toml文件并用文本编辑器打开,设置如下:

    1
    2
    3
    
    # frps.toml
    bindPort = 7070
    vhostHTTPPort = 7071
    

    这里7070是frps监听的端口,你可以根据需要选择其他端口; 7071是服务器A监听http的端口

  3. 防火墙放行端口:(以centos为例)

    1
    2
    3
    
    sudo firewall-cmd --permanent --add-port=7070/tcp
    sudo firewall-cmd --permanent --add-port=7071/tcp
    sudo firewall-cmd --reload
    
  4. 启动frps服务:在解压的frp文件夹中,运行以下命令启动frps:

    1
    
    ./frps -c ./frps.toml
    

第3步:配置frp客户端(服务器B)

  1. 解压下载的文件:和在服务器A上的操作类似,在服务器B上解压frp压缩包,并进入解压后的目录。

    1
    2
    3
    
    wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
    tar -xzf frp_*.tar.gz
    cd frp_*/
    
  2. 编辑frpc.ini文件:在解压的文件夹中,找到或创建frpc.ini文件并用文本编辑器打开,然后配置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # frpc.toml
    serverAddr = "124.222.116.93"
    serverPort = 7070
       
    [[proxies]]         #这个不能随便改
    name = "web"
    type = "http"
    localPort = 8000  #这是Django项目在本地8000端口,确定防火墙已放行8000端口
    customDomains = ["124.222.116.93"]   #没有域名,就填IP,可多个,","隔开
    
    • server_addr是你的服务器A的公网IP地址。
    • server_port是frps服务监听的端口,与服务器A的frps.ini配置中的bind_port相匹配。
    • [[proxies]部分是对这个特定代理的配置
  3. 启动frpc客户端:在解压的frp文件夹中,运行以下命令启动frpc:

    1
    
    ./frpc -c ./frpc.toml
    
  4. Django配置文件core中的setting.py, ALLOWED_HOSTS添加服务器A IP地址

    1
    
    ALLOWED_HOSTS = ['局域网IP','云服务器A公网IP']
    

第4步:访问Django项目

一旦frpc成功连接到frps,你就可以通过访问服务器A的公网IP地址(在本例中为124.222.116.93)来访问在服务器B上运行的Django项目了。如果你在frpc.ini文件中设置了custom_domains为服务器A的公网IP,直接使用这个IP访问即可。如果服务器A上运行了Web服务器(如Nginx)并且配置了域名,也可以通过相应的域名进行访问。

注意事项

  • 确保服务器A的防火墙规则允许从外部访问其7000端口(或你选择的其他端口)。
  • 如果你计划长期运行frp服务,可能需要将frps和frpc设置为系统服务,以便它们能够在系统启动时自动运行。
  • 出于安全考虑,建议在生产环境中使用frp的更高级配置选项,如启用加密和认证功能。

这样,你就完成了通过frp内网穿透,利用服务器A的公网IP访问服务器B上Django项目的设置。