目录
展开
一、前言
如果你在本地搭建了一些内网服务通过端口隐射对外提供访问,80/443大概率是不可用的,访问必须使用IP:PORT
形式,用户体验度很差,本文将通过利用CDN来进行实时回源IP的切换
架构如下:
可通过两种方式实现,路由器上做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
$
调用:
写成定时任务:
$ crontab -l
*/5 * * * * /bin/bash /server/scripts/updatecdn.sh &>/dev/null #每五分钟执行一次,根据实际场景更改
$
2.通过Openwrt实现
Openwrt实现和第一种方式一样,写成脚本,通过crontab做定时任务
3.通过RouterOS实现
RouterOS实现需要研究下语法,写到定时计划中即可:
感兴趣可以研究下,这里不细讲
三、答疑
这里会有人问我,为什么不检测IP变化再执行脚本呢?
我给你画一个流程图对比下:
显而易见,不管是主路由、旁路由还是RS,简单粗暴的方式都是通过crond定时执行回源脚本。