frp内网穿透记录

  • 腾讯轻量云服务器(server1)+宝塔面板
  • 本地Ubuntu20.04LTS(server2)+Nginx+静态IP

下载frp工具:https://github.com/fatedier/frp/releases

/images/all/image-20221012181354341.png

新建一个frp文件夹,解压上面下载的压缩包到该文件夹。

本节都在server1操作, 将server1配置为frp服务器端

先将上面解压的文件夹上传到server1/root路径

scp ./frp server1:/root
ssh server1
sudo cd /root
# 添加权限
chmod 777 frps.ini frps

frp服务器端配置在frps.ini中,配置如下

[common]
bind_port = 6000
vhost_http_port = 808
vhost_https_port = 909
dashboard_user = admin
dashboard_pwd = admin
token=yourpassword

注: 6000808909需要在server1中放行

上述配置中6000frp服务端口,808http服务端口,909https服务端口,由于我使用了宝塔面板,和80443端口冲突了

启动服务器端

./frps -c frps.ini

我们也可以将frps配置为服务

首先创建一个服务文件: frps.service

sudo vim /etc/systemd/system/frps.service
chmod 777 /etc/systemd/system/frps.service

配置如下:

[Unit]
Dcription=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=simple
User=root
Restart=on-failure
ExecStart=/root/frp/frps -c /root/frp/frps.ini
ExecReload=/root/frp/frps -c /root/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
 
[Install]
WantedBy=multi-user.target

添加该服务

# 通知systemd一个新的单元文件存在
sudo systemctl daemon-reload

# 应用frps服务
sudo systemctl enable --now frps

服务管理:

# 检查服务状态
sudo systemctl status frps
# 启动、停止、重启frps
sudo systemctl start frps
sudo systemctl stop frps
sudo systemctl restart frps

本节将server2配置为frp客户端

先将上面解压的文件夹上传到server2/root路径

scp ./frp server2:/root
ssh server2
sudo cd /root
# 添加权限
chmod 777 frpc.ini frpc

frp客户端配置在frpc.ini中,配置如下

[common]
server_addr = 替换为server1的ip
server_port = 6000
tls_enable = true
token=yourpassword
 
[EXSI]
type = https
local_ip = 你的内网ip(如server2的ip)
local_port = 80
remote_port = 909
custom_domains = exsi.abc.com
 
[NAS]
type = http
local_ip = 你的内网ip(如server2的ip)
local_port = 5000
remote_port = 808
custom_domains = nas.abc.com
 
[localblog]
type = http
local_ip = 你的内网ip(如server2的ip)
local_port = 8888
remote_port = 808
custom_domains = localblog.taholab.com 
 
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

启动客户端

./frpc -c frpc.ini

同理,我们也可以将frpc配置为服务

首先创建一个服务文件: frpc.service

sudo vim /etc/systemd/system/frpc.service
chmod 777 /etc/systemd/system/frpc.service

配置如下:

[Unit]
Dcription=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=simple
User=root
Restart=on-failure
ExecStart=/root/frp/frpc -c /root/frp/frpc.ini
ExecReload=/root/frp/frpc -c /root/frp/frpc.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
 
[Install]
WantedBy=multi-user.target

添加该服务

# 通知systemd一个新的单元文件存在
sudo systemctl daemon-reload

# 应用frpc服务
sudo systemctl enable --now frpc

服务管理:

# 检查服务状态
sudo systemctl status frpc
# 启动、停止、重启frpc
sudo systemctl start frpc
sudo systemctl stop frpc
sudo systemctl restart frpc

首先我在server1上解析了一个域名:frp.bnblogs.cc,然后在宝塔面板上创建同名网站用来访问本地服务器上的java项目。

如果你有SSL证书,可以配置成https网站

/images/all/image-20221012185737545.png

在宝塔面板中设置反向代理如下:

/images/all/image-20221012184258795.png

接着启动frps服务就行了,服务端配置完成!

/images/all/image-20221012184523697.png

接着在server2中操作(首先确定通过server2ip能正常访问你的项目)

接下来配置nginx

default配置复制一份到对应域名的配置

sudo cp /etc/nginx/sites-available/default  /etc/nginx/sites-available/frp.bnblogs.cc.conf

修改frpc.ini,添加下面的内容

[frp]
type = http
local_ip = server2的ip
local_port = 80
remote_port = 808
custom_domains = frp.bnblogs.cc 

启动frp客户端

/images/all/image-20221012185452605.png

使用浏览器访问https://frp.bnblogs.cc,如果出现界面表示配置成功

/images/all/image-20221012185609871.png