openwrt使用NATMap配置cloudflare实现IPv4 web服务端口隐藏
NATMAP 配合 cloudflare origin rules 实现动态端口隐藏
openwrt安装NATMAP
在软件包界面搜索安装luci-i18n-natmap-zh-cn
在cloudflare配置origin rules
添加一条DNS记录
类型 | 名称 | 内容 | 代理状态 | TTL |
---|---|---|---|---|
A | * | 当前IP | ✅ | 自动 |
然后按F12打开控制台,点击编辑--保存
,查看控制台中的中的网络请求,找到一个PATCH https://dash.cloudflare.com/api/v4/zones/xxxxxx/dns_records/xxxxxxxx
的请求,最后的xxxxxxxx就是该条DNS的record id,记录下来后续填入脚本的RECORD
变量中。zones/后边的xxxxxx为zone id,也是需要后续填入脚本的ZONE
变量中
点击左侧 规则--概述
, 点击右侧创建规则,选择源服务器规则。名称随便,字段选主机名
,运算符选通配符
,值填*web.xxxxxx.xyz
,将xxxxxx.xyz替换为自己的域名。 目标端口选择重写到任意一个端口。(其实这里随便怎么配置都行,反正后面都会被脚本改了),点击部署。
回到列表页后点击刚刚创建的规则,然后按F12打开控制台(已经打开了就不用再按了),点击保存,在请求列表中找到一个PATCH https://dash.cloudflare.com/api/v4/zones/xxxx/rulesets/xxxx/rules/xxxx
的请求,rulesets/后边的xxxx部分就是rule id,记录下来后续填入脚本的RULE
变量中。zones
最后点击右上角 头像--配置文件,点击API令牌,创建令牌,选择 编辑区域DNS的模板。权限那里点击添加更多,选择 区域 OriginRules 编辑
。区域资源一栏的特定区域选择自己的要生效的域名,最后保存,将令牌内容记录下来填入到脚本的AUTH
变量中
编辑脚本
将以上步骤得到的信息依次填入脚本一开始的变量赋值中,记得将123613.xyz
替换为自己的域名
#!/bin/sh
ZONE=''
RECORD=''
RULE=''
EMAIL=''
AUTH=''
DOMAIN='*.123613.xyz'
WILDCARD_DOMAIN='*web.123613.xyz'
ADDR=${1}
PORT=${2}
# DNS
while true; do
curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE}/dns_records/${RECORD}" \
-H "X-Auth-Email: ${EMAIL}" \
-H "Authorization: Bearer ${AUTH}" \
-H "Content-Type:application/json" \
--data "{\"type\":\"A\",\"name\":\"${DOMAIN}\",\"content\":\"${ADDR}\",\"ttl\":60,\"proxied\":true}" > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
break
fi
done
# Origin rule
while true; do
curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE}/rulesets/${RULE}" \
-H "Authorization: Bearer ${AUTH}" \
-H "Content-Type:application/json" \
--data "{\"rules\":[{\"expression\":\"(http.host wildcard \\\"${WILDCARD_DOMAIN}\\\")\",\"description\":\"natmap\",\"action\":\"route\",\"ac
if [ $? -eq 0 ]; then
break
fi
done
然后在路由器中执行vim /usr/bin/wdns
,将脚本内容拷贝进去保存,执行chmod +x /usr/bin/wdns
增加权限
设置NATMAP规则
在openwrt管理界面中找到 服务--NATMap,添加一条记录
配置项 | 值 |
---|---|
协议 | TCP |
地址族协议 | 仅IPv4 |
接口 | wan |
Keep-alive 间隔 | 留空 |
STUN服务器 | turn.cloudflare.com |
HTTP服务器 | qq.com |
绑定端口 | 10443(可自己改) |
转发模式 | ✅ |
转发目标 | 自己web服务器IP |
转发端口 | 自己web服务器监听的端口 |
通知脚本 | /usr/bin/wdns |
点击保存,等个1分钟左右回来看看外部IP和外部端口是否有值,有就说明穿透成功了。
使用cloudflare的长效证书
点击cloudflare左侧的SSL/TLS,将SSL/TLS 加密
改为完全
,
点击左侧边缘证书,右侧下拉勾选始终使用HTTPS ✅
点击左侧客户端证书,主机编辑为 *.123613.xyz 和 123613.xyz, 将123613.xyz替换为自己的域名。点击 创建证书,证书有效期选择15年,点击创建,将证书私钥和CSR内容保存到自己的web服务器中,配置使用该证书内容。
nginx proxy manager 使用参考链接的利用NPM反代
部分
以caddy为例,将证书内容保存到 /data/caddy/cf-ssl/123613.xyz.pem和/data/caddy/cf-ssl/123613.xyz.key中,记得替换自己的域名
然后配置Caddyfile
(tls-cf) {
tls /data/caddy/cf-ssl/123613.xyz.pem /data/caddy/cf-ssl/123613.xyz.key
}
*.123613.xyz {
import tls-cf
@mt host mt.123613.xyz
handle @mt {
reverse_proxy 192.168.2.5:8063
}
@mt1 host mtweb.123613.xyz
handle @mt1 {
reverse_proxy 192.168.2.5:8063
}
@fc host fc.123613.xyz
handle @fc {
reverse_proxy 192.168.2.5:32818
}
@fc1 host fcweb.123613.xyz
handle @fc1 {
reverse_proxy 192.168.2.5:32818
}
}
以mt.123613.xyz
为例,将mt.123613.xyz转发到服务所在ip端口,mt.123613.xyz是用于IPv6直连的,mtweb.123613.xyz是用于IPv4访问cloudflare规则后访问到stun穿透的地址的。
则访问 https://mtweb.123613.xyz 是访问穿透后的地址, https://mt.123613.xyz 则是ipv6直连。