之前通过 AutoSSH 实现内网穿透,但是只能 SSH 远程服务器,将网络穿透工具升级为 Frp,实现 TCP(SSH) 和 HTTP(s) 网络连接
之前的博客介绍了通过 AutoSSH 来配置远程 SSH 服务器连接,后面由于云服务器的配置有限,就把一些应用服务迁移到本地的机子上,因此需要配置 Http 转发来外网访问服务,采用 Frp 来实现内网穿透。
前期准备
公网服务器一台,内网服务器一台,公网服务器绑定域名1个。
公网服务器配置
ssh连接到公网服务器上,新建目录
1
|
mkdir -p /usr/local/frp
|
根据对应的操作系统及架构,从 Frp 项目的 Release 页面下载最新版本的程序。
1
2
3
4
5
|
# 例如远程服务器是 Ubuntu 18.04 系统
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.38.0_linux_arm64.tar.gz
|
解压后得到的文件中,frps
和frps.ini
为服务端软件和配置文件,frpc
和frpc.ini
为客户端软件和配置文件。此处我们先配置服务端,frpc
和frpc.ini
两个文件可删除,接下来修改 frps.ini
文件,添加如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
|
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8888
vhost_https_port = 8889
max_pool_count = 20
allow_ports = 2000-3000 #端口白名单
dashboard_port = 8008 #frp管理后台端口
dashboard_user = admin #管理后台用户名
dashboard_pwd = admin #管理后台密码
token = 12341234 #客户端也要配置一样的token
authentication_timeout = 90000 #超时时间
|
保存然后启动服务
1
2
3
|
./frps -c ./frps.ini
# 这是前台启动,后台启动命令为
nohup ./frps -c ./frps.ini &
|
可以通过访问 http://xx.xx.xx.xx:8008 访问frp服务的监控界面,账号密码与上面配置的一致。
内网服务器配置
与服务端类似,根据对应的操作系统及架构,从 Frp 项目的 Release 页面下载最新版本的程序。
1
2
3
4
5
|
# 例如系统是 Ubuntu 20.04
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
|
然后再进行客户端配置,修改 frpc.ini 文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[common]
server_addr = 150.158.170.242 #远程VPS服务器地址
server_port = 7000
token = 12341234 #与服务端一致
tls_enable = true #是否开启TLS认证
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true
[web]
type = http
local_port = 8280
custom_domains = domain.domain.com #自定义域名
use_encryption = true #是否开启加密
use_compression = true #是否开启压缩
|
开机自启动
为了防止因为网络、供电或者重启等问题导致 Frp 失效,所以写了一个开机启动服务,本地服务器的配置如下:
1
|
vim /etc/systemd/system/frp.service
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[Unit]
Description=frp
After=network.target
Wants=network.target
[Service]
TimeoutStartSec=30
Type=simple
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
ExecStop=/bin/kill
Restart=on-failure
RestartSec=60s
[Install]
WantedBy=multi-user.target
|
启动服务
1
|
systemctl restart frp.service
|
对于服务器端,也配置了一个开机启动服务,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[Unit]
Description=frp
[Service]
TimeoutStartSec=30
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
ExecStop=/bin/kill $MAINPID
Restart=on-failure
RestartSec=60s
[Install]
WantedBy=multi-user.target
|