openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案
Posted qyzhg->写点博客玩玩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案相关的知识,希望对你有一定的参考价值。
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安全访问的方案的主要内容,如果未能解决你的问题,请参考以下文章