frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,本教程意在解决外网连接内网服务器(SSH)、内网Windows PC(RDP)。
1.下载Frp软件
https://github.com/fatedier/frp/releases
这里,我们以公网Linux服务器作为Frp服务端,内网Linux服务器、内网Windows PC作为客户端。软件压缩包同时包含了服务端和客户端,所以只需要按照系统下载即可。
例如,Linux 64位为:
frp_0.30.0_linux_amd64.tar.gz
Windows 64位为
frp_0.30.0_windows_amd64.zip
2.配置Linux服务端
此服务器需具有公网IP,作为frp服务端使用。
修改 frps.ini 如下:
[common]
bind_port = 7000 # 内部绑定端口,供客户端连接服务端使用
token = 010ab1fb-fcb3-40ea-a4e2-eb5d8bd19925 # 连接验证
注:token为连接验证,需要在服务端和客户端的[common]字段里同时设置,相同则能连接。这里推荐一个生成UUID的网站来生成token: https://www.uuidgenerator.net/
设置 systemctl 守护进程与开机自启
新建frp.service文件
$ vim /etc/systemd/system/frp.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
[Install]
WantedBy=multi-user.target
注意根据自身情况,修改ExecStart的程序目录。
开机自启:
$ systemctl enable frp
启动frp
$ systemctl start frp
3.配置Linux客户端(SSH)
此为需要远程连接的内网Linux服务器。
修改 frpc.ini 如下:
[common]
server_addr = xxx.xxx.xxx.xxx # 公网IP,即服务端IP
server_port = 7000 # 内部绑定端口,供客户端连接服务端使用
token = 010ab1fb-fcb3-40ea-a4e2-eb5d8bd19925 # 需与服务端token相同
[ssh] # 配置多个客户端时,名字不能相同,否则会冲突
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 暴露在外的端口,供ssh连接使用
设置 systemctl 守护进程与开机自启
这里和服务端不同的就是服务端启动用frps,客户端启动用frpc。
$ vim /etc/systemd/system/frp.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
ExecReload=/usr/local/frp/frpc reload -c /usr/local/frp/frpc.ini
[Install]
WantedBy=multi-user.target
开机自启和启动frp,请参考服务端设置,不做赘述。
试试远程连接吧
IP为服务端IP(公网IP),端口号为frpc.ini里设置的remote_port,此处为6000
4.配置Windows客户端(RDP)
配置Windows客户端的目的是利用Windows自带的远程桌面连接内网PC,抛弃辣鸡Teamviewer。
修改 frpc.ini 如下:
[common]
server_addr = xxx.xxx.xxx.xxx # 公网IP,即服务端IP
server_port = 7000 # 内部绑定端口,供客户端连接服务端使用
token = 010ab1fb-fcb3-40ea-a4e2-eb5d8bd19925 # 需与服务端token相同
[RDP] # 配置多个客户端时,名字不能相同,否则会冲突
type = tcp # RDP为TCP协议
local_ip = 127.0.0.1
local_port = 3389 # 内部端口为3389
remote_port = 6000 # 远程连接PC的端口
利用Windows计划任务添加开机自启
计算机管理-系统工具-任务计划程序-创建任务
按照图片进行设置
试试远程连接吧
打开Windows自带的远程桌面连接, 输入IP地址:端口号
输入Windows账户名和密码
连接成功,就和本地操作一模一样,完美