openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案

Posted qyzhg->写点博客玩玩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案相关的知识,希望对你有一定的参考价值。

需求背景

内网使用openwrt,一些服务想在外网使用。
自己有公网ip,不想使用frp等内网穿透,链路不好的时候比自己的公网ip慢太多了
此时,想要该服务走https的链路就比较绕了,折腾好了,特此记录一下,如有不对的地方,欢迎指教

前期准备

内网服务器 >= 1个(本文使用两个)
准备一个域名,使用openwrt中的ddns,解析一个泛域名,方便之后配转发(ddns一般是不能解析泛域名的,可以先ddns解析一个A记录,然后再将一个泛域名CNAME指向该动态解析的域名)
使用acme.sh来生成一个免费的证书,具体不在赘述,GitHub上有中文使用文档
准备一个需要公网访问的服务,本文中使用一个画流程图的工具做示例

实现过程

整体流程图

操作过程

1.将网关机器的端口映射到公网

本文的nginx内网服务器ip为 10.0.0.7
https使用默认端口443

openwrt -> 防火墙 -> 端口转发
配置了两条转发
转发1:监听http请求 wan口端口10080(国内ISP封掉了80,直接+10000用10080),内部转发到nginx的服务器的80端口
转发2:监听https请求 wan口端口10443 (国内ISP也封了443,也直接+10000,使用10443),内部转发到nginx的服务器的443端口

2.启动一个内网应用

先要有一个应用,随便在内网服务器的docker里启一个

docker run -d --name=draw -p 8003:8080 --restart=always fjudith/draw.io

现在用的服务器的内网ip为10.0.0.4,8003端口为该服务

使用内网访问一下看看效果,并没有什么问题

3.nginx配置

1.配置nginx.conf主配置文件


ssl处配置acme.sh生成的证书的路径
ssl_ciphers处一般使用aes即可,由于我使用的cpu是j1900,无aes指令集,所以就没使用aes,换成了chacha20
最后两行配置是默认使用的include,所以就不要在这里配置了,去include的目录中配置

按照习惯,本文现将配置文件都写入到sites-available中,然后从sites-enabled挂软连接,开启哪个就挂哪个域名的软连接

2. 配置要映射的站点

1.进入sites-available目录,建一个配置文件,我自己的使用习惯是直接使用域名,编辑文件,配置一个server,监听80和443,反代内网的目标服务(10.0.0.4:8003)

2.进入sites-enabled目录,将该服务软连接过来

ln -s ../sites-available/diagrams.home.qyzhg.com

重启nginx

nginx -s reload

验证

由于没有使用标准https的端口443,输入域名的时候要输入完整的协议+域名+端口

大功告成

以上是关于openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案的主要内容,如果未能解决你的问题,请参考以下文章

Nginx服务器作反向代理实现内部局域网的url转发配置

CentOS 7.9使用Nginx的stream模块实现内网端口转发

利用nginx的stream模块实现内网端口的转发代理

利用nginx的stream模块实现内网端口的转发代理

搭建nginx反向代理用做内网域名转发

搭建Nginx反向代理做内网域名转发