OpenWrt 使用 frp 实现内网穿透 准备工作 搭建内网穿透 文章评论
OpenWrt 使用 frp 实现内网穿透 准备工作 搭建内网穿透 文章评论
最后更新时间:2018年11月17日 有时我们需要为了方便,远程访问路由器,不过远程访问可能并没有那么容易。
如果你有公网 IP 的话,打开某些端口就可以访问,但 IPv4 地址就那么点,不够给每个人或每台设备分配,IPv6 还没完全普及。这时候需要另一种方法:内网穿透。
什么是内网穿透?简单来讲就是:内网设备和公网设备之间保持一个持久连接,当用户访问公网设备时,公网设备将请求转发给内网设备,由内网设备处理请求再把数据返回给公网设备接着返回给用户,从而可以远程访问内网设备。
内网穿透可以使用内网穿透软件来实现,比如:Ngrok 和 frp。
Ngrok 搭建比较复杂,需要从 Google 下载文件,对国内 VPS 不太友好。 frp 就好多了,配置简单,支持多种协议,这次我们就用 frp 来搭建一个内网穿透。
准备工作
一台公网设备,比如:服务器、VPS 或者 其他有公网 IP 的设备。
路由器可用空间需大于 5M
搭建内网穿透
进入 https://github.com/fatedier/frp/releases/latest 下载公网设备和路由器对应的版本
公网设备如果是服务器或者 VPS,系统是 Windows 下载 Windows 版本,Linux 下载 Linux 版本,然后根据系统位数再选择 i386 或 amd64。
路由器根据 CPU 架构下载对应的 Linux 版本,这个我说过很多次了。
压缩包会有两个可执行文件 frps 和 frpc,s 是服务端,c 是客户端。服务端上传到公网设备,客户端上传到路由器,配置文件也需要上传,frps.ini 和 frpc.ini。
首先创建一个存放 frp 的目录:mkdir /usr/local/frp
然后将 frp 的可执行文件上传到/usr/local/frp
,当然,你可以上传到别的位置。
设置可执行文件权限:chmod +x /usr/local/frp/frp*
创建可执行文件的软连接:ln -s /usr/local/frp/frps /usr/bin/frps
或ln -s /usr/local/frp/frpc /usr/bin/frpc
下面配置以单人使用为例,如果需要配置多人使用,请自行查看官方文档进行修改。
配置服务端 打开配置文件:frps.ini
bind_port = 7000
是 frps 的端口,可以改,也可以用默认的。
添加一个配置项:token
,这个用来做身份验证,推荐开启。只有 frps 和 frpc 一致才可以建立连接,注意,它们之间时间差不能超过 15 分钟,可以通过添加authentication_timeout
配置项来更改这个时间,单位为秒,默认为 900。如果你使用的是国外 VPS 的话,需要注意这一点。
如果有需要的话,添加 log_file
配置项保存日志,比如:log_file = /var/log/frps.log
,注意,添加此项后,运行 frp 不会输出任何信息。
添加vhost_http_port
和vhost_https_port
配置项,设置客户端的转发协议为 HTTP 或 HTTPS 时的访问端口。
示例配置文件:https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-frp/frps.ini
配置客户端 打开配置文件:frpc.ini
server_addr
和server_port
是 frps 的 IP 和端口。
下面默认有一个 SSH 配置,把它删了。
如果你在 frps 设置了token
,那 frpc 也需要同样的配置项。
如果有需要的话,添加log_file
配置项保存日志,比如:log_file = /var/log/frpc.log
,注意,添加此项后,运行 frp 将不会有任何输出信息。
可以添加login_fail_exit
配置项决定是否让 fprc 连接 frps 失败后退出程序,推荐设置为false
,防止异常退出。
添加一个配置节点:[web]
添加type
配置项,设置转发协议,支持:http、https、tcp、udp 等,转发 Web 使用 HTTP(S),当然,也可以使用 TCP。
添加local_ip
和local_port
设置本地 IP 和端口,IP 设置为 127.0.0.1,端口设置为你要转发的端口即可,Web 一般为 80 和 443 (HTTPS)
可以添加custom_domains
设置自定义域名,如果配置了多个 Web 服务,可以用不同的域名来访问。
可以添加use_encryption = true
和use_compression = true
加密和压缩数据,但会消耗额外的 CPU 资源。
可以添加http_user
和http_pwd
来保护 Web 服务,仅支持 HTTP。
如果你需要转发 TCP 和 UDP,只需要在配置节点里添加remote_port
配置项,设置远程端口即可。比如转发 SSH,remote_port
设置为 222,那么只需要访问 ssh://远程IP:222 就可以了。
示例配置文件:https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-frp/frpc.ini
你可以直接在我的示例配置文件基础上进行修改。
更多配置参数可以参考官方文档
配置文件修改完成后,同样上传到你的公网设备和路由器的 frp 目录。
一切配置完成后,先在前端运行测试一下。
服务端:frps -c /usr/local/frp/frps.ini
客户端:frpc -c /usr/local/frp/frpc.ini
如果提示命令不存在,请检查你的软连接是否创建有误。
务必先运行服务端再运行客户端,否则客户端会自动退出。
运行成功后访问测试一下,没问题的话,就可以放在后台运行了。
后台运行 第一种:
运行:frpc -c /usr/local/frp/frpc.ini >/dev/null 2>&1 &
结束:killall frpc
开机运行:sed -i '/exit 0/i\sleep 10 && frpc -c /usr/local/frp/frpc.ini >/dev/null 2>&1 &' /etc/rc.local
取消开机运行:sed -i '/sleep 10 && frpc -c \/usr\/local\/frp\/frpc.ini >\/dev\/null 2>&1 &/d' /etc/rc.local
不过这种方法后台运行 frp,好像特别容易挂掉。
使用这种方法推荐开启日志保存
第二种:使用 screen
路由器安装命令:opkg update && opkg install screen
,服务器安装命令:sudo apt-get install screen -y
或 sudo yum install screen -y
。
screen 的详细用法大家可以去百度一下,我这里只说怎么用它来后台运行 frp。
运行:screen -dmS frpc frpc -c /usr/local/frp/frpc.ini
查看运行状态:screen -r frpc
查看运行状态后,按 Ctrl + C 结束 frpc,按 Ctrl + A + D (A 和 D 依次按下) 为暂时退出,依然保持后台运行。
开机运行:sed -i '/exit 0/i\sleep 10 && screen -dmS frpc frpc -c /usr/local/frp/frpc.ini' /etc/rc.local
取消开机运行:sed -i '/sleep 10 && screen -dmS frpc frpc -c \/usr\/local\/frp\/frpc.ini/d' /etc/rc.local
开机延迟 10 秒运行是确保路由器联网,避免 frpc 自动退出。
第三种(仅适用于有 systemd 的 Linux 发行版):
下载客户端和服务端对应的 systemd 服务文件,里面的路径是默认的/usr/local/frp/
,如果你的路径不是这个,注意更改。
服务端:sudo wget https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-frp/frps.service -O /lib/systemd/system/frps.service
客户端:sudo wget https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-frp/frps.service -O /lib/systemd/system/frps.service
开机启动 frp:systemctl enable frpc.service
或systemctl enable frps.service
启动 frp:systemctl start frpc.service
或systemctl start frps.service
停止 frp:systemctl stop frpc.service
或systemctl stop frps.service
重启 frp:systemctl restart frpc.service
或systemctl restart frps.service
查看 systemd 服务状态:systemctl status frpc.service
或systemctl status frps.service
如果提示 running 则表示运行正常
如果你想远程电脑,可以在电脑上安装 TeamViewer,然后开启主板 BIOS 里的 PCI 设备唤醒,路由器安装 WOL 网络唤醒,这样你就可以远程开机,并且使用 TeamViewer 控制电脑。
当然,你也可以转发内网内其他设备的服务,将 frpc 的 local_ip
配置项改为内网其他设备的 IP 即可。
GitHub: https://github.com/fatedier/frp
微信扫描二维码关注我们
如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。