frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
官方网站:https://gofrp.org/zh-cn/
具体实现:
1、需要一个公网ip地址,用来安装部署frp服务端frps
2、需要在内网环境中部署一台frp客户端frpc,当做代理服务器
3、用户访问公网ip地址,会先连接到frp客户端,再根据相应的规则去匹配转发,把请求发送到内网中其他主机上
4、在服务端需要开启相应的端口(7000,7001,7002,7003等)
安装部署:
1、下载frps
frp压缩包同时包含了 frps(frp 服务端)和frpc(frp 客户端)
下载地址:https://github.com/fatedier/frp/releases
https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
2、服务端部署
#创建目录
mkdir -p /data/soft
mkdir -p /data/server
上传安装包frp_0.52.3_linux_amd64.tar.gz到/data/soft目录下面
#解压
cd /data/soft
tar zxvf frp_0.52.3_linux_amd64.tar.gz
mv /data/soft/frp_0.52.3_linux_amd64 /data/server/frp
#修改服务端配置文件
cp /data/server/frp/frps.toml /data/server/frp/frps.toml.bak
vi /data/server/frp/frps.toml
[common]
bind_addr = 0.0.0.0 #监听服务器所有地址
bind_port = 7000 #监听的端口
vhost_http_port = 7001,6001,5001 #http代理端口,可以代理多个http端口
vhost_https_port = 7002 #https代理端口
tcp_mux = true #优化传输
[authentication]
method = token #身份验证方式
token = 123456 #token设置密码,用于通过身份验证创建连接
:wq! #保持退出
#后台启动
nohup /data/server/frp/frps -c /data/server/frp/frps.toml > /dev/null 2>&1 &
#添加服务端开机启动
vi /usr/lib/systemd/system/frps.service
[Unit]
Description=frps
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
WorkingDirectory=/data/server/frp
ExecStart=/usr/bin/env ./frps -c ./frps.toml
[Install]
WantedBy=multi-user.target
:wq! #保持退出
#重新加载 systemd 配置
systemctl daemon-reload
#启动frp
systemctl start frps
#停止frp
systemctl stop frps
#重启frp
systemctl restart frps
#查看frp状态
systemctl status frps
#服务在系统开机启动时自动启动
systemctl enable frps
3、客户端部署
#创建目录
mkdir -p /data/soft
mkdir -p /data/server
上传安装包frp_0.52.3_linux_amd64.tar.gz到/data/soft目录下面
#解压
cd /data/soft
tar zxvf frp_0.52.3_linux_amd64.tar.gz
mv /data/soft/frp_0.52.3_linux_amd64 /data/server/frp
#修改客户端配置文件
cp /data/server/frp/frpc.toml /data/server/frp/frpc.toml.bak
vi /data/server/frp/frpc.toml #编辑配置文件
[common]
server_addr = 1.2.3.4 #服务端的ip地址
server_port = 7000 #服务端的端口
tcp_mux = true #优化传输,和服务端必须一致
[authentication]
method = token #身份验证方式,和服务端必须一致
token = 123456 #token设置密码,用于通过身份验证创建连接,和服务端必须一致
[[tcp]]
type = tcp #代理类型,包含 tcp, udp, http, https 等
local_ip = 192.168.128.198 #要转发到的真实ip地址
local_port = 3389 #要转发到的真实ip地址的端口
remote_port = 7003 #远程服务器的代理端口
[[https]]
type = https #代理类型,包含 tcp, udp, http, https 等
local_ip = 192.168.131.235 #要转发到的真实ip地址
local_port = 443 #要转发到的真实ip地址的端口
custom_domains = www.domain.com #服务器域名或外网ip
:wq! #保持退出
#后台启动客户端
nohup /data/server/frp/frpc -c /data/server/frp/frpc.toml > /dev/null 2>&1 &
#添加客户端开机启动服务
vi /usr/lib/systemd/system/frpc.service
[Unit]
Description=frpc
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
WorkingDirectory=/data/server/frp
ExecStart=/usr/bin/env ./frpc -c ./frpc.toml
[Install]
WantedBy=multi-user.target
:wq! #保持退出
#重新加载 systemd 配置
systemctl daemon-reload
#启动frp
systemctl start frpc
#停止frp
systemctl stop frpc
#重启frp
systemctl restart frpc
#查看frp状态
systemctl status frpc
#服务在系统开机启动时自动启动
systemctl enable frpc
4、验证
现在可以通过外网ip+端口来访问内网的服务器了。
内网端口暴露在公网上,请务必设置强密码,不要使用弱口令,很容易被攻击!
至此,Linux下使用frp搭建内网穿透服务器完成。