OpenWrt 使用 frp 实现内网穿透

有时为了方便我们需要远程访问路由器,不过远程访问并没有那么容易。

如果你有公网 IP 的话,打开端口就可以访问,但 IPv4 就那么点,不是每个人都有,IPv6 还没普及,所以需要另一种方法:内网穿透。

什么是内网穿透?简单来讲就是:内网设备和公网设备之间保持一个连接,当用户访问公网设备时,公网设备将请求转发给内网设备,由内网设备处理请求再把数据返回给公网设备接着返回给用户,从而可以远程访问内网设备。

内网穿透可以使用内网穿透软件来实现,比如:Ngrok 和 frp。

Ngrok 搭建比较复杂,需要从 Google 下载文件,对国内 VPS 不太友好。 frp 就好多了,配置简单,支持多种协议,这次我们就用 frp 来搭建一个内网穿透。

OpenWrt 使用 frp 实现内网穿透

准备工作

一台公网设备,比如:服务器、VPS 或者 其他有公网 IP 的设备。

路由器可用空间需大于 5M

搭建内网穿透

进入 https://github.com/fatedier/frp/releases/latest 下载公网设备和路由器对应的版本

公网设备如果是服务器或者 VPS,系统是 Windows 下载 Windows 版本,Linux 下载 Linux 版本,然后根据系统位数再选择 i386 或 amd64。

路由器根据 CPU 架构下载对应的 Linux 版本,这个我说过很多次了。

压缩包会有两个文件 frps 和 frpc,一个是服务端,一个是客户端。frps 上传到公网设备,frpc 上传到路由器,要注意,不要把公网设备版本上传到内网设备上面。配置文件也需要上传,frps.ini 和 frpc.ini。

设置权限:chmod +x frp*,创建软连接:ln -s /root/frp/frps /usr/bin/frpsln -s /root/frp/frpc /usr/bin/frpc

这里以单人使用为例,如果需要配置多人使用,请自行查看官方文档进行修改。

配置服务端

打开配置文件:frps.ini

bind_port = 7000 是 frps 的端口,为了安全,最好改成别的。

添加一个配置项:privilege_token,这个用来做身份验证,只有 frps 和 frpc 一致才可以建立连接,注意,它们之间时间差不能超过 15 分钟,可以通过添加 authentication_timeout 配置项来更改这个时间,单位为秒,默认为 900。如果你使用的是国外 VPS 的话,需要注意这一点。

如果有需要的话,添加 log_file 配置项保存日志,比如:log_file = /var/log/frps.log,注意,添加此项后,运行 frp 不会输出任何信息。

添加 vhost_http_portvhost_https_port 配置项,设置 HTTP(S) 端口。

配置客户端

打开配置文件:frpc.ini

server_addrserver_port 是 frps 的 IP 和端口。

下面默认有一个 SSH 配置,把它删了。

如果你在 frps 设置了 privilege_token,那 frpc 也需要同样的配置项。

如果有需要的话,添加 log_file 配置项保存日志,比如:log_file = /var/log/frpc.log ,注意,添加此项后,运行 frp 将不会有任何输出信息。

添加一个配置节点 [WEB]

添加 type 配置项,设置转发协议,支持:http、https、tcp、udp,转发 Web 使用 HTTP(S),当然,也可以使用 TCP,但是不推荐。

添加 local_iplocal_port 设置本地 IP 和端口,IP 设置为 127.0.0.1,端口设置为你要转发的端口即可,Web 一般为 80 和 443 (HTTPS)

可以添加 custom_domains 设置自定义域名,如果配置了多个 HTTP(S),可以用不同的域名来访问。

可以添加 use_encryption = trueuse_compression = true 加密和压缩数据,但会消耗额外的 CPU 资源。

可以添加 http_userhttp_pwd 来保护 Web 服务,仅支持 HTTP。

如果你需要转发 TCP 和 UDP,只需要在配置节点里添加 remote_port 配置项,设置远程端口即可。比如转发 SSH,remote_port 设置为 222,那么只需要访问 ssh://远程IP:222 就可以了。

一切配置完成后,先在前端运行测试一下。

服务端:frps -c frps.ini

客户端:frpc -c frpc.ini

务必先运行服务端再运行客户端,否则客户端会自动退出。

运行成功后访问测试一下,没问题的话,就可以放在后台运行了。

后台运行

后台运行有两种方法:

第一种:

运行:frpc -c /mnt/sda1/frp/frpc.ini >/dev/null 2>&1 &

结束:killall frpc

开机运行:sed -i '/exit 0/i\sleep 10 && frpc -c /mnt/sda1/frp/frpc.ini >/dev/null 2>&1 &' /etc/rc.local

取消开机运行:sed -i '/sleep 10 && frpc -c \/mnt\/sda1\/frp\/frpc.ini >\/dev\/null 2>&1 &/d' /etc/rc.local

不过这种方法后台运行 frp,好像特别容易挂掉。

使用这种方法推荐开启日志保存

第二种:使用 screen,路由器安装命令:opkg update && opkg install screen,服务器安装命令:sudo apt-get install screen -ysudo yum install screen -y

screen 的详细用法大家可以去百度一下,我这里只说怎么用它来后台运行 frp。

运行:screen -dmS frpc frpc -c /mnt/sda1/frp/frpc.ini

查看运行状态:screen -r frpc

查看运行状态后,按 Ctrl + C 结束进程,按 Ctrl + A + D (A 和 D 依次按下) 为暂时退出,依然保持后台运行。

开机运行:sed -i '/exit 0/i\sleep 10 && screen -dmS frpc frpc -c /mnt/sda1/frp/frpc.ini' /etc/rc.local

取消开机运行:sed -i '/sleep 10 && screen -dmS frpc frpc -c \/mnt\/sda1\/frp\/frpc.ini/d' /etc/rc.local

开机延迟 10 秒运行是确保路由器联网,避免 frpc 自动退出。

如果你想远程电脑,可以在电脑上安装 TeamViewer,然后开启主板 BIOS 里的 PCI 设备唤醒,路由器安装 WOL 网络唤醒,这样你就可以远程开机,并且使用 TeamViewer 控制电脑。

当然,你也可以转发内网内其他设备的服务,将 frpc 的 local_ip 配置项改为内网其他设备的 IP 即可。

GitHub: https://github.com/fatedier/frp

微信公众号二维码

微信扫描二维码关注我们

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.