frp内网穿透
地址。
1. 服务端
- 配置 vim /usr/lib/systemd/system/frps.service,实现设置
systemctl
管理。类似可配置frpc.service。
frps.service(vim /usr/lib/systemd/system/frps.service):frpc.service(vim /usr/lib/systemd/system/frpc.service):1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Frps Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/home/frp/frps -c /home/frp/frps.toml
[Install]
WantedBy=multi-user.target1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Frpc Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/home/frp/frpc -c /home/frp/frpc.toml
[Install]
WantedBy=multi-user.target - 下载相应版本的frp(下载到home文件夹内)
1
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
- 解压&复制&给予权限
1
2
3
4
5tar -xzvf frp_0.54.0_linux_amd64.tar.gz
cp -r frp_0.54.0_linux_amd64 frp
# 给予权限
chmod -R 777 frp - 进入frp文件夹,编辑frps.toml,vim frps.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# frp服务器端口,防火墙需要开放
bindPort = 14000
# 自定义监听端口,所有对该端口的访问将被转发到本地内网,配合反向代理可不做防火墙放行
vhostHTTPPort = 14001
vhostHTTPSPort = 14002
# QUIC 绑定的是 UDP 端口,可以和 bindPort 一样
quicBindPort = 14003
# 认证token,frpc/frps通信认证
auth.token = "psw"
# 是否启用端口复用
transport.tls.disableCustomTLSFirstByte = false
# 日志输出文件路径
log.to = "slog"
# 日志文件最多保留天数
log.maxDays = 7
# 服务端监听面板
webServer.addr = "0.0.0.0"
webServer.port = 14004
webServer.user = "admin"
webServer.password = "psw"
#webServer.tls.certFile = "Your server.crt"
#webServer.tls.keyFile = "Your server.key" - 启动&添加到开机自启动
1
2
3
4
5
6
7
8
9
10
11
12# 启动
sudo systemctl start frps
sudo systemctl start frpc
# 重启
sudo systemctl restart frps
sudo systemctl restart frpc
# 添加到开机自启动
systemctl enable frps
systemctl enable frpc
# 查看状态
systemctl status frps
systemctl status frpc2. 配置NGINX
实现反向代理,vim /etc/nginx/conf.d/frp.domain.com.conf重启nginx,sudo systemctl restart nginx。至此,服务端配置完毕。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60# 服务端监听面板
server {
listen 443 ssl;
server_name frpi.domain.com; # 域名
ssl_certificate /home/certs/domain.com.pem; # ssl路径
ssl_certificate_key /home/certs/domain.com.key; # ssl路径
# 其他ssl设置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
# access_log /etc/nginx/conf.d/logs/example.com.log combined;
location / {
proxy_pass http://localhost:14004; # 代理的服务端口
proxy_set_header Host $host;
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 $scheme;
}
}
server {
listen 80;
server_name frpi.domain.com; # HTTP重定向到HTTPS
return 301 https://$server_name$request_uri;
}
# frp服务端口代理
server {
listen 80;
listen [::]:80;
server_name frps.domain.com;
location / {
proxy_pass http://localhost:14000; # 将流量发送到应用程序所在的端口
proxy_set_header Host $host;
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 $scheme;
}
}
# 穿透的服务端口
server {
listen 80;
server_name *.frp.domain.com;
location / {
proxy_pass http://localhost:14001; # 将流量发送到应用程序所在的端口
proxy_set_header Host $host;
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 $scheme;
}
}
3. 客户端
编写frpc.toml
1 | # 远程服务器地址,支持域名和ip |
启动:./frpc -c ./frpc.toml
。
服务器端设置好反向代理、域名供应商处设置好子域名后,即可用xx.frp.domains.com访问本地服务。
4. 加密的SSH链接
按前设置好frp服务器端。然后分别在两台计算机上(A、B,假设要从B访问A)设置好frp客户端,即可进行SSH连接。
计算机A(目标计算机)
1
2
3
4
5
6
7# frpc.toml
[[proxies]]
name = "xx_secret_ssh"
type = "stcp"
secretKey = "psw"
localIP = "127.0.0.1"
localPort = 22在计算机A上启动frpc服务,
./frpc -c ./frpc.toml
。计算机B
1
2
3
4
5
6
7[[visitors]]
name = "xx_ssh_visitor"
type = "stcp"
serverName = "xx_secret_ssh"
secretKey = "psw"
bindAddr = "127.0.0.1"
bindPort = 6000在计算机B启动frpc服务,
./frpc -c ./frpc.toml
。
设置完毕,在计算机B上可通过ssh -oPort=6000 root@127.0.0.1
连接计算机A。
5. 数据库穿透
数据库所在计算机配置:
1 | # 3306为数据库服务所在端口 |
则可在任何地方,以frps服务器计算机ip:13306访问数据库。