Loading

内网穿透工具FRP部署

1、部署原因

在家里搭建了一套服务器做学习和测试使用,由于家里是联通的网络没有公网IP(电信自带公网IP、移动的公网IP最少,一分价钱一分货啦~~~),平时在外面没有办法SSH访问,所以打算用丐版的腾讯云服务器将端口暴露出来,方便在公司上班时摸鱼。

2、FRP简介

frp 是一个专注于内网穿透的高性能的反向代理应用。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。FRP官网FRP GitHub地址

3、腾讯云服务器相关部署

腾讯云服务器选用1核 2GB 1Mbps 高性能云硬盘 网络:Default-VPC 的丐版云主机服务器(有公网IP就行)。

第一步:

安装包下载并解压缩,从 Github Release 页面下载最新版本。(选择自己合适的版本)

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

tar -zxvf frp_0.37.0_linux_amd64.tar.gz

云服务器做的是server端,所以可以将 frpc相关的全部删除,只保留frps相关的数据包。

第二部:服务端配置

服务端配置详细说明

我在这里直接修改了frps_full.ini这个参考文件,修改了监听地址、日志地址、客户端认证token和WEB_UI等相关配置,其他的配置不做修改。

[root@host-cloud conf]# cat frps_full.ini
[common]
bind_addr = 												#服务监听地址(腾讯云服务器的内网IP)
bind_port = 7000
bind_udp_port = 7001
kcp_bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
dashboard_addr = 											#服务监听地址
dashboard_port = 7500
dashboard_user = 											#WEB_UI用户
dashboard_pwd = 											#WEB_UI密码
enable_prometheus = true
log_file = /home/frp/logs/frps.log 		#日志地址
log_level = info
log_max_days = 3
disable_log_color = false
detailed_errors_to_client = true
authentication_method = token
authenticate_heartbeats = false
authenticate_new_work_conns = false
token = 															#客户端认证tocken
oidc_skip_expiry_check = false
oidc_skip_issuer_check = false
allow_ports = 2000-3000,3001,3003,4000-50000
max_pool_count = 5
max_ports_per_client = 0
tls_only = false
subdomain_host = frps.com
tcp_mux = true
udp_packet_size = 1500

基础配置

参数 类型 说明 默认值 可选值 备注
bind_addr string 服务端监听地址 0.0.0.0
bind_port int 服务端监听端口 7000 接收 frpc 的连接
bind_udp_port int 服务端监听 UDP 端口 0 用于辅助创建 P2P 连接
kcp_bind_port int 服务端监听 KCP 协议端口 0 用于接收采用 KCP 连接的 frpc
proxy_bind_addr string 代理监听地址 同 bind_addr 可以使代理监听在不同的网卡地址
log_file string 日志文件地址 ./frps.log 如果设置为 console,会将日志打印在标准输出中
log_level string 日志等级 info trace, debug, info, warn, error
log_max_days int 日志文件保留天数 3
disable_log_color bool 禁用标准输出中的日志颜色 false
detailed_errors_to_client bool 服务端返回详细错误信息给客户端 true
heart_beat_timeout int 服务端和客户端心跳连接的超时时间 90 单位:秒
user_conn_timeout int 用户建立连接后等待客户端响应的超时时间 10 单位:秒
udp_packet_size int 代理 UDP 服务时支持的最大包长度 1500 服务端和客户端的值需要一致
tls_cert_file string TLS 服务端证书文件路径
tls_key_file string TLS 服务端密钥文件路径
tls_trusted_ca_file string TLS CA 证书路径

权限验证

参数 类型 说明 默认值 可选值 备注
authentication_method string 鉴权方式 token token, oidc
authenticate_heartbeats bool 开启心跳消息鉴权 false
authenticate_new_work_conns bool 开启建立工作连接的鉴权 false
token string 鉴权使用的 token 值 客户端需要设置一样的值才能鉴权通过
oidc_issuer string oidc_issuer
oidc_audience string oidc_audience
oidc_skip_expiry_check bool oidc_skip_expiry_check
oidc_skip_issuer_check bool oidc_skip_issuer_check

管理配置

参数 类型 说明 默认值 可选值 备注
allow_ports string 允许代理绑定的服务端端口 格式为 1000-2000,2001,3000-4000
max_pool_count int 最大连接池大小 5
max_ports_per_client int 限制单个客户端最大同时存在的代理数 0 0 表示没有限制
tls_only bool 只接受启用了 TLS 的客户端连接 false

第三步:设置开机自启动

将system下的 frps.servicefrps@.service放到 /usr/lib/systemd/system`目录下,具体配置如下

[root@host-cloud system]# cat frps.service
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root																											#执行用户
Restart=on-failure
RestartSec=5s
ExecStart=/home/frp/bin/frps -c /home/frp/conf/frps_full.ini	#执行命令+配置文件

[Install]
WantedBy=multi-user.target
=============================================
[root@host-cloud system]# cat frps@.service
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root																											#执行用户
Restart=on-failure
RestartSec=5s
ExecStart=/home/frp/bin/frps -c /home/frp/conf/frps_full.ini	#执行命令+配置文件

[Install]
WantedBy=multi-user.target	

设置开机启动

[root@host-cloud system]# systemctl daemon-reload
[root@host-cloud ~]# systemctl start frps.service
[root@host-cloud ~]# systemctl enable frps.service

配置腾讯云的安全组,打开对应的input 7000、7500端口、outpus 6000端口。

访问http://公网IP:7500

image

4、客户端服务部署

第一步:

安装包下载并解压缩,从 Github Release 页面下载最新版本。(选择自己合适的版本)

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

tar -zxvf frp_0.37.0_linux_amd64.tar.gz

云服务器做的是client端,所以可以将 frps相关的全部删除,只保留frpc相关的数据包。

第二部:配置文件

客户端配置详细说明

frpc配置文件

[root@host-machine frp]# cat conf/frpc.ini
[common]
server_addr = x.x.x.x 				#云服务器的IP公网IP
server_port = 7000

log_file = /home/frp/logs/frpc.log		#日志地址
log_level = info
log_max_days = 3

token = xxxxxxx								#服务端认证的token

admin_addr = 192.168.31.200		#服务器内网IP
admin_port = 7400
admin_user = fong
admin_pwd = qwer1234

pool_count = 5

tcp_mux = true

user = fong
login_fail_exit = true
protocol = tcp
tls_enable = true

[ssh]
type = tcp
local_ip = 192.168.31.200		
local_port = 22
remote_port = 6000

基础配置

参数 类型 说明 默认值 可选值 备注
server_addr string 连接服务端的地址 0.0.0.0
server_port int 连接服务端的端口 7000
http_proxy string 连接服务端使用的代理地址 格式为 {protocol}😕/user:passwd@192.168.1.128:8080 protocol 目前支持 http、socks5、ntlm
log_file string 日志文件地址 ./frpc.log 如果设置为 console,会将日志打印在标准输出中
log_level string 日志等级 info trace, debug, info, warn, error
log_max_days int 日志文件保留天数 3
disable_log_color bool 禁用标准输出中的日志颜色 false
pool_count int 连接池大小 0
user string 用户名 设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突
dns_server string 使用 DNS 服务器地址 默认使用系统配置的 DNS 服务器,指定此参数可以强制替换为自定义的 DNS 服务器地址
login_fail_exit bool 第一次登陆失败后是否退出 true
protocol string 连接服务端的通信协议 tcp tcp, kcp, websocket
tls_enable bool 启用 TLS 协议加密连接 false
tls_cert_file string TLS 客户端证书文件路径
tls_key_file string TLS 客户端密钥文件路径
tls_trusted_ca_file string TLS CA 证书路径
tls_server_name string TLS Server 名称 为空则使用 server_addr
heartbeat_interval int 向服务端发送心跳包的间隔时间 30
heartbeat_timeout int 和服务端心跳的超时时间 90
udp_packet_size int 代理 UDP 服务时支持的最大包长度 1500 服务端和客户端的值需要一致
start string 指定启用部分代理 当配置了较多代理,但是只希望启用其中部分时可以通过此参数指定,默认为全部启用

权限验证

参数 类型 说明 默认值 可选值 备注
authentication_method string 鉴权方式 token token, oidc 需要和服务端一致
authenticate_heartbeats bool 开启心跳消息鉴权 false 需要和服务端一致
authenticate_new_work_conns bool 开启建立工作连接的鉴权 false 需要和服务端一致
token string 鉴权使用的 token 值 需要和服务端设置一样的值才能鉴权通过
oidc_client_id string oidc_client_id
oidc_client_secret string oidc_client_secret
oidc_audience string oidc_audience
oidc_token_endpoint_url string oidc_token_endpoint_url

第三步:开机自启

[root@host-machine systemd]# cat /usr/lib/systemd/system/frpc.service
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/home/frp/bin/frpc -c /home/frp/conf/frpc.ini
ExecReload=/home/frp/bin/frpc reload -c /home/frp/conf/frpc.ini

[Install]
WantedBy=multi-user.target
=======================================================================
[root@host-machine systemd]# cat /usr/lib/systemd/system/frpc@.service
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=idle
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/home/frp/bin/frpc -c /home/frp/conf/%i.ini
ExecReload=/home/frp/bin/frpc reload -c /home/frp/conf/%i.ini

[Install]
WantedBy=multi-user.target
[root@host-machine ~]# systemctl daemon-reload
[root@host-machine ~]# systemctl start frpc.service
[root@host-machine ~]# systemctl enable frpc.service

修改本地的SSH服务,禁止root登陆,只使用密钥登陆。

Port 22				# default port
#AddressFamily any		# listen ipv4 and ipv6
ListenAddress 192.168.31.200	# listen ipv4 ipaddress
#ListenAddress ::		# listen ipv6 ipaddress

HostKey /etc/ssh/ssh_host_rsa_key	# ssh rsa private key dir
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key	# ssh ecdsa private key dir
HostKey /etc/ssh/ssh_host_ed25519_key	# ssh ED25519 private key dir

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
LogLevel INFO			# log level

# Authentication:

LoginGraceTime 2m		# user auth max 2min
PermitRootLogin no		# allow root account SSH login,(test yes,product no)
StrictModes yes			#
MaxAuthTries 4			# maximum number of authentications allowed per connection
MaxSessions 20			# max connection

PubkeyAuthentication yes	# public key to verify
AuthorizedKeysFile	.ssh/authorized_keys		# public key to verify dir
PasswordAuthentication no		# Whether password authentication is allowed

客户端连接成功后,访问 http://公网IP:7500

image

5、如何登陆

ssh -oPort=6000 用户@x.x.x.x(公网IP)

frp 会将请求 x.x.x.x:6000 的流量转发到内网机器的 22 端口。

posted @ 2021-06-16 14:54  Fong777  阅读(758)  评论(0)    收藏  举报