使用frp配置内网穿透,将内网服务反向代理到公网
下载地址,因为我的公网服务器是linux,内网服务是windows,所以下载两个版本frp_0.38.0_linux_amd64.tar.gz和frp_0.38.0_windows_amd64.zip。
windows的软件解压到任意一个文件夹,删除frps相关的文件,linux的软件上传到服务器并解压,删除frpc相关的软件,然后修改两端的配置文件frpc.init和frps.init。
frps.init内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[common]
# 服务端监听端口,接收 frpc 的连接,须和frpc.init的server_port一致
bind_port = 3010
# 鉴权使用的 token 值,须和frpc.init的token一致
token = 123
# 日志文件地址
log_file = ./frps.log
# 配置服务端管理界面监控
dashboard_addr = 0.0.0.0
# 管理界面端口
dashboard_port = 3015
# 管理界面登录用户
dashboard_user = admin
# 管理界面登录密码
dashboard_pwd = admin
# 是否提供 Prometheus 监控接口
enable_prometheus = truefrpc.init内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[common]
token = 123
# 连接服务端的地址(自己的公网IP)
server_addr = ×.×.×.×
# 连接服务端的端口,和上面的bind_port一致
server_port = 3010
# 配置客户端管理界面
admin_addr = 0.0.0.0
admin_port = 3011
admin_user = admin
admin_pwd = admin
[webUI]
type = tcp
local_port = 3011
remote_port = 3016linux防火墙开启端口3010-3020端口,
firewall-cmd --zone=public --add-port=3010-3020/tcp --permanent
,firewall-cmd --reload
服务端启动
./frps -c ./frps.ini
,浏览器访问http://×.×.×.×:3015,界面提示需要登录,输入用户名密码admin,登录之后便可以看到如下界面:客户端启动
.\frpc.exe -c .\frpc.ini
,浏览器访问http://127.0.0.1:3011或者http://×.×.×.×:3016,登录之后看到如下界面:点击左侧菜单Configure,可以直接修改配置文件,如果要添加ssh,远程连接本机内网,可以添加如下内容,即远程访问3012端口即可访问本机22端口
1
2
3
4[ssh]
type = tcp
local_port = 22
remote_port = 3012然后点击upload,点击yes即可更新
关于本机开启ssh可以看下microsoft文档,或直接使用powershell安装:
- 检查是否安装:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
- 若出现State : NotPresent,则为未安装
- 安装客户端:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
- 安装服务端:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
- 启动
1
2
3
4
5
6
7
8
9
10
11# Start the sshd service
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}- 打开powershell,连接
ssh user@ip
,如果是使用微软账户登录的windows10,则直接使用微软账户也可以登录ssh,如果出现:
1
2
3The authenticity of host 'servername (×.×.×.×)' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?输入yes,然后按enter,输入密码,即可连接成功
- 检查是否安装:
使用公网ip测试能否连接内网的ssh,在powershell中输入ssh -p 3012 user@公网ip,不出意外的话,应该是可以连接的。
添加共享内网文件夹,再次执行第八步,修改配置文件
1
2
3
4
5
6
7
8
9
10[file]
type = tcp
remote_port = 3013
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = F:\共享
# 用户访问 URL 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix =
plugin_http_user = admin
plugin_http_passwd = admin然后点击upload,点击yes,浏览器访问
http://×.×.×.×:3013
,输入用户名密码之后,即可看到本地文件夹F:\共享内的文件服务端把命令添加到systemctl服务
- 新建文件
/usr/lib/systemd/system/frp.service
- 内容如下:
1
2
3
4
5
6
7
8
9
10
11
12[UNIT]
Description=frp Service
After=network.target
[Service]
Type=simple
# 执行的命令(文件地址根据安装位置修改)
ExecStart=/web/frp/frp_0.38.0_linux_amd64/frps -c /web/frp/frp_0.38.0_linux_amd64/frps.ini
ExecReload=
ExecStop=
PrivateTmp=True
[Install]
WantedBy=multi-user.target- 重载
systemctl daemon-reload
- 使用命令启动/停止/重启服务
systemctl start/stop/restart frp.service
- 新建文件
可以在服务器上同时搭配nginx把不同的端口代理到不同的域名(需要域名解析到公网ip)上,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14server {
listen 80;
server_name a.hsianglee.cn;
location / {
proxy_pass http://127.0.0.1:3015;
}
}
server {
listen 80;
server_name b.hsianglee.cn;
location / {
proxy_pass http://127.0.0.1:3013;
}
}即访问a.hsianglee.cn即可访问配置服务端管理界面,访问b.hsianglee.cn即可访问到内网共享文件
如果要添加本地的其它端口,直接修改配置文件就可以了。
配置代理服务器,服务器frps.init添加配置
vhost_http_port = 3017
,客户端frpc.init添加如下配置1
2
3
4
5
6[http]
type = tcp
remote_port = 3018
plugin = http_proxy
plugin_http_user = admin
plugin_http_passwd = admin然后打开另一台电脑,配置代理服务器,如下图:
然后浏览器访问baidu之后,便会要求输入用户名和密码,输入之后便可以了
附录:
1. frp文档
2. frp下载地址
3. windows10开启ssh