用frp来在OpenWrt下实现内网穿透

编程 Oct 03, 2020

最近从 PandoraBox 转到 OpenWrt 阵营,无奈原本的 phddns 无法使用了,今天摸索了下 frp,发现出乎意料的简单!下面以 Windows Server 2016 来作服务端,以 OpenWrt 18.06.8 来作客户端进行演示。

写在前面

frp 与普通内网穿透最大的不同是它需要一个有固定外网 IP 的主机或是云服务器(VPS),如果你恰好有那么一个正在挂着博客网站的云服务器,那么它就能派上用场!

准备步骤

  • 前往这里分别下载服务端和客户端所需的程序

比如我 VPS 的系统是 Windows、CPU 是 E5,路由器的系统是 OpenWrt、CPU 是 MT7620A,那么我就要下载 windows_amd64 和 linux_mipsle 这两个版本。

  • 解压

解压后会发现里面主要分为 frps 和 frpc 两种,前者是给服务端后者是给客户端用的,整理下后分别发送给你的服务端和客户端。

把路由器的 Web 管理页放到公网去

服务端配置

  • 修改服务端的 frps.ini 文件,设置 http 访问端口为 8080:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080

然后在服务端的 Windows 防火墙 里开放 7000 和 8080 端口,另外安全起见建议你在调试结束后修改默认的 7000 端口或添加客户端身份验证。

  • 启动 frps:
frps -c ./frps.ini

出现start frps success即说明启动成功。

客户端配置

  • 修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 Web 服务对应的端口,绑定自定义域名 www.yourdomain.com:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
  • 启动 frpc:
./frpc -c ./frpc.ini

当出现login to server successstart proxy success时,说明服务端与客户端已成功建立连接,这之后你就能通过访问http://www.yourdomain.com:8080访问到内网中路由器的 Web 管理页了。

我把路由器 Web 管理页映射到了http://router.snow-mountain.life:8080

TopNep

frp 能做的事有很多,你可以查看这里学习更多操作。

让 frpc 在后台运行

当我们关闭路由器的 ssh 后,frpc 也同时关闭了,为了避免这种尴尬的事情发生,我们可以使用nphup来运行 frpc

如果你的路由器没有nohup,就去安装它(废话):

opkg update
opkg install coreutils-nohup

然后执行:

nohup ./frpc -c ./frpc.ini &

之后就能放心的关闭 ssh 了,而输出则会保存在 frpc 相同目录下的 nohup.out 中

如果想结束 frpc 则:

killall -9 frpc

即可

使用 openwrt-frpc 和 luci-app-frpc

在折腾了两天启动脚本想让 frpc 开机自启动无果后,我突然发现了 Github 上早有大佬针对 Openwrt 编写了openwrt-frpcluci-app-frpc

立马 Star→ 下载 → 安装 → 体验!

啊,这就是我一直想要的!

具体设置就不介绍了,设置名称跟上面的 frpc.ini 文件里的都是一一对应的,很好上手~

标签

知识共享许可协议
本站文章除特别声明外,均采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
您的支持将鼓励我们继续创作!

Taozc

19级毕业生,喜欢动漫、二战、后摇、新古典和小动物,最近在阅读《深入浅出node.js》

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.