环境
我在国内某云有一台轻量服务器,有公网IP,用k3s部署的kubernetes单节点集群。
家庭网络受限于环境,单网口百兆,接入的NAS设备是极空间Z4S,4C/8G/8T,支持Docker和虚拟化的现代化简单易上手的NAS设备。
关于frp的介绍参考官网:https://gofrp.org, 使用的frps镜像是:snowdreamtech/frps, 使用的frpc镜像是:snowdreamtech/frpc。
云服务器配置
我用的 Traefik(v2) 作为 Ingress 控制器,需要为 frp 服务端口准备一个 TCP entrypoint,默认是7000。 我只映射http服务,所以共用 traefik web entrypoint,不需要额外入口。
traefik
我的是hostNetwork,只需要增加一个入口: --entryPoints.frps.address=:7000
frps
直接参考yaml:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: frps-ini
data:
frps.ini: |-
[common]
# 默认端口
bind_port=7000
# 默认鉴权方式为token,服务端和客户端的 common 配置中的 token 参数一致则身份验证通过。
token=Frp
log_level=info
log_file=console
disable_log_color=true
# Web
vhost_http_port=8000
# 仪表盘,默认关闭
dashboard_port=9000
dashboard_user=admin
dashboard_pwd=admin
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frps-deploy
labels:
app: frps
spec:
replicas: 1
selector:
matchLabels:
app: frps
template:
metadata:
labels:
app: frps
annotations:
port: "7000,8000,9000"
github: "snowdreamtech/frps"
spec:
containers:
- name: frps
image: docker.io/snowdreamtech/frps:0.51.2
ports:
- containerPort: 7000
name: frps
- containerPort: 8000
name: http
- containerPort: 9000
name: dashboard
volumeMounts:
- name: frps-config
mountPath: /etc/frp/
volumes:
- name: frps-config
configMap:
name: frps-ini
---
apiVersion: v1
kind: Service
metadata:
name: frps-svc
labels:
app: frps
spec:
selector:
app: frps
ports:
- name: frps-port
protocol: TCP
port: 7000
targetPort: 7000
- name: http-port
protocol: TCP
port: 8000
targetPort: 8000
- name: dashboard-port
protocol: TCP
port: 9000
targetPort: 9000
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: frps-dashboard-ingroute
spec:
entryPoints:
- web
- websecure
routes:
- match: Host(`frps.demo.com`)
kind: Rule
services:
- name: frps-svc
port: 9000
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: frps-http-ingroute
spec:
entryPoints:
- web
routes:
- match: Host(`test.demo.com`)
kind: Rule
services:
- name: frps-svc
port: 8000
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: frps-tcp
spec:
entryPoints:
- frps
routes:
- match: HostSNI(`*`)
services:
- name: frps-svc
port: 7000
极空间NAS配置
启动frpc
下载frpc镜像,版本与服务器端保持一致,如0.51.2
镜像下载完成后,用此镜像添加容器,参数如下:
配置文件frpc.ini先创建好上传到NAS中,映射到容器/etc/frp/frpc.ini
网络可以用默认桥接,也可以更换为host网络
启动后查看日志有无异常,可以通过 UI 查看代理(极空间有远程访问功能,可以远程查看家庭网络服务):
frpc.ini 示例
[common]
server_addr = 云服务器公网IP
server_port = 7000
token = Frp
log_file = console
log_level = info
disable_log_color = true
# UI
admin_port = 9000
admin_user = admin
admin_pwd = admin
[sapic]
type = http
local_port = 12345
custom_domains = test.demo.com
use_encryption = true
use_compression = true
测试
解析 test.demo.com 到公网云服务器,即可在公网访问到内网服务。