![快乐的沙雕 --[.SD]域名-杨哥视界](https://www.yangge.net/wp-content/uploads/2021/08/2022042710271065.jpg)
快乐的沙雕 --[.SD]域名
自从上次搞了[.AO]域名之后,钱包还在蠢蠢欲动,男人为了爱好,花点钱怎么了!怎么了!这不,昨天又搞了个[.SD]后缀的域名,DOMAIN.SD,简称“沙雕域名”,然而今天不想说太多,毕竟高贵且孤独的域名诗人,莲花出淤泥而不染的王宜楷已经表...
自从上次搞了[.AO]域名之后,钱包还在蠢蠢欲动,男人为了爱好,花点钱怎么了!怎么了!这不,昨天又搞了个[.SD]后缀的域名,DOMAIN.SD,简称“沙雕域名”,然而今天不想说太多,毕竟高贵且孤独的域名诗人,莲花出淤泥而不染的王宜楷已经表...
baiduboxapp/13.10.0.10
。有些实现会要求在 Headers 中添加 X-T5-Auth
,但经过测试,这个 key 其实是不必要的。
import requests
def send_request_via_proxy(*args, **kwargs):
baidu_proxy = 'cloudnproxy.baidu.com:443'
kwargs['proxies'] = {'http': baidu_proxy, 'https': baidu_proxy}
if 'headers' not in kwargs:
kwargs['headers'] = {}
if 'User-Agent' not in kwargs['headers']:
kwargs['headers']['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ' \
'(KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
kwargs['headers']['User-Agent'] += ' baiduboxapp/13.10.0.10'
# kwargs['headers']['X-T5-Auth'] = '196289709'
resp = requests.request(*args, **kwargs)
return resp
if __name__ == '__main__':
api = 'https://pubstatic.b0.upaiyun.com/?_upnode'
ip_info = send_request_via_proxy('GET', api).json()
print(ip_info['remote_addr'])
print(ip_info['remote_addr_location'])
$ python3 proxy-test.py
180.101.81.32
{'country': '中国', 'isp': '电信', 'province': '江苏', 'continent': '亚洲', 'city': '苏州'}
220.181.7.1 中国北京电信
220.181.33.174 中国北京电信
220.181.111.189 中国北京电信
180.97.93.202 中国江苏苏州 电信
180.97.104.168 中国江苏南京 电信
14.215.179.244 中国广东广州 电信
157.0.148.53 中国江苏苏州 联通
153.3.236.22 中国江苏南京 联通
110.242.70.69 中国河北保定 联通
110.242.70.68 中国河北保定 联通
157.255.78.51 中国广东广州 联通
36.152.45.98 中国江苏南京 移动
36.152.45.97 中国江苏南京 移动
@msn.com
的邮箱地址。但时至今日,你依旧可以通过某些方法注册到 @msn.com
的邮箱地址。这里介绍一下我是如何注册的。
@outlook.com
):这个很简单获得,直接在微软官网注册一个,国家选择美国即可;@msn.com
。为了方便注册,你可以提前在 https://office.com 测试下你想要的邮箱地址是否可用,如果显示邮箱不存在,那么就可以注册,如果直接跳转到输入密码的页面,那么说明邮箱已经被注册了,需要你更换一个用户名。
补充完 First Name 等信息之后,点击 Next 完成注册,这里请妥善保存输入的密码以及安全问题和答案,以防忘记密码时无法找回。
@msn.com
邮件地址依旧会保留,你可以继续免费使用它。
pdns-server
,然后再安装 pdns-backend-$backend
。Backend 是你可以自己选的,常用的有 BIND
和 Generic MySQL
,需要 GEODNS 可以用 GEOIP
,所有列表见此。如果想做网页版控制后台,使用 MySQL 的可能比较方便。如果只是通过文件形式控制,那么 BIND 和 GEOIP 都可以。 我使用 GEOIP 版本的,GEOIP 版本可拓展性强,使用 YAML 文件,更灵活、优雅,本文就讲讲 GEOIP 版本: 在 Ubuntu 上安装(系统软件源里就有):
$ sudo apt install pdns-server
$ sudo apt install pdns-backend-geoip
然后修改配置文件:
$ rm /etc/powerdns/pdns.d/* # 删除 Example
重要更新⚠️:2018 年 4 月 1 日起已经无法通过软件自动下载到 DAT 格式的 GeoIP 数据库,请前往官网手动下载对应数据库。需要的是 Binary 格式的。创建文件
/etc/GeoIP.conf
内容是:
# The following UserId and LicenseKey are required placeholders:
UserId 999999
LicenseKey 000000000000
# Include one or more of the following ProductIds:
# * GeoLite2-City - GeoLite 2 City
# * GeoLite2-Country - GeoLite2 Country
# * GeoLite-Legacy-IPv6-City - GeoLite Legacy IPv6 City
# * GeoLite-Legacy-IPv6-Country - GeoLite Legacy IPv6 Country
# * 506 - GeoLite Legacy Country
# * 517 - GeoLite Legacy ASN
# * 533 - GeoLite Legacy City
ProductIds 506 GeoLite-Legacy-IPv6-Country
DatabaseDirectory /usr/share/GeoIP
然后安装 geoipupdate,执行 sudo apt install geoipupdate && mkdir -p /usr/share/GeoIP && geoipupdate -v
,你的数据库就已经下载完毕了。
/etc/powerdns/pdns.d/geoip.conf
内容是:
launch=geoip
geoip-database-files=/usr/share/GeoIP/GeoLiteCountry.dat /usr/share/GeoIP/GeoIPv6.dat # 选择 IPv4 和 IPv6 国家模块
geoip-database-cache=memory
geoip-zones-file=/share/zone.yaml # 你的 YAML 配置文件的位置,随便哪个地方都行
geoip-dnssec-keydir=/etc/powerdns/key
创建那个 YAML 文件,然后开始写 Zone,这是一个例子(IPv6 不是必须的,所有 IP 应该都填写外部 IP,本文以精确到国家举例,并列内容的顺序无所谓):
# @see: https://doc.powerdns.com/md/authoritative/backend-geoip/
domains:
- domain: example.com
ttl: 300 # 默认 TTL 时长
records:
##### Default NS
ns1.example.com:
- a: # 你的服务器的第一个 IPv4 地址
content: 10.0.0.1
ttl: 86400
- aaaa: # 你的服务器的第一个 IPv6 地址
content: ::1
ttl: 86400
ns2.example.com: # 你的服务器的第二个 IPv4 地址(如果没有就和上面一样)
- a:
content: 10.0.0.2
ttl: 86400
- aaaa: # 你的服务器的第二个 IPv6 地址(如果没有就和上面一样)
content: ::2
ttl: 86400
##### Root domain
example.com: # 根域名下的记录
- soa:
content: ns1.example.com. admin.example.com. 1 86400 3600 604800 10800
ttl: 7200
- ns:
content: ns1.example.com.
ttl: 86400
- ns:
content: ns2.example.com.
ttl: 86400
- mx:
content: 100 mx1.example.com. # 权重 [空格] 主机名
ttl: 7200
- mx:
content: 100 mx2.example.com.
ttl: 7200
- mx:
content: 100 mx3.example.com.
ttl: 7200
- a: 103.41.133.70 # 如果想使用默认 TTL,那就不用区分 content 和 ttl 字段
- aaaa: 2001:470:fa6b::1
##### Servers list 你的服务器列表
beijing-server.example.com: &beijing
- a: 10.0.1.1
- aaaa: ::1:1
newyork-server.example.com: &newyork
- a: 10.0.2.1
- aaaa: ::2:1
japan-server.example.com: &japan
- a: 10.0.3.1
- aaaa: ::3:1
london-server.example.com: &uk
- a: 10.0.4.1
- aaaa: ::4:1
france-server.example.com: &france
- a: 10.0.5.1
- aaaa: ::5:1
##### GEODNS 分区解析
# @see: https://php.net/manual/en/function.geoip-continent-code-by-name.php
# @see: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
# unknown also is default
# %co.%cn.geo.example.com
# 默认
unknown.unknown.geo.example.com: *newyork # 默认解析到美国
# 洲
unknown.as.geo.example.com: *japan # 亚洲解析到日本
unknown.oc.geo.example.com: *japan # 大洋洲解析到日本
unknown.eu.geo.example.com: *france # 欧洲解析到法国
unknown.af.geo.example.com: *france # 非洲解析到法国
# 国家
chn.as.geo.example.com: *beijing # 中国解析北京
gbr.eu.geo.example.com: *uk # 英国解析到英国
services:
# GEODNS
www.example.com: [ '%co.%cn.geo.example.com', 'unknown.%cn.geo.example.com', 'unknown.unknown.geo.example.com']
这个配置,就相当于把 www.example.com 给分区解析,由于目前这个解析存在一些问题,导致不能同时在根域名和子域名下设置 GEODNS,这个 Bug 我已经提交反馈了。 如果你想只把解析精度设在洲级别,那么就直接 %cn.geo.example.com 这样少写一级就行了。如果你需要精确到城市,那么多写一级就行,但是需要在配置文件中添加 GeoIP 城市的数据库。然而免费的城市数据库的城市版本并不精准,你还需要去购买商业数据库,这又是一个额外开销。
$ dig icann.org ns +short
a.iana-servers.net.
b.iana-servers.net.
c.iana-servers.net.
ns.icann.org.
然后再看它的上级域名 org:
$ dig org ns +short
a2.org.afilias-nst.info.
b0.org.afilias-nst.org.
d0.org.afilias-nst.org.
c0.org.afilias-nst.info.
a0.org.afilias-nst.info.
b2.org.afilias-nst.org.
随便找一个服务器,查询权威记录(我就不用 +short 了):
$ dig @a0.org.afilias-nst.info icann.org ns
;; QUESTION SECTION:
;icann.org.INNS
;; AUTHORITY SECTION:
icann.org.86400INNSc.iana-servers.net.
icann.org.86400INNSa.iana-servers.net.
icann.org.86400INNSns.icann.org.
icann.org.86400INNSb.iana-servers.net.
;; ADDITIONAL SECTION:
ns.icann.org.86400INA199.4.138.53
ns.icann.org.86400INAAAA2001:500:89::53
可以看到,在这个 org 的 NS 服务器就已经把 ns.icann.org. 的记录返回来了,这也就是你需要在域名注册商填写 IP 地址的原因。然而你最好在你域名下的 DNS 服务器上也返回相同的 NS 和相同的 IP。 最后,不要忘了改域名的 NS 记录。
&variable
设置变量,*variable
使用变量,这很像 CloudXNS 下的 LINK 记录,比如在 CloudXNS 下你可以这么写:
www.example.com 600 IN A 10.0.0.1
www.example.com 600 IN A 10.0.0.2
www.example.com 600 IN AAAA ::1
www.example.com 600 IN AAAA ::2
sub.example.com 600 IN LINK www.example.com
然后在你的 YAML 记录里就可以这么写:
www.example.com: &www
- a: 10.0.0.1
- a: 10.0.0.2
- aaaa: ::1
- aaaa: ::2
sub.example.com: *www
这就是 YAML 的一种高级写法,不需要其他额外支持。
$ mkdir /etc/powerdns/key
$ pdnsutil secure-zone example.com
$ pdnsutil show-zone example.com
最后一个指令所返回的结果就是你需要在域名注册商设置的记录,不推荐都设置,只设置 ECDSAP256SHA256 - SHA256 digest 就行了。 最后在线检查设置即可 测试地址1 测试地址2,可能有几天缓存时间。 我的检查结果
"*.ip.example.com":
- txt:
content: "IP%af: %ip, Continent: %cn, Country: %co, ASn: %as, Region: %re, Organisation: %na, City: %ci"
ttl: 0
这些变量都能作为你 GEODNS 的标准,也可以检查你的 GEOIP 数据库情况。 然后,正确检查的姿势:
$ random=`head -200 /dev/urandom md5` ; dig ${random}.ip.example txt +short
"IPv4: 42.83.200.23, Continent: as, Country: chn, ASn: unknown, Region: unknown, Organisation: unknown, City: unknown"
IP 地址就是 DNS 缓存服务器地址(如果你开启了 EDNS Client Subnet,且缓存服务器支持,那么就是自己的 IP,但是如果使用 8.8.8.8,那么会看到自己的 IP 最后一位是 0),如果你在本地指定了从你自己的服务器查,那就直接返回你自己的 IP 地址。由于我只安装了国家数据库,所以除了洲和国家之外其余都是 Unknown。
$ dig @a.gtld-servers.net guozeyu.com
;; QUESTION SECTION:
;guozeyu.com.INA
;; AUTHORITY SECTION:
guozeyu.com.172800INNSa.geo.ns.tloxygen.net.
guozeyu.com.172800INNSc.geo.ns.tloxygen.net.
;; ADDITIONAL SECTION:
a.geo.ns.tloxygen.net.172800INA198.251.90.65
a.geo.ns.tloxygen.net.172800INAAAA2605:6400:10:6a9::2
c.geo.ns.tloxygen.net.172800INA104.196.241.116
c.geo.ns.tloxygen.net.172800INAAAA2605:6400:20:b5e::2
其中是两个 IPv4 两个 IPv6,其中 a.geo.ns.tloxygen.net. 是使用了 Anycast 技术的 IP 地址,其背后由三台服务器提供。c.geo.ns.tloxygen.net. 属于另一家服务商的主机,这样一个挂了之后还有备份,更加稳定。
来自:https://www.guozeyu.com/2016/08/self-host-dns/
curl https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh | bash
wget --no-check-certificate -O memoryCheck.sh https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh && chmod +x memoryCheck.sh && bash memoryCheck.sh
来源:
内存交换(Swap)
当系统内存不够用时,宿主机把部分长时间未操作(读写)的内存交换到磁盘上配置的Swap分区,等相关程序需要运行时再恢复到内存中。
气球驱动(Balloon)
通过virtio_balloon驱动实现动态调整Guest与Host的可用内存空间。Balloon的工作原理是在虚拟机中安装一个kmod,KVM宿主机内存不足,会根据virtio_balloon判断哪些内存页面可以被回收,然后virtio_balloon将这些内存占用,返回给宿主机使用。
root用户执行rmmod virtio_balloon可以关闭virtio_balloon。事实上,大多数使用Proxmox VE的厂商都会开启virtio_balloon进行超售。
KSM(Kernel Samepage Merging 内存合并)
KSM是一种内存合并技术,它可以在KVM中实现内存共享,从而节省内存空间。是Linux kernel的一种内存共享机制,在2.6.32版本引入,用于合并具有相同内容的物理主存页面以减少页面冗余。在Kernel中KSM会定期扫描用户注册的内存区域,当有相同的页面就会将其合并,并用一个添加到页表中的新页面来代替原来的页面。当需要修改时,复制新的内存页,再做修改(将其标记为 copy-on-write)
https://github.com/uselibrary/memoryCheck
https://www.nodeseek.com/post-8417-1
结论:
root用户执行rmmod virtio_balloon
rmmod virtio_balloon
可以关闭virtio_balloon,在超售太猛的机器上真的有效,性能提升很大。
SWAP超售!
内存io速度低于 10 GB/s,存在SWAP超售可能