使用 FRP 结合前置代理进行内网穿透


一、前言

之前我写过一篇文章教大家如何使用 V2Ray 的反向代理功能进行内网穿透。

使用 V2Ray 进行内网穿透的简易方法

不过我用了几天就觉得稳定性欠佳,偶尔会出现长时间连不上的情况。但我还是坚持用了快一年。

之所以能坚持这么久,是因为内网穿透流量可以直接由 VMess 或其他出站协议进行保护,无需运行额外的程序。

直到最近终于忍无可忍,于是就把内网穿透换成了 FRP + 前置代理的方案。用了两周感觉非常稳定,除了每次宽带重新拨号会掉线几十秒之外再也没有掉线过。

FRP 是一款开源的反向代理应用,专门用于内网穿透,支持通过前置代理保护内网穿透的流量。

本文将介绍如何使用 FRP 结合前置代理进行内网穿透。


二、操作环境

服务器

  • IP 地址:100.0.0.1
  • 操作系统:CentOS 7.6.1810
  • FRP 版本:0.29.0
  • FRP 监听端口:5000

客户端

  • 操作系统:CentOS 7.6.1810
  • FRP 版本:0.29.0
  • 代理服务器类型:HTTP
  • 代理服务器地址和端口:127.0.0.1:65535

说明
• 请尽可能保证 FRP 服务器与客户端版本一致。


三、服务器的配置

3.1 安装 FRP 主程序

执行以下命令:

wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz && \
tar -xf frp_0.29.0_linux_amd64.tar.gz && \
mv frp_0.29.0_linux_amd64/frps /usr/bin/

3.2 安装 FRP 服务文件

执行以下命令:

cat << EOF > /lib/systemd/system/frps.service

以下内容直接粘贴到命令行窗口中按回车即可。

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frps.conf

[Install]
WantedBy=multi-user.target
EOF

3.3 创建 FRP 配置文件

执行以下命令:

cat << EOF > /etc/frps.conf

请按实际情况以及注释提示修改以下内容,完成后去除 # 号和后面的注释,然后粘贴到命令行窗口中按回车即可。

[common]
bind_port = 5000 # 设置 FRP 服务器监听的 TCP 端口
EOF

⚠️ 注意
• 这里没有为 FRP 服务器设置任何验证及加密措施。请确保 FRP 服务器的端口只能通过可信的前置代理来访问。

3.4 启动 FRP 服务

执行以下命令:

systemctl start frps

如需开机自启动,请执行以下命令:

systemctl enable frps

四、客户端的配置

4.1 安装 FRP 主程序

执行以下命令:

wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz && \
tar -xf frp_0.29.0_linux_amd64.tar.gz && \
mv frp_0.29.0_linux_amd64/frpc /usr/bin/

4.2 安装 FRP 服务文件

执行以下命令:

cat << EOF > /lib/systemd/system/frpc.service

以下内容直接粘贴到命令行窗口中按回车即可。

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frpc.conf
ExecReload=/usr/bin/frpc reload -c /etc/frpc.conf

[Install]
WantedBy=multi-user.target
EOF

4.3 创建 FRP 配置文件

配置文件格式

# 号后面的内容为注释)

[common]
server_addr = <FRP 服务器地址> # 设置 FRP 服务器地址
server_port = <FRP 服务器监听的 TCP 端口> # 设置 FRP 服务器端口
http_proxy = http|socks5://<前置代理服务器 IP>:<前置代理服务器端口> # 设置前置代理(支持 HTTP 和 SOCKS5 协议)
login_fail_exit = false # 首次连接失败不退出程序

[服务名称] # 设置需要内网穿透服务的名称
type = tcp|udp # 设置服务的类型(TCP 或 UDP)
local_ip = <要映射服务的 IP> # 设置服务的本地 IP
local_port = <要映射服务的端口> # 设置服务的本地端口
remote_port = <服务器监听端口> # 设置远端服务器的监听端口

[服务名称]
type = tcp|udp
local_ip = <要映射服务的 IP>
local_port = <要映射服务的端口>
remote_port = <服务器监听端口>

...

例如

把本地的 80 端口映射到服务器上的 8080 端口。

cat << EOF > /etc/frpc.conf

请按实际情况修改以下内容,然后粘贴到命令行窗口中按回车即可。

[common]
server_addr = 100.0.0.1
server_port = 5000
http_proxy = http://127.0.0.1:65535
login_fail_exit = false

[http]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080
EOF

4.4 启动 FRP 服务

执行以下命令:

systemctl start frpc

如需开机自启动,请执行以下命令:

systemctl enable frpc

4.5 检查内网穿透状态

启动服务之后,可以通过以下命令来查看内网穿透的连接状态:

journalctl -eu frpc

如果看到服务名称后面有 start proxy success,说明该服务已经可以实现内网穿透。否则请根据提示信息进行排查。查看完毕之后,按 q 即可退出。

发表评论

电子邮件地址不会被公开。