frp内网穿透
原创大约 2 分钟
操作环境说明,本操作基于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