一般家宽有公网IP但是运营商会封80和443端口,某些NAT服务器只有ipv4的端口映射或者没有80和443端口的ipv6,目前使用了cloudflare实现了不添加端口号访问非80端口的web服务,并且cloudflare还可以实现ipv4访问ipv6的服务。

以下操作的主机为有20个10000以上可映射端口(ipv4)以及一个独立的ipv6(没有80,443,8080,8443端口)的NAT服务器,有一个8888端口的OJ服务,需要通过hydro.awking.cn域名直接访问这个服务

注意:使用的域名需要托管到Cloudflare

配置Nginx服务器

首先,在服务器端安装NGINX,我使用的是1panel一键安装的Nginx Proxy Manager(后面简称NPM),http端口设置为1080,https设置为1443(8080和8443也被封了)后台端口设置为81,也可以自己使用docker安装,这里不用1panel自带的反向代理的因为这台服务器OpenResty申请证书会失败。

安装完成后可以访问ip:1080

image
image

申请SSL证书

然后访问IP:81登录后台,NPM后台默认邮箱admin@example.com,密码changeme,登录后需要修改邮箱和密码,然后按照下面的步骤进行

image
image

image
image

image
image

Cloudflare的token获取

登录Cloudflare后选择你的域名

image
image

然后下拉找到获取你的API令牌,然后点击创建令牌,使用第一个模板

image
image

image
image

区域选择自己的域名,也可以选择所有区域(出于安全不建议全区域)

image
image

然后创建并复制token粘贴到之前需要token的位置

image
image

添加反向代理

在NPM主页中找到Proxy Hosts然后添加反向代理

image
image

image
image

并打开SSL

image
image

需要注意的是上面IP地址的填写,如果你的NPM使用的网络不是Host模式,那么IP不能填写127.0.0.1,可以直接填写你的外网IP地址,或者你服务器指定的内网IP地址

隐藏端口

将域名解析到该服务器ipv6地址上,记得要开启黄色的小云朵

image
image

然后在左侧边栏中找到规则->Origin Rules

image
image

创建规则,名字自己,字段选择主机名,运算符选择等于,值输入反向代理的域名,下面的端口重写到自定义的https端口,我自定义的是1443,填写完成后部署即可

image
image

部署完成后等待一段时间,即可通过域名不加端口号访问非80 443端口服务,同时虽然服务器的外网地址是ipv6,通过Cloudflare代理,在没有ipv6只有ipv4的情况下也能够进行访问