内网穿透 FRP
提示
FRP(Fast Reverse Proxy)is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it supports TCP and UDP, as well as HTTP and HTTPS protocols, where requests can be forwarded to internal services by domain name.
来自 FRP
此处仅以配置 SSH 服务为示例。
准备
1. 安全设置
这是一件有风险的事情,所以开始前最好确认你的公网、内网服务器都已经做好防护工作,可参考SSH 让你的服务器更安全。
2. 资源下载
需要在 github 上下载最新的 frp release 到公网、内网服务器上,注意选择对应的版本。
3. 端口开放
如果是阿里云,需要在云实例中开放下方将要使用的端口。
bind_port/server_portremote_port
配置
1. 公网服务器
公网服务器修改 frps.ini 文件。
# frps.ini
[common]
bind_port = 7000
配置解释:
bind_port为frp服务器端接收客户端流量的端口
启动服务端 frp 程序。
nohup ./frps -c frps.ini &
2. 内网服务器
内网服务器修改 frpc.ini 文件。
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
配置解释:
server_addr为frp服务端ip地址,也可以是域名server_port为frp服务端的bind_portlocal_ip为frp客户端的ip或127.0.0.1local_port为frp客户端的 ssh 端口,其默认为 22,在安全设置时可能修改为其他remote_port为frp客户端挂载到frp服务端的端口。在此示例中访问服务端6000端口相当于访问客户端22端口
启动客户端 frp 程序。
nohup ./frpc -c frpc.ini &
3. 停止服务
以上述形式启动的服务,需要先找到进程号再停止。
ps -aux | grep frp | grep -v grep
# 72029
kill -9 72029
# 验证
ps -aux | grep frp | grep -v grep
使用
1. 公网跳板(不推荐)
在之前安全设置中已经使用了密钥登录,为了简化操作可以配置 ssh config。
# 进入公网
ssh aliyun
# 再从公网进入内网
ssh private
2. 直接访问
若公网服务端被黑了,就会导致黑客可以直接进入你的内网。当然如果希望公网只是一个跳板,方便其余机器进入也可以选择上一种方式。
# 直接访问内网
# 配置该 config 时可以认识到 `local_port` 与 `remote_port` 之间的关系
ssh aliyun2private
systemd
在下载对应的 frp 文件时,解压后注意到存在 systemd 文件夹,查看例如服务端配置。
# cat systemd/frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
# cat systemd/frpc.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target
仅说明 frps.service 配置文件:
frps启动程序放入/usr/bin目录中frps.ini配置文件放入/etc/frp目录中frps.service服务程序放入/lib/systemd/system目录中
最后:
# 更新服务文件,记得加上 sudo
sudo systemctl daemon-reload
# 开启
sudo systemctl start frps
