frp内网穿透

本文详细介绍了如何通过FRP(ForwarderforReverseProxy)在公网访问受限的局域网服务,包括服务端配置frps、客户端配置frpc,以及在Windows和Linux系统下的安装和启动步骤,以及验证方法。

即刻关注,获取更多

关注公众号 N学无止界 获取更多

操作环境说明,本操作基于proxmox-ve: 8.1.0实操

原则上linux操作系统都支持、windows等系统操作系统类似

背景

由于一些原因,需要访问家里或者其他组织局域网内的机器服务,但是公网IP4资源有限,IPV6也属于内部网络。那么,如何通过内网穿透的方式,将局域网内的机器服务暴露到公网IP?那么本实践教程就是解决这个问题

前置条件

你需要有一个固定的公网IP , 假如IP地址为 1.1.1.1
请保障您使用或者开放的端口, 防火墙策略已经允许访问, 且windows或linux的防火墙也已经放行需要端口
你已经大致了解并熟悉frp的原理和配置 , frp开源地址
客户端内容您有一个服务可以访问测试,这里为 http://127.0.0.1:1000

当前frp使用的版本为 v0.57.0 ,
完整文档已经迁移至 https://gofrp.org

操作步骤

服务端配置

frps.toml 配置文件, 完整配置参考

bindAddr = "0.0.0.0"
bindPort = 7000

log.to = "./frps.log"
log.level = "info"
log.maxDays = 30
log.disablePrintColor = false

# 认证方式
auth.method = "token"
auth.token = "123456"

# 允许访问的端口
allowPorts = [
  { start = 1000, end = 9000 }
]

启动服务端

./frps -c ./frps.toml

我的服务端采用windows,配置成了windows服务的形式,参考配置文件如下
frp-service.xml

<service>
  <!-- ID of the service. It should be unique across the Windows system-->
  <id>frp-service</id>
  <!-- Display name of the service -->
  <name>frp-service</name>
  <!-- Service description -->
  <description>frp-service</description>
  
  <!-- Path to the executable, which should be started -->
  <executable>%BASE%\frps.exe -c frps.toml</executable>
  <workingdirectory>%BASE%</workingdirectory>
  <priority>High</priority>
  <startmode>Automatic</startmode>
  <logpath>%BASE%\logs</logpath>
  <stoptimeout>5 sec</stoptimeout>

  <onfailure action="restart" delay="10 sec"/>
  <onfailure action="restart" delay="20 sec"/>
  <onfailure action="restart" delay="30 sec"/>
   <resetfailure>24 hour</resetfailure>

</service>

客户端配置

frpc.toml 配置文件, 完整配置参考

serverAddr = "1.1.1.1"
serverPort = 7000
# 认证方式
auth.method = "token"
auth.token = "123456"

log.to = "./frpc.log"
log.level = "info"
log.maxDays = 180
log.disablePrintColor = false

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 1000

启动客户端

# 解压
# tar -zxvf frp_0.57.0_linux_amd64.tar.gz

./frpc -c ./frpc.toml

测试效果

访问 http://1.1.1.1:1000 , 访问成功即为成功

客户端配置成服务

我这里是PVE服务,用linux配置方法

vim /lib/systemd/system/frpc.service

##vim /lib/systemd/system/frpc.service
##systemctl daemon-reload
##systemctl enable frpc  # 开机自启
##systemctl start frpc   # 启动

[Unit]
Description=frpc
After=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml

[Install]
WantedBy=multi-user.target

启动命令

systemctl daemon-reload

systemctl start frpc
systemctl status frpc

参考资料

frp最佳实践-zh
frp最佳实践-en

### frp 内网穿透配置教程、原理与使用方法 #### 什么是 frpfrp(Fast Reverse Proxy)是一个高性能的反向代理应用,支持多种协议,如 TCP、UDP、HTTP、HTTPS 等。它主要用于实现内网穿透,使得外部网络可以访问本地局域网中的服务。frp 由 Go 语言编写,具有良好的跨平台支持,适用于 Linux、Windows、macOS 等操作系统。 #### 为什么选择 frpfrp 的优势在于其简单易用、功能丰富、性能稳定。它支持多种代理模式,如 TCP、UDP、HTTP、HTTPS、STCP 等,并且可以通过简单的配置文件进行管理。此外,frp 支持自定义域名、加密传输、身份验证等功能,适用于多种场景,如远程桌面、Web 服务、游戏服务器等。 #### 工作原理 frp 的工作原理基于反向代理机制。它由两部分组成:**服务端(frps)** 和 **客户端(frpc)**。服务端部署在具有公网 IP 的服务器上,客户端部署在内网环境中。客户端通过与服务端建立连接,将内网服务映射到公网端口或域名上,从而实现外部访问。 具体流程如下: 1. 客户端(frpc)与服务端(frps)建立连接。 2. 客户端将本地服务的端口信息发送给服务端。 3. 服务端将外部请求转发到客户端,再由客户端转发到本地服务。 4. 数据在服务端与客户端之间双向传输,完成请求响应过程。 #### 代理类型 frp 支持多种代理类型,常见的有: - **TCP 代理**:适用于 SSH、数据库等基于 TCP 的服务。 - **UDP 代理**:适用于 DNS、VoIP 等基于 UDP 的服务。 - **HTTP/HTTPS 代理**:适用于 Web 服务,支持域名映射。 - **STCP 代理**:安全的 TCP 代理,需配合 frp 客户端使用,防止被第三方滥用。 #### 内网穿透配置教程 ##### 服务端安装与配置 1. **下载 frp**:前往 [frp 官方 GitHub 仓库](https://github.com/fatedier/frp) 下载对应系统的版本。 2. **解压文件**:将下载的压缩包解压到服务器目录,如 `/usr/local/frps/`。 3. **配置 frps.toml**:编辑 `frps.toml` 文件,配置监听端口、仪表盘端口、认证 token 等参数。 ```toml [common] bindPort = 7000 dashboardPort = 7500 token = "12121212" ``` 4. **使用 systemd 管理服务端**:创建 systemd 服务文件 `/etc/systemd/system/frps.service`,内容如下: ```ini [Service] Type=simple ExecStart=/usr/local/frps/frp_0.59.0_linux_amd64/frps -c /usr/local/frps/frp_0.59.0_linux_amd64/frps.toml KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true StandardOutput=syslog StandardError=inherit [Install] WantedBy=multi-user.target ``` 5. **启动服务**: ```bash systemctl start frps.service systemctl enable frps.service systemctl status frps.service ``` 6. **开放防火墙端口**:在云服务器控制台或命令行中开放 `bindPort` 和 `dashboardPort` 对应的端口。 ##### 客户端安装与配置 1. **下载 frp**:根据客户端操作系统下载对应版本。 2. **解压文件**:将压缩包解压到本地目录,如 `/usr/local/frp/`。 3. **配置 frpc.toml**:编辑 `frpc.toml` 文件,配置服务端地址、端口、认证 token 及代理规则。 ```toml [common] serverAddr = "xx.xx.xx.xx" serverPort = 7000 auth.method = "token" auth.token = "12121212" [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 [[proxies]] name = "web" type = "http" localIP = "127.0.0.1" localPort = 80 remotePort = 8080 customDomains = ["example.com"] ``` 4. **启动客户端**: ```bash ./frpc -c ./frpc.toml ``` ##### 使用 systemd 管理客户端(可选) 创建 `/etc/systemd/system/frpc.service` 文件,内容如下: ```ini [Service] Type=simple ExecStart=/usr/local/frp_0.59.0_linux_amd64/frpc -c /usr/local/frp_0.59.0_linux_amd64/frpc.toml KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true StandardOutput=syslog StandardError=inherit [Install] WantedBy=multi-user.target ``` 然后执行以下命令启动并启用服务: ```bash systemctl start frpc.service systemctl enable frpc.service systemctl status frpc.service ``` #### 注意事项 - **安全性**:建议启用 token 认证,并定期更换 token,防止未授权访问。 - **防火墙配置**:确保服务端和客户端的防火墙规则允许相应端口通信。 - **日志监控**:通过查看日志文件或仪表台监控 frp 的运行状态。 - **版本兼容性**:服务端与客户端应尽量保持版本一致,避免兼容性问题。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_software

感谢打赏,我努力提供优质内容~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值