分类目录归档:Uncategorized

CF的api使用

建立 DNS Record

example:

[email protected]:~ 
#執行
 curl -X POST "https://api.cloudflare.com/client/v4/zones/8ee1be75cxxxx(我的zone_id)/dns_records" \
 -H "X-Auth-Email: xxxx(我的帳號的郵箱)" \
 -H "X-Auth-Key: 8405868bdxxxx(我的api_key)" \
 -H "Content-Type: application/json" \
 --data '{"type":"A","name":"test.nanqinlang.com(指定要建立記錄的域名)","content":"127.0.0.1(指定A記錄指向的ip)","ttl":120(指定ttl),"proxied":false}'
#返回結果
{"result":{"id":"3abbbaba2xxxx(這條建立的dns記錄的id)","type":"A","name":"test.nanqinlang.com(建立記錄的域名)","content":"127.0.0.1(A記錄指向的ip)","proxiable":false,"proxied":false,"ttl":120,"locked":false,"zone_id":"8ee1be75cxxxx(我的zone_id)","zone_name":"nanqinlang.com","modified_on":"2017-09-27T16:38:18.430924Z","created_on":"2017-09-27T16:38:18.430924Z","meta":{"auto_added":false}},"success":true(命令執行成功),"errors":[],"messages":[]}

執行成功後,建立的記錄如圖

使用CloudFlare實現DDNS(動態域名解析)
使用CloudFlare實現DDNS(動態域名解析)

檢視 DNS Record 列表

執行下面這個命令後,shell 視窗中會列出你的帳號上的所有 dns 記錄(不僅僅是A記錄)

在 cloudflare ,每一條解析記錄都有對應的一個固定的 id

為了能夠通過 API 修改解析記錄,我們需要通過此步驟來獲取這個 id

example:

[email protected]:~ 
#執行
 curl -X GET "https://api.cloudflare.com/client/v4/zones/8ee1be75cxxxx(我的zone_id)/dns_records" \
 -H "X-Auth-Email: xxxx(我的帳號的郵箱)" \
 -H "X-Auth-Key: 8405868bdxxxx(我的api_key)" \
 -H "Content-Type: application/json"
#返回結果
{"result":[{"id":"3625aca17xxxx(這條被檢視的dns記錄的id)","type":"A","name":"nanqinlang.com(域名)","content":"xx.xx.xx.xx(A記錄指向的ip)","proxiable":true,"proxied":true(啟用cloudflare反代與否的狀態值),"ttl":1(1 表示 auto ttl),"locked":false,"zone_id":"8ee1be75cxxxx(我的zone_id)","zone_name":"nanqinlang.com(根域名)","modified_on":"2017-09-26T15:24:00.567936Z","created_on":"2017-09-26T15:24:00.567936Z","meta":{"auto_added":false}}}

其中的 "id":"3625aca17xxxx" 就是你需要的 dns 記錄的 id

更新 DNS Record

當建立好解析記錄,並獲取了這條記錄的 id 之後,

為了實現動態解析,每當你的公網 ip 發生變化,就需要更新 dns 記錄,將A記錄指向你的新 ip

example:

[email protected]:~ 
#執行
 curl -X PUT "https://api.cloudflare.com/client/v4/zones/8ee1be75cxxxx(我的zone_id)/dns_records/3abbbaba2xxxx(這條dns記錄的id)" \
 -H "X-Auth-Email: xxxx(我的帳號的郵箱)" \
 -H "X-Auth-Key: 8405868bdxxxx(我的api_key)" \
 -H "Content-Type: application/json" \
 --data '{"type":"A","name":"test.nanqinlang.com(指定要更新記錄的域名)","content":"110.119.120.233(指定A記錄指向的ip)","ttl":180(指定ttl),"proxied":false}'
#返回結果
{"result":{"id":"3abbbaba2xxxx(這條要更新的dns記錄的id)","type":"A","name":"test.nanqinlang.com(更新了記錄的域名)","content":"110.119.120.233(更新後的指向ip)","proxiable":true,"proxied":false,"ttl":180(更新後的ttl),"locked":false,"zone_id":"8ee1be75cccxxxx(我的zone_id)","zone_name":"nanqinlang.com","modified_on":"2017-09-27T16:58:23.547640Z","created_on":"2017-09-27T16:58:23.547640Z","meta":{"auto_added":false}},"success":true(命令執行成功),"errors":[],"messages":[]}

將此命令進行定時任務後,就實現了 DDNS 域名動態解析 了。

树莓派设置静态ip

vi /etc/dhcpcd.conf
# 使用 vi 编辑文件,增加下列配置项

 

interface eth0
# 指定静态IP,/24表示子网掩码为 255.255.255.0
static ip_address=192.168.1.20/24
# 路由器/网关IP地址
static routers=192.168.1.1
# 手动自定义DNS服务器
static domain_name_servers=114.114.114.114

用命令行工具 Speedtest-CLI 来测试你的上下行网速

https://linux.cn/article-5626-1.html

18509) Unitel (Vientiane Capital, Laos) [1294.07 km]

18361) Skytelecom State Company (Vientiane Capital, Laos) [1294.07 km]

1936) Lao Telecom (Vientiane, Lao PDR) [1297.68 km]

20017) Planet Co. Ltd (Vientiane, Laos) [1297.68 km]

6999) ETL company limited (Vientiane, Lao PDR) [1297.68 km]

 speedtest_cli.py --server 1936

speedtest_cli.py --server 19076

speedtest_cli.py --server 18509 

speedtest_cli.py --server 5726

haproxy安装注意事项

如果用于转发

请在系统 

# 
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
# 
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf 
# 
sysctl -p

In /etc/sysconfig/selinux , change the following lines:

#
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config

reboot, and verify the selinux status by running ‘sestatus‘. It should say:

SELinux status: disabled

利用CloudFlare设置Dynamic DNS(DDNS)

如果买了动态 VPS,IP 会经常改变。这时,就可以设置 DDNS 来获取动态 IP。比如,设置后,我可以用 ddns.zhaozhu.net 获取自己 VPS 的最新 IP。

获取 API

以 zhaozhuji.net 域名为例,在 CloudFlare 按提示添加域名 zhaozhuji.net 和对应的 A 记录 ddns.zhaozhuji.net,TTL 可设为 2 分钟。注意,DDNS 使用的域名不要开启 CloudFlare 的 CDN。

前往https://www.cloudflare.com/a/profile获取 API,把 API 一长串字符复制保存。

获取脚本

下载脚本 https://gist.github.com/larrybolt/6295160/raw/c634c48c001a411240fc78147949a6a32e1de370/cf-ddns.sh 到/usr/local/bin 目录:

curl https://gist.githubusercontent.com/larrybolt/6295160/raw > /usr/local/bin/cf-ddns.sh && chmod +x /usr/local/bin/cf-ddns.sh

配置

打开脚本进行配置:
vi /usr/local/bin/cf-ddns.sh

需要修改以下内容:


# 输入前面获取的 API
CFKEY=nvake8vn8ak8en8fjka88bnfe

# 输入 Zone name,如 zhaozhuji.net
CFZONE=zhaozhuji.net

# 输入域名的 id,如果不知道可先不填,运行一次脚本获取对应的 id 后再填入
CFID=

# 输入 CloudFlare 的账号邮箱,如 user@example.com
CFUSER=user@example.com

# 设置需要更新的 Hostname,如 ddns.zhaozhuji.net
CFHOST=ddns.zhaozhuji.net

# 设置 Cloudflare TTL,单位是秒,可填 120 到 86400 间的数值
CFTTL=120

输入bash /usr/local/bin/cf-ddns.sh运行脚本,会显示:

bash cf-ddns.sh 
No file, need IP
Missing DNS record ID
fetching from Cloudflare...
 => Incorrect zone, or zone doesn't contain the A-record light.acg.al!
listing all records for zone acg.al:
ID          RECORD        TYPE
133333332  zhaozhuji.net        "A"
133333333  ddns.zhaozhuji.net  "A"
133333334  www.zhaozhuji.net    "A"

这时,把 DDNS 使用的域名对应的 ID 填入刚才提到的 CFID 中,例如这里是CFID=133333333。保存退出后,再运行一遍 cf-ddns.sh,如果显示如下内容,则代表配置成功:

bash cf-ddns.sh
No file, need IP
Updating DNS to 9.9.9.9
Updated succesfuly!

crontab 定时运行

脚本配置成功后,需要让它定时运行,这里设置每 10 分钟运行一次 cf-ddns.sh 脚本。输入crontab -e,然后会有个 vi 编辑界面,在里面添加一行:

*/10 * * * *  /usr/local/bin/cf-ddns.sh >/dev/null 2>&1

crontab 的用法建议参考http://man.linuxde.net/crontab,涵盖了 crontab 服务状态的启动、重启、查看、简单配置等。另外也可以看看http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.htmlhttp://www.runoob.com/linux/linux-comm-crontab.html

参考

cloudflare-update-record.sh同样可设置 DDNS,配置也比较简单。

本文参考了PumpCloud 的教程

备注

有人提及换了域名再操作提示WAN IP Unchanged, to update anyway use flag -f true,这是因为脚本是检测到 IP 发生变化后,才会更新 CloudFlare 的 DNS。可以先手动在 CloudFlare 改 dns,下一次换 IP 时,脚本就会自动修改更新 CF 的 DNS(前提是设了 crontab 定时运行)。

如果有问题,欢迎留言。