Centos7 - frp内网穿透

目录

Centos7 - frp内网穿透,访问内网web服务/访问内网websocket服务

frp

  • Github地址:https://github.com/fatedier/frp
  • Github发布包地址:https://github.com/fatedier/frp/releases
  • 官方教程:https://github.com/fatedier/frp/blob/master/README_zh.md

1、外网服务器frp服务端配置(安装时最新版本0.32.1为例)

1.1 下载frp

使用

mkdir frp

命令创建一个新的文件夹frp,然后在文件夹下使用命令:

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

下载frp。

1.2 解压,并进入解压文件夹
tar -zxvf frp_0.32.1_linux_amd64.tar.gz
cd frp_0.32.1_linux_amd64/
1.3 删掉不必要的客户端文件
rm -rf frpc
rm -rf frpc.ini
1.4 编辑frps.ini文件
vi frps.ini

打开该文件,并将该文件内容修改为:

[common]
# 服务器端监听客户端连接请求的端口
bind_port = 7000
# 服务器端监听http请求的端口
vhost_http_port = 80(如果服务器上80端口已被占用,可随意修改为其他空闲端口)
# 授权码,请改成更复杂的
token = 52010  # 这个token之后在客户端会用到

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

保存退出。

1.5 防火墙开启相关端口
开启端口:
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=45635/tcp --permanent
重启防火墙:systemctl restart firewalld.service
1.6 启动服务的几种方式
1.6.1 正常启动
./frps -c ./frps.ini
1.6.2 使用nohup后台挂起服务
nohup ./frps -c frps.ini > ./log.txt 2>&1 &

日志输出到log.txt

1.6.3 制作一键启动sh脚本
1.6.3.1 启动脚本start.sh
#! /bin/bash
nohup ./frps -c frps.ini > log.txt 2>&1 &
echo $! >./pid.txt
1.6.3.2 停止脚本stop.sh
#! /bin/bash
PID=$(cat ./pid.txt)
kill -9 $PID
1.6.3.4 实时日志查看
tail -f ./log.txt

2、内网服务器frp客户端配置(安装时最新版本0.32.1为例)

2.1 下载

使用

mkdir frp

命令创建一个新的文件夹frp,然后在文件夹下使用命令:

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

下载frp。

2.2 解压,并进入解压文件夹
tar -zxvf frp_0.32.1_linux_amd64.tar.gz
cd frp_0.32.1_linux_amd64/
2.3 删掉不必要的客户端文件
rm -rf frps
rm -rf frps.ini
2.4 编辑frpc.ini文件
vi frpc.ini

打开该文件,并将该文件内容修改为:

[common]
server_addr = xx.xx.xx.xx(外网主机ip)
server_port = 7000
token = 52010  # 与frps.ini的token一致

# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000  # 这个自定义,之后再ssh连接的时候要用

# 内网web服务,监听端口为80
[web]
type = http
local_port = 80
custom_domains = xx.xx.xx.xx(外网主机ip,和server_addr的相同,或者写域名,但是要做dns解析)

# websocket服务,端口假设为45635
[web01]
type = tcp
local_port = 45635
custom_domains = xx.xx.xx.xx(外网主机ip,和server_addr的相同,或者写域名,但是要做dns解析)
remote_port = 45635

保存退出。

2.5 防火墙开启相关端口
开启端口:
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=45635/tcp --permanent
重启防火墙:systemctl restart firewalld.service
2.6 启动服务的几种方式
2.6.1 正常启动
./frpc -c ./frpc.ini
2.6.2 使用nohup后台挂起服务
nohup ./frpc -c frpc.ini > ./log.txt 2>&1 &

日志输出到log.txt

2.6.3 制作一键启动sh脚本
2.6.3.1 启动脚本start.sh
#! /bin/bash
nohup ./frpc -c frpc.ini > log.txt 2>&1 &
echo $! >./pid.txt
2.6.3.2 停止脚本stop.sh
#! /bin/bash
PID=$(cat ./pid.txt)
kill -9 $PID
2.6.3.4 实时日志查看
tail -f ./log.txt
访问测试
  • 分别开启远程主机frp服务,以及内网frp服务,保证相关端口已开启。
  • frp内网穿透访问内网web服务:xx.xx.xx.xx:80
  • frp内网穿透访问内网websocket服务:xx.xx.xx.xx:45635

3.设置frp开机自启

  • 3.1使用如下命令创建 frp 服务文件
sudo vim /etc/systemd/system/frp.service
  • 3.2在其中填写下列内容
[Unit]
Description=frp startup script
After=network.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
(在服务端填写下面这一行)
ExecStart=/home/{此处替换为你的用户名}/frp/frps -c /home/{此处替换为你的用户名}/frp/frps.ini
(在客户端填写下面这一行)
ExecStart=/home/{此处替换为你的用户名}/frp/frpc -c /home/{此处替换为你的用户名}/frp/frpc.ini

[Install]
WantedBy=multi-user.target

  • 3.3保存并退出

  • 3.4设置其权限为775

sudo chmod 775 /etc/systemd/system/frp.service
  • 3.5输入如下命令使 frp 服务开机启动
sudo systemctl enable --now frp

附:1.nginx.conf

server {
    # 监听的80端口
    listen 80;
    # 域名配置 记得一定要加上*.frp.xxx.net这个,只加frp.xxx.net是不行的,某运维大坑张XX在这坑我2天的时间
    server_name * .frp.xxx.net frp.xxx.net;
    location / {
    proxy_pass http: //127.0.0.1:8080;
    # 这个Host的header一定要加,不然转发后frp拿不到通过哪个域名访问的,导致转发失败
    proxy_set_header Host $host;
    }
}

2.用nginx转发后无法连接websocket

#将/xcloud-api请求转发给http://127.0.0.1:8012处理
    location /xcloud-api {
        proxy_pass http://127.0.0.1:8012/xcloud-api; #这里的端口记得改成项目对应的哦
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
        proxy_set_header Host $host;
        proxy_http_version 1.1; 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Upgrade $http_upgrade;  
        proxy_set_header Connection "upgrade"; 
        proxy_set_header Origin "";
        proxy_redirect off;
    }

主要是这三个配置

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”; proxy_set_header Origin “”;

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦