使用 FRP 实现内网穿透:服务器篇

by admin

背景:
家中宽带没有公网 IP,且了解到目前申请无望;花生壳、VNC、TeamViewer 又有各自局限,故决定用手头闲置的带公网 IP 的服务器,搭配 FRP 内网穿透实现对家中 NAS、Win10电脑、树莓派的访问。

目标:
在公网服务端和内网各类客户端安装并配置 FRP 

(2022年2月3日更新:新版本号及部分配置)

1. 准备工作

登陆服务器管理后台,防火墙开放以下端口

  • TCP 7000:FRP 服务端默认端口
  • UDP 10000 :用于点对点内网穿透
  • TCP 10001-10010:用于代理内网设备的 TCP 应用
  • TCP 10080,10443:便于记忆的 HTTP 与 HTTPS 代理端口
  • TCP 10500:用于访问服务端监控页

阿里云方法:

  • ECS 云服务器控制台,实例列表中点击对应实例的 “更多”-“网络和安全组”-“安全组配置”
  • 在安全组配置页面点击“配置规则”
  • “安全组访问规则配置”-手动添加“入方向”(即用户访问服务器的方向)
  • 允许自定义端口,授权对象为所有人(0.0.0.0/0)
  • 保存即生效,无需重启服务器

腾讯云方法:

  • 服务器管理后台,防火墙页面 “添加规则”,允许自定义端口即可,无需重启服务器

2. 服务端安装(CentOS

SSH 连接服务器,查看系统架构信息

uname -m(会输出 x86_64、i686、arm 或者 aarch64)

得知服务器是 amd64(即 x86_64),故下载对应最新版本

wget https://github.com/fatedier/frp/releases/download/v0.39.0/frp_0.39.0_linux_amd64.tar.gz

移动安装包至指定路径

mv frp_0.39.0_linux_amd64.tar.gz /opt/

cd 至 opt 文件夹 ls -a 查看文件列表,确认文件已成功移动,然后解压

tar -zxvf frp_0.39.0_linux_amd64.tar.gz

cd 至 /opt/frp_0.39.0_linux_amd64 文件夹并 ll 查看文件结构,删除无用的客户端文件

rm frpc
rm frpc.ini
rm frpc_full.ini

3. 服务端配置

编辑服务端配置文件

nano frps.ini

内容为

[common]
# 通信地址及端口
bind_addr = 0.0.0.0
bind_port = 7000
# 验证访问内网客户端
authentication_method = token
token = 12345678
# 设置服务器绑定的域名,用于通过子域名访问内网各个服务
subdomain_host = xxx.com
# UDP 端口
bind_udp_port = 10000
# 反向代理 HTTP 主机
vhost_http_port = 10080
vhost_https_port = 10443
# 服务端监控页,仅当设置 dashboard_port 时才开启本服务,若不设置 dashboard_addr 则与 bind_addr 相同
dashboard_addr = 0.0.0.0
dashboard_port = 10500
# 若不设置则默认均为 admin
dashboard_user = admin
dashboard_pwd = admin
# 日志文件路径、方式、天数等
log_file = ./frps.log
log_level = info
log_max_days = 1

保存后启用服务

./frps -c ./frps.ini

(也可使用 nohup 命令使其后台运行)

nohup ./frps -c frps.ini>/dev/null 2>&1 &

成功访问 http://服务器公网IP:10500 页面,服务启用正常

如需更新配置文件,可关闭进程再启动

ps -ef | grep frps
kill -9 进程ID

4. 设置开机启动

解压 FRP 后的 systemd 子文件夹内已有系统服务配置文件

cd /opt/frp_0.39.0_linux_amd64/systemd
nano frps.service

修改 ExecStart 为刚刚安装 FRP 的路径,文件内容如下

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

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart= /opt/frp_0.39.0_linux_amd64/frps -c /opt/frp_0.39.0_linux_amd64/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

移动配置文件

mv frps.service /usr/lib/systemd/system/

设置开机启动

systemctl daemon-reload
systemctl enable frps

启动 frp

systemctl start frps

检查 FRP 是否启动

ps -ef | grep frps

重启服务器检查 FRP 是否自动启动

sudo reboot

如需更新配置文件,可重启服务

systemctl restart frps