三千年读史无外乎功名利禄,九万里悟道终归是诗酒田园。

通过CDN解决本地运营商封堵80/443端口- 动态更新回源IP

一、前言

如果你在本地搭建了一些内网服务通过端口隐射对外提供访问,80/443大概率是不可用的,访问必须使用IP:PORT形式,用户体验度很差,本文将通过利用CDN来进行实时回源IP的切换

架构如下:

image-20210424144010504

可通过两种方式实现,路由器上做IP检测,Ros实现则需要研究下Ros自带的脚本语法,Openwrt或者内网RS可通过crontab定时调用,本文将着重讲解第二种方式

二、开始搭建

前提条件:

  • 本文通过又拍云API讲解,其他CDN厂商异曲同工
  • 你内网有一台常年工作的机器,可以是软路由里面虚拟的,可以是实体存在的,都必须有访问外网能力

1.通过Linux实现(首推)

参考又拍云API,写成如下脚本:

$ cat /server/scripts/updatecdn.sh 
#!/bin/bash
token=''  #这里填写又拍云申请的api token
IP=$(curl -s vip.linux-code.com)   #get now ip

function updateapi() {
curl -s --location --request POST 'https://api.upyun.com/v2/buckets/cdn/source' \
--header 'Authorization: Bearer '"${token}"'' \
--header 'Content-Type: application/json' \
--data-raw '{
    "bucket_name": "'"$1"'",
    "domain": "'"$2"'",
    "source_type": "'"$3"'",
    "cdn": {
        "servers": [
            {
                "host": "'"${IP}"'",
                "port": '"$4"',
                "weight": 1,
                "max_fails": 3,
                "fail_timeout": 30
            }
        ]
    }
}'
}

updateapi veno-data data.linux-code.com http 82
updateapi rokas-openwrt openwrt.linux-code.com http 58888
updateapi rokas-esxi esxi.linux-code.com https 9999
$

调用:

image-20210424153848092

写成定时任务:

$ crontab -l
*/5 * * * * /bin/bash /server/scripts/updatecdn.sh &>/dev/null  #每五分钟执行一次,根据实际场景更改
$

2.通过Openwrt实现

Openwrt实现和第一种方式一样,写成脚本,通过crontab做定时任务

image-20210424154719370

3.通过RouterOS实现

RouterOS实现需要研究下语法,写到定时计划中即可:

image-20210424162312914

感兴趣可以研究下,这里不细讲

三、答疑

这里会有人问我,为什么不检测IP变化再执行脚本呢?

我给你画一个流程图对比下:

image-20210424160731415

显而易见,不管是主路由、旁路由还是RS,简单粗暴的方式都是通过crond定时执行回源脚本。

四、适用场景

  • 适用于流量场景不是特别大的博客、网页站

    如果想做个人私有云,经常上传/下载数据的,不建议接入CDN,流量费也要钱的
    附带又拍云流量计费文档以及在线计算工具

  • 本地有服务器或软路由,想通过CDN来解封80/443来提供web服务

  • 内网穿透(如frp、Ngrok)的服务器带宽太小,使用CDN则不会有带宽限制,取决于你RS的最大带宽

  • 保护本地真实IP不被发现

    如果仅仅通过DDNS解析到本地IP上,那你的IP一直处于裸露状态,此时如果有DDOS/CC攻击就是比带宽/配置了,一旦占满你本地带宽,导致丢包甚至没网

赞(27)
转载请注明出处:RokasYang's Blog » 通过CDN解决本地运营商封堵80/443端口-