用云服务器搭建Frp内网穿透,实现远程访问家里电脑
家里有台服务器或者NAS,想在外面也能访问------但家里是宽带动态IP,没有公网IP,直接访问不了。
Frp内网穿透就是解决这个问题的:在有公网IP的云服务器上跑服务端(frps),家里电脑跑客户端(frpc),流量经过云服务器中转,外网就能访问到家里的设备了。
原理简单说
外网用户 → 云服务器(frps) → 家里电脑(frpc) → 内网服务
云服务器有公网IP,家里电脑没有,frpc连上frps之后,外网访问云服务器的指定端口,流量就会转发到家里电脑对应的端口上。
准备材料
- 一台有公网IP的云服务器(跑frps)
- 家里要穿透的电脑或设备(跑frpc)
云服务器推荐用雨云,价格便宜,带宽按需选,Frp中转流量不大,1-3M带宽就够日常用。
服务端安装(云服务器上操作)
去GitHub下载frp:https://github.com/fatedier/frp/releases
选Linux amd64版本:
bash
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -xzf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64
创建服务端配置文件 frps.toml:
toml
bindPort = 7000
auth.token = "你设置的密钥"
bindPort 是frp控制连接的端口,token是验证密钥,客户端连接时要匹配。
启动frps:
bash
./frps -c frps.toml
用screen让它后台跑:
bash
screen -S frps
./frps -c frps.toml
# Ctrl+A D 脱离
在云服务器安全组放行7000端口(TCP),以及你后续要用的业务端口。
客户端配置(家里电脑上操作)
在家里电脑下载对应系统的frp包(Windows就选windows_amd64)。
创建客户端配置文件 frpc.toml:
toml
serverAddr = "你的云服务器IP"
serverPort = 7000
auth.token = "你设置的密钥"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080
这个配置做了两个穿透:
- SSH:本地22端口 → 云服务器6022端口
- Web:本地80端口 → 云服务器8080端口
以后在外面访问 云服务器IP:6022 就相当于SSH到家里电脑,访问 云服务器IP:8080 就是家里的Web服务。
启动frpc:
bash
./frpc -c frpc.toml
Windows上双击运行或者命令提示符里执行。
常见使用场景
远程桌面:Windows远程桌面用的是3389端口,穿透出来就能从外面远程控制家里电脑:
toml
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 13389
访问NAS:大多数NAS的Web界面是80或者5000端口,穿透出来随时随地管理文件。
游戏联机:朋友想连家里开的游戏服务器,穿透对应端口就行,不需要对方有公网IP。
设置开机自启(Linux服务端)
创建systemd服务文件,让frps开机自动启动:
bash
sudo nano /etc/systemd/system/frps.service
内容:
ini
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/root/frp_0.61.0_linux_amd64/frps -c /root/frp_0.61.0_linux_amd64/frps.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
bash
sudo systemctl enable frps
sudo systemctl start frps
Frp配置一次之后基本不需要管,家里设备开机自动连上,外网随时能访问,挺方便的。有具体场景不知道怎么配的欢迎评论区问。
云服务器推荐:雨云官网