在Debian vps上,使用 gdnsd 自建 DNS 服务并分区解析

 

gdnsd 是一款权威 DNS (Authoritative-only DNS)服务器软件,因为自带 GeoIP 插件,所以很适合自建 CDN 做分区解析,著名的喂鸡百科就是使用 gdnsd 进行全球 CDN 分区解析

众所周知,天朝的网络环境,国内访问国外慢,同理国外访问国内也慢,所以我们很有必要搭建 CDN 并且使用 DNS 进行分区解析

而国内比较知名的权威 DNS 服务商如 CloudXNSDNSpod 他们免费版的 DNS 服务器都在国内,这样会造成国外的用户解析你的域名很慢,同理,如果使用国外的权威 DNS 服务商如 CloudflareAWS Route53 他们的 DNS 服务器都部属在国外,国内访问基本要走美国节点,这样会造成国内的用户解析你的域名很慢

所以我们需要选择一家对国内外速度都友好的 ISP 来托管你的权威 DNS 服务器,如果您没有找到合适的,我们这里推荐 cat.net 以及阿里云国际版

以下安装步骤都在 root 用户下完成,请自行使用 su 命令切换到 root 用户

1、注册 DNS 服务器

假设您的 DNS 域名是 example.com ,购买并安装好了两台 NS 服务器,分别为

ns1.example.com 对应 IPv4 192.0.2.2 IPv6 2001:DB8::2
ns2.example.com 对应 IPv4 192.0.2.3 IPv6 2001:DB8::3

首先,您需要在您的域名注册商注册 Name Servers 由于每个注册商的控制面板不同,我们这里以 cat.net 为例,登陆 Custom Portal 后,点击 Domains > My Domains 如图

然后进入您的域名管理页面,点击小工具的箭头,如图

接着点击左侧的 Private Nameservers 如图

然后在右侧即可注册、管理或删除 NS 服务器,如图

我们分别注册 ns1 和 ns2 即可

PS: cat.net 后台只能一次提交注册一个 IP 地址,如果需要一个 NS 服务器对应多个 IP 地址,则只需要发服务单让客服帮忙修改即可

好了,到这里我们已经注册好 NS 服务器,接下来开始搭建 gdnsd

2、安装 gdnsd

Debian 9.x 自带的 gdnsd 已有编译好的版本,所以我们不需要编译安装,直接一条命令即可,同样适合 Debian 8.x

apt-get install gdnsd

如果加了 Backports 则可以使用

apt-get -t stretch-backports install gdnsd

Debian 8.x 则是

apt-get -t jessie-backports install gdnsd

记得检查系统或服务商的防火墙,我们需要打开的端口是 TCP / UDP 的 53 端口,请安装后检查服务商是否给您打开了这个端口,否则 DNS 是无法工作的

3、配置 gdnsd

gdnsd 的 Github Wiki 上已经提供了很详细的 config 以及 zonefile 配置,但是对新手来说坑比较多,由于我们的需求是根据国内外分区解析,所以这里我简单的提供一下本站的配置文件,感谢肥猫童鞋的细心指导

这里假设阁下的网站域名是 example.org 国内服务器节点 IPv4 为 192.0.2.4 IPv6 为 2001:DB8::4 国外服务器节点 IPv4 为 192.0.2.5 IPv6 为 2001:DB8::5

那我们的逻辑就是,当国内用户请求 example.org 解析的时候, gdnsd 判断用户本地的 DNS 是否在国内,是的话解析到国内对应的服务器节点,如果不是,则默认解析到国外服务器节点,能理解这个逻辑以后我们就开始配置吧

首先登陆 ns1.example.com

ssh root@ns1.example.com

gdnsd 需要有一个对应的 config 文件,需要自己创建,这里默认新建一个 /etc/gdnsd/config 文件,输入以下内容

options => {
  listen => any
  dns_port => 53
  chaos_response => "SBDNS"
}

service_types => {
  example_monitor => {
    plugin => http_status
    ok_codes => [200, 301, 302, 403, 404]
    vhost => example.org
    url_path => /
  }
}

plugins => { geoip => {
  maps => {
    china_map => {
      geoip_db => GeoLiteCity.dat
      datacenters => [default-dc, cn-dc]
      map => {
        AS => {CN => [cn-dc, default-dc]}
      }
    }
	
  }
  resources => {
  
    example_org => {
      map => china_map
      service_types => example_monitor
      dcmap => {
	  
        cn-dc => {
		addrs_v4 => 192.0.2.4
		addrs_v6 => 2001:DB8::4
		},

        default-dc => {
		addrs_v4 => 192.0.2.5
		addrs_v6 => 2001:DB8::5
		},
		
      }
    }

    }
	
  }
  
}

我们来一条一条解释

options => {
  listen => any
  dns_port => 53
  chaos_response => "SBDNS"
}

options 是 gdnsd 的配置选项,一般无特殊需求的话可以监听本机的所有 IP ,所以这里 listen 选的是 any, DNS 服务器端口选默认的 53chaos_response 则是 DNS 返回的软件版本,可以自己随便指定个名字

service_types => {
  example_monitor => {
    plugin => http_status
    ok_codes => [200, 301, 302, 403, 404]
    vhost => example.org
    url_path => /
  }
}

这里因为我们开启了监控,并且使用的插件是 http_status ,如果不需要监控的话可以忽略

plugins => { geoip => {
  maps => {
    china_map => {
      geoip_db => GeoLiteCity.dat
      datacenters => [default-dc, cn-dc]
      map => {
        AS => {CN => [cn-dc, default-dc]}
      }
    }
	
  }
  resources => {
  
    example_org => {
      map => china_map
      service_types => example_monitor
      dcmap => {
	  
        cn-dc => {
		addrs_v4 => 192.0.2.4
		addrs_v6 => 2001:DB8::4
		},

        default-dc => {
		addrs_v4 => 192.0.2.5
		addrs_v6 => 2001:DB8::5
		},
		
      }
    }

    }
	
  }
  
}

这一段才是最重要的,也是本文的精髓所在,这里我们启用了 GeoIP 插件,设置的默认解析到国外的节点,国内用户对应一个 datacenter 叫做 cn-dc ,只要 gdnsd 判断该用户是国内请求的解析,那么就返回我们设置的国内 IP ,否则就返回默认的国外节点,如果不需要 IPv4 则可以直接写

cn-dc => 192.0.2.4
default-dc  => 192.0.2.5

更多的 GeoIP 配置信息可以在 Github Wiki 页面中找到

4、安装 GeoIP 数据库

我们的数据库使用的是 Maxmind 免费的 GeoLite City,大多数情况下也足够使用,下载和解压的命令如下

cd /etc/gdnsd/geoip && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz && gzip -df GeoLiteCity.dat.gz

5、配置 zonefile

首先,细心的读者肯定发现我们还没配置 DNS 域名 example.com 所以新建一个 /etc/gdnsd/zones/example.com 文件,举例如下

$TTL	86400

@	IN	SOA ns1.example.com.	hostmaster.example.com.	(
	1      ; serial
	7200   ; refresh
	900    ; retry
	1209600     ; expire
	10800    ; ncache
)

@		NS		ns1.example.com.
@		NS		ns2.example.com.

ns1		A	192.0.2.2
ns2		A 	192.0.2.3

ns1     AAAA	2001:DB8::2
ns2     AAAA	2001:DB8::3

这里默认设置的 TTL 是 86400 也就是一天,可以根据需要修改

接着需要创建 /etc/gdnsd/zones/example.org 文件,举例如下

$TTL	3600

@	IN	SOA ns1.example.com.	hostmaster.example.com.	(
	1      ; serial
	7200   ; refresh
	900    ; retry
	1209600     ; expire
	10800    ; ncache
)

@		NS		ns1.example.com.
@		NS		ns2.example.com.

@		DYNA	geoip!example_org

www		CNAME	example.org.

6、检查 gdnsd 配置

一条命令即可

gdnsd checkconf

如果最后三行输出如下,即成功配置

# info: rfc1035: Loaded 71 zonefiles from '/etc/gdnsd/zones/'
# info: rfc1035: quiescence time is 3 seconds
# info: Configuration and zone data loads just fine

7、重启 gdnsd

如果修改了 config 文件,那么我们则需要重启 gdnsd 服务,如果之后只是修改 zonefile 那么则无需这个步骤

gdnsd restart

8、安装配置 ns2.example.com 并同步

由于 gdnsd 是个轻量级的 DNS 服务器,不带同步功能,所以您需要按照上面的步骤重新配置一次 ns2.example.com 并且让他重启生效,为了今后方便同步,我们可以使用 rsync 来进行

首先,在 ns1 和 ns2 都安装 rsync

apt-get install rsync

然后我们以 ns1 作为 master ,ns2 作为 slave ,每次修改 ns1 的文件并且自动同步到 ns2,以下命令均在 ns1 操作

生成 SSH Key

ssh-keygen -t ed25519

查看并复制公钥 id_ed25519.pub

cat ~/.ssh/id_ed25519.pub

把公钥的内容复制到 ns2 服务器的 ~/.ssh/authorized_keys 即可

然后执行同步

rsync -avz --delete /etc/gdnsd/ ns2.example.com:/etc/gdnsd/

也可以写入 bash 脚本,比如 sync.sh

CONFDIR=/etc/gdnsd
rsync -avz --delete $CONFDIR/ ns2.example.com:/etc/gdnsd/

赋予权限

chmod +x sync.sh

之后就可以直接执行脚本,不需要每次输入代码

./sync.sh

另外这里还有肥猫写的更新 GeoIP 数据库的脚本 geoip.sh

URL=http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
FILENAME=GeoLiteCity.dat.gz
DIR=/etc/gdnsd/geoip
cd $DIR; rm -f $FILENAME; wget $URL; gzip -df $FILENAME

9、修改域名 DNS 服务器

这个应该大多数读者会,直接去您的注册商把 example.com 和 example.org 的 DNS 服务器设置为 ns1.example.com 和 ns2.example.com 并耐心等待生效

10、测试生效

一般耐心等待一段时间(取决于您的旧 DNS 服务器 TTL 失效时间)后,我们自建的 gdnsd 已经生效,建议找一台国内的机器和国外的 Linux 机器来分别测试,Windows 下命令不好记,嘎嘎

首先安装必要的 DNS 工具

Debian / Ubuntu 下

apt-get install dnsutils

CentOS 下

yum install bind-utils

然后我们使用 dig 命令来检测

首先检测 NS 记录是否生效

root@debian ~ # dig NS example.com +short
ns1.example.com.
ns2.example.com.

检测 A 记录或 AAAA 记录是否生效

国内对应解析到 192.0.2.4 和 2001:DB8::4

root@china ~ # dig A example.com +short @223.5.5.5
192.0.2.4
root@china ~ # dig AAAA example.com +short @223.5.5.5
2001:DB8::4

国外对应解析到 192.0.2.5 和 2001:DB8::5

root@australia ~ # dig A example.com +short @8.8.8.8
192.0.2.5
root@australia ~ # dig AAAA example.com +short @8.8.8.8
2001:DB8::5

更多节点检测的话可以去 ping.chinaz.com 或 just-ping.com 查看全国以及全世界各地的解析情况

检测 DNS 是否生效的话可以使用 IntoDNS

from http://web.archive.org/web/20181127035122/https://sb.sb/blog/debian-install-gdnsd/

危机前夜的中国困境

 

不用条分缕析,我们清楚看到:中国正在进入新一轮“前途是光明的,道路是曲折的”历史循环,经过近30多年跨越式实质是经济大跃进后,高积累、高发展和高能耗带来的诸多弊端已显露无遗,社会沉苛已久的矛盾已到了大爆发的临界点,改良式的修补已无济于事,而腐败形成的“跑冒滴漏”业已形成蚁穴溃堤之隐,但倒逼改革和高层设计在左右之争中仍没形成在国家有效治理上的合力,这实在是遗憾,是走传统调整、改革、整顿、提高的老路,还是以壮士断腕之决毅,进行全方位结构性的改革?时代给中国的时间的确不多了。

按经济权威人士——中央财经办主任刘鹤的观点,未来中国经济既不是U型,也不是V型而是L型。无论什么型,说明中国模式并未成型,从风景这边独好,到时下经济困局,我们只能这么说:无限风光已到险峰!

 

金融危机诱发性征兆初显

几年前政治导向刊物《求是》杂志发文,称“中国是全球发展最好的国家”,我私下在猜测,《求是》杂志如此这般高调吟诵时,有个人已经焦虑到不行,他不是别人,正是新上任的国家总管李克强总理。

李克强刚上任之初,也怀有“全民红利”思想,但接下来大半年时间里,他发现中国经济赖以增长的发展模式似乎已经失灵,那一时期,国家投入的货币总量并不低于往年,但刚性的GDP好像绵花糖一样软绵绵地膨大,李克强意识到必须对量化宽松的货币政策进行铁腕调控,否则一味地开闸放水,崩而未溃的经济将不可能维持下去。

结果都已是世人皆知,2013年6月中旬,央行稍动真格,一直爹疼娘爱,毫无抗压能力的各大国有银行,就凸显钱荒,中国银行间短期拆借利率竟然一夜飙到了25%,股市一泄千里,富豪午间打了个盹就流失几十上百亿元资金,央行迫于无奈,只得重启闸口。

对此,被喻为中国改革派的央行行长周小川意味深长地表示,市场已基本理解了央行的“实弹演习”,只是周行长话音未落,他就不得不再施怀柔政策,为亲骨肉们雪中送炭。

这就是中国经济虚弱无力的真实表现,也许很多人都难解其中之谜,为何胡温体制一转手到新一届政府,就出现了如此巨大的动荡?

其实这与李克强们无关,只与中国政治经济体制的惯性润滑方式有关。2008年,当美国金融危机暴发时,正值中国奥运会盛典之年,保稳定促增长的结果,不是将危机趁势转化为中国产业调整的良机,而是彰显万能政府超越经济规律的阔绰,4万亿救市方案被高调无比地推了出来,当时就有许小年等大批经济学者痛陈这是“祸水”,不出两年,CPI必然疯涨,形成新的量变泡沫,最终将自尝苦果。

两年不到,果然应验,但此时十八大已经临近,政府束手无策,不得不从政治高度再次祭出凯恩斯主义,继续用量化宽松的货币政策确保十八大前经济与社会的全面稳定,4万亿的2.0版赓即又推了出来,泡沫就这样越吹越大,产业沉苛积重难返,老百姓手中的钱一天天缩水,内心焦灼但强挺硬扛的温家宝心知肚明:这烫手的山芋只能交给下一届政府了去处理了。

但思维脱节、政治敏感的官媒却早已按奈不住太平盛世的狂欢,竭尽汉文溢美之词,大赞风景这边独好!美国媒体也用脱口秀的方式调侃,党支部降至华尔街,连美国都有救了!

没错,中国确实做过金融危机的救火队员。1998年亚洲金融危机从泰国诱发时,资本机会主义的商业哲学曾在中国发挥到了极至,在一个特定的环境下,中国确实成为那次危机最大的受益者。

时间回逆,1998年亚洲金融危机暴发时,因着自1989年以来的政治经济低靡,中国国家统计口径中“净误差与遗漏”项目已连续9年为负,1997年竟然高达221亿美元,这意味着当年借的外债,差不多又通过地下渠道出逃,重新流出了中国。好了,亚洲金融危机在这临界点上暴发了,资本趋利避害,向利润最高方向流动的结果,给市场发育不全、经济相对稳定的中国带来一次天赐的际遇,当年资本出逃现象得以遏止并从此逆转,热钱开始大举流入中国,此后十多年里,热钱与中国政府主导的投资型经济一拍即合,在股市、房地产业和人民币升值热炒中翻云覆雨、神出鬼没、兴风作浪。

任何一个欧美国家的财富集累方式都远不如转轨中的中国来得这般传奇,由于体制使然,权力与财富的拥有者对环境和资源的占有量从优,他们更容易在资本市场上获利,使中国成为全球权力寻租最大的“角斗场”,生产资料与市场价值的关系被反复扭曲,甚至兽性湮灭人性,经济如同纵欲过度的男人,过早透支了明天的健康,导致当下中国社会腐败、农村环境恶化,城市夏天看海,冬天吸霾,国民贫富差距也几近无解。

 

透支的繁荣一定要偿还

中国政府一直是经济发展的总导演和主角,这30多年来似乎也显示他们的确是“逢凶化吉,遇难呈祥”的高手,但有一点必须明白,低年级成绩好的同学,进入高年级时,就是从普通学生进入精英学子的过程,身心环境都会发生深刻的变化。

中国经济特别值得关注的两个方向是:

一、这几年国家对房地产的调控力度史无前例,但房地产依然涨声一片,北、上、广土地成交量巨增,差不多大半年时间就超过了上一年土地成交量的总和,而土地增值速度的急速攀升,本身就是对政府自我控调政策的反讽,也说明宏观调控面对失缰的经济已失去杆杠作用,调控反倒加大了行政在经济领域中的支配权,增生了权力寻租的机会,西方不承认中国市场经济地位,不是没有道理的。

二、这几年国家货币投入增加很快,但经济却前所未有的疲软,这说明在产业失衡、产能过剩,经营粗放和科技研发乏力的市场环境下,资本找不到更好的投资方式,又暗暗回流到了房地产业,中国实体经济的分化人令人堪忧。

一个房地产业,足可将中国体制性弊端透彻得一清二楚,甚至不需要X光和显微镜!

其实,从朱镕基时代开始的分税制,中央政府就已把地方政府就逼上了“自我救赎”之路,作为GDP政绩考核的需要,缺钱缺粮的地方政府要发展,又不能违背法律直接向市场借贷,怎么办?于是各地纷纷成立国企投资公司,以此为平台,向市场融资,土地成为政府资源垄断中最大的抵押品,经营城市变成了经营土地。地方政府的钱袋与房地产开发商紧密捆绑在一起,成为钱途合一的盟友,称其为经济联姻也不为过,甚至不惜动用国家警力参与由开发商主导的暴力拆迁,与民争利,上访潮波澜壮阔,中国房价当惊世界殊!

一个更残酷的事实就此呈现:如果房地产泡沫破裂,那就意味着金融风险。

几年前,人们就在问,中国金融危机来了吗?患得患失的危机意识下,人们似乎更相信政府攻守全备的调控能力,的确,危机像遥远的传说,让所有预言都成为“水中月镜中花”。

但很少有人能在抽丝剥茧中,看到由政府主导的经济投资效率与收益都十分低下,而举债发展的结果,使各级地方政府背负了天量债务,单靠财税是没法偿还的,怎么办?唯有印钞。

据央行公布的数据,短短四五年时间里,中国的货币供应量就从60万亿上升到近180万亿以上,居世界第一,中国才是全球最大的“印钞机”。而这一时期地方政府、国企的债务规模已达175万亿元左右,仅2015年中国非金融部门的债务就达到了GDP的2.6倍。

据瑞银估算,中国政府为了支撑经济增长,决策层将2016年全年新增信贷目标从2015年的18万亿元提高至23万亿元。按此速度,预计到2020年债务占GDP的比重可能将超过3倍。

时间像一个永不停竭的沙漏,不断将财富吞进纳出,如今,中国多地方政府债务率都超过了警戒线,贵州省的债务率甚至高达207%,象浙江样富庶的东部发达省份,其债务率也快踩到红线上。举债下的繁荣差不多就相当一位借钱扮帅的阔少,终究是要梦回现实的。

所有繁荣在尖刻、沉重的数据面前,都应当有沉痛的默哀。郎咸平说中国99%的白领会在未来十年破产,沦回贫困阶层,此话虽然有郎式风格的过头,亦显出主流经济学者对中国未来的悲观,我们过去靠政府威权下的“缩骨功”,躲过了两场金融危机,但如果真的要来,不,是早晚一定要来的那场危机,一定是“病来如山倒,病去如抽丝。”

经济阴盛阳虚是注定的了,从今年以来的表现来看,即使再泡沫化地推出4万亿乃至10万亿救市的第N版,中国亦无法再现“高增长”的黄金时期了,印钞的结果,只会将人民币幻化为国民党大陆统治未期的金元券,那时一捆金元券还买不到一个狗不理包子,甚至许多市民入厕用的手纸都是百元大钞。

但是,如果中国经济从周期性衰退遁入到结构性衰退,那意味着什么?意味着透支的繁荣一定要偿还;意味着经济改革将不再是政府主导的修补,而是全领域结构性改革,关于这一点,李克强领导的政府怎么都绕不过去;习大也说,改革由人民说了算!

利益集团改革阻力如同巷战

中国于2001年加入WTO,今年已是第15个年头了,此前关于中国市场经济地位的约定并没有水到渠成,全球承认中国为市场经济的国家屈指可数,欧美绝大多数国家乃至在中国崛起中受益巨大的日本也公开宣布,他们不会承认中国大陆市场经济地位。

大网网民又是一片“帝吧出征,寸草不生的”声讨,并从政治高度认定,这就是欧美纠集日本右翼等敌对势力玩弄的诡计,目的是试图阻止中国大国复兴的步伐。

事实上,我们更应从自身找原因。别的不说,人家政府是服务型的,国家法律根本不允许政府直接参与竞争领域的经济活动;而中国差不多都是政府搭台,经济唱戏——银行是政府的,高速公路是政府的,医院、学校是政府的,工会是政府的,甚至连厕所也可以成为政府名下的“小金库”。央企有150多家,地方国企近13万家,说白了,政府垄断了经济资源的70%,规则永远是朝他们制定的,权力寻租成为民企官商合流下迫不得以的求生选择。

值得注意的倾向是,政府数次推出的4万亿救市方案,钱主要流向了国企,这些年国进民退,如秃子头上的虱子,明摆着,但政府一直羞于承认,那么事实是:政府收入占国民经济的比重,从1996年的12%上升到了2015年的45%左右,这还没有包括其他的预算外收入,这说明什么?说明政府收入占GDP的比重已经重回八十年代早中期改革开放初的形态,带有深刻的计划经济的痕迹,这显然是隐形退步。

这样的经济体制的确是中国独门绝学,政府原本想在不改变政治体制的条件下,利用威权主义的官商哲学,集中力量办大事,进而有超越资本主义市场经济的优越性,但结果是:盘根错节的关系网、惊人的社会不公、庞大的既得利益集团,不断恶化的环境、扭曲的市场价值、钝化了的产业竞争和毫无创新能力的科技跟风,如果不进行结构性的改革,中国经济的前景无疑将黯然无光,在资源耗尽后重回初级产业老路,也就是说几十年经济改革归零。

李克强在上任之初答中外记者问时说,改革比触动灵魂还难,但即使如此,也要有壮士断腕的决心。王岐山在推荐《旧制度与大革命》一书时,也直率地说,我们知道现在所作的只是在治标,但我们要为治本迎得时间。

什么是治本?简单地说就是要进行结构性改革,回归市场经济的普世法则中去,这意味着中国经济的所有制将全面改变,政府必须制定一个中长期经济改革蓝图,最终退出市场操盘手角色,真正转型为服务型政府;金融、国企业也将完成“非特色”化的市场改造,主流方向是私有化,想不想做,做与不做,都必然要做,只要中国不走老路(退也退不回去的了),必然要融入“全球同此凉热”的大市场中,成为规则的遵守者。

当然,与此配套的必然是政治改革,渐进稳妥的政治改革是必须的和紧迫的,只当垄断寄生下的国营企业主体性退出市场竞争领域后,经济的资源配置才会趋于公平,市场才能发挥它最大的能效,而此后,威权才能回归民权,这是意识形态方面的全民福利。

但现实的艰难令人窒息,看到了和做得到,存在非常巨大的差距,即使是在治标方面,利益集团的阻力就如同残酷的巷战。

全国现存有上万项各类收费审批事项,几年前,李克强就准备砍掉一半,但刀没下,就遭到各地异乎寻常的顽强抵抗,许多部门花样百出、耍尽手段与中央捉迷藏,隐匿上报的收费项目多次被打回,但仍不死心要拚死一搏,完全是社会百态下的群丑图。

清华大学社会学系“社会发展课题组”把这种现象称之为“转型陷阱”!意指改革和转型过程中造就的既得利益集团,要求把过渡时期的体制定型化,形成能促使自己利益最大化的“混合型体制”,从而使改革原动力丧失怠尽。

世界日趋艰难,李克强手上的牌也并不多,许多大好机会在“今日复今日”的过往历史中白白错失了,小平遗产已不够用,但超越小平,谁都没那见识和魅力,待落到李克强肩头时,还没等卧薪尝胆,金融危机似乎已隔窗敲门,

是退避三舍,还是破釜沉舟?李克强的选择面只能非A即B,仅有沉着是不够的,游离或绕路无非是让危机继续击鼓传花,事实上,以前就是这样得过且过玩大的,一矣被李克强接上手,中国所有城市都面临手术,省长们的腹部都隐隐发痛,刮骨疗毒已不足为惜,恐怕是一些体制性脏器都得更换,特别是意识形态方面的社资问题,从不争论到重新争论,耗费了许多宝贵的时间和精力。

所有迹象都在显明,曾经引以为豪的中国红利正在很消失,并且成为中国的拖累。

纵观2016年以来市场及汇率的起伏动荡,加快了资本外逃的步伐,目前,经济危机还没有真正开始,仅仅只是局部产业与局部地方的危机的预演。但危机酝酿阶段停留的时间越长,最后引爆时的反应就越惨烈.

更改 Linux 系统语言环境

发现乱码,猜测便是字符编码的问题。 echo $LANG,果然输出 C。下面我查找了相关资料深入重新学习了下系统语言环境变量 LANG 及 locale 相关知识。

LC_ALL=C 含义

LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行。
C 是系统默认的 locale,”POSIX”是”C”的别名。所以当我们新安装完一个系统时,默认的 locale 就是 C 或 POSIX。

更改系统语言环境变量

locale 命令可以查看当前系统语言环境相关的设置。

LANG 变量的值是 LC_*的默认值,是最低级别的设置,如果LC_* 没有设置,则使用该值。类似于 LC_ALL。 LC_ALL 它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。注意,LANG 的值不受该宏影响。

一般生产环境服务都是使用 LANG="en_US.utf8",那么如何永久修改呢?
这个配置在 CentOS 6.X 系列操作系统中是在 /etc/sysconfig/i18n 配置文件中,我们只要修改这个文件 LANG 变量即可。
然后我们使用 locale 命令查看是否修改成功。


[root@VM_15_187_centos ]# locale 
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Ref

10.2.4 影響顯示結果的語系變數 (locale)
在 Linux 和 UNIX 系统中更改您的语言环境
Linux下 LC_ALL=C 的含义

如何搭建一个高匿名的内部论坛

入职腾讯的时候,同学们给我推荐了一个App:同事, 这个App 为同事之间提供了匿名交流的平台,各种高压线、污秽色情的信息络绎不绝,相当刺激。
这个App 17年后期就出现HTTPS 证书过期、短信通道欠费收不到短信等问题,看起来要倒闭。有时候在想如果要搭建一个替代品,该如何平衡匿名性,又能验证是腾讯员工,我会怎么做,最后想了一个折中的办法。
前提:员工不信任论坛管理员。

 邮件列表

一开始的想法是通过邮件列表,因为邮箱还能匿名注册,而且有各种各样的移动客户端。怎么验证员工身份?无论是工作邮箱发验证码还是什么,只要涉及员工工作邮箱,服务端就有可能记录对应关系。或者通过邀请制度?又感觉不够收敛。做一个网站,只有内网可以访问,然后每日生成邀请码?Bingo,突然想到可以限制注册的来源,限制内网注册即可。

 Flarum

没做邮件列表,基于Flarum开始搭建。
域名:免费的.tk 域名玩一玩,开隐私保护,tongshi.tk。
服务器地址隐藏:cloudflare 免费CDN,全站开启。
收集腾讯内网出口的IP 地址范围,三个段:
14.17.22.0/24
103.7.28.0/22
103.7.29.0/24
开启HTTPS 支持,防止在公司内网访问,被中间人监听 🙈 。
由于使用了CloudFlare 做全站CDN,遇到一个问题,没法校验客户端IP,2个解决方法:
map $http_cf_connecting_ip $allowed {
    default deny;
    ~\s*14.17.22.*$ allow;
    ~\s*103.7.28.*$ allow;
    ~\s*103.7.29.*$ allow;
}
测试了一下,客户端自己伪造这个头,无效,还是会被CloudFlare 重写为正确的客户端IP。
安装插件reflar/user-management,关闭邮箱注册。
Disable email registration
在注册接口上限制一下:
location /api/reflar/usermanagement/register {
    if ( $allowed = 'deny' ) {
        return 403;
    }
    try_files $uri $uri/ /api.php?$query_string;
}
搞定~
tongshi-tk
试验一下想法,过三天这台机器就到期,关了。
总结一下思路,通过办公网出口IP 做注册限制,较宽松的员工认证手段,又保证了一定的匿名性。
当然如果公司自己愿意做的话,在内网搭就非常简单了。然而这东西对于公司来说是洪水猛兽,审查还来不及。腾讯内网的乐问有匿名发帖功能,然而又有几个人信任匿名的安全性呢。

宿主机使用VM的代理

虚拟机使用宿主机代理,不用设置额外VMware的转发,只需添加代理的地址与端口
手机也能使用虚拟机所配置的本机代理服务器,不需要同宿主机设置专属的VMware转发
除默认配置的仅主机模式外,宿主机使用VPN会影响全局网络,虚拟机可以直接访问互联网
虚拟机采用的是非全局性的独立网络,也因此在虚拟机使用VPN并不能使宿主机也能够访问互联网

在NAT模式中,虚拟机通过宿主机器所在的公网网络来访问互联网(目前在墙内),vm使用代理软件转发端口监听任意地址,主机在代理中配置同一公网内的局域网IP与端口,完成网络之间的互联共享。以下是具体实例:

在NAT模式中不考虑使用VPN或代理的情况下,IP地址是完全一致的

在vm中开启v2ray以及配置privoxy相关参数0.0.0.0:8118监听任意地址开启的8118端口,将所有http流量再转发至本机代理

在vm设置代理本机地址与privoxy代理的监听端口

查看vm局域网地址

VMware设置端口映射

宿主机中设置代理,填入vm的IP地址与端口

测试

对 Cobalt Strike DNS隧道的理解与实战

0x01 开始之前,有必要先稍微理解下基于dns beacon的大致通信过程,其实,非常非常简单,前提是你对dns的解析过程早已经烂透于心,不熟悉的朋友可以先去参考前段时间写的 [DNS 深度理解 一] ,把基础打扎实了,再回过头来理解这些东西自然就易如反掌了

1
2
3
-> beacon shell会向指定的域名发起正常的dns查询
-> 中间依然是经过一些列的常规dns迭代及递归查询,大致过程就是,一直从根开始找,直到找到我们自己的ns服务器,最后再定位到团队服务器ip,仅此而已
-> 也就是说,第一次通信可能会慢点,后续就会稍微快些,不过说实话,dns再快也快不到哪里去,毕竟,我们要的是足够的隐蔽,而不一味追求速度,不然容易露点

 

0x02 废话说完,我们就开始来尝试在实战中应用,首先,你要先买台vps,亚马逊或者vultr都挺不错的,自己也一直在用,之后装好系统,推荐用ubuntu,此处演示用的是ubuntu 16.04.2,具体的系统安装方法直接一路点点点就好了,全程傻瓜化,大概等个六七分钟,待系统初始化完成就可以用ssh连上去了
  

0x03 成功连到vps上以后,接着就开始配置jdk,关于对jdk版本的选择需要稍微注意下,jdk版本和cobalt strike版本务必要保持兼容,因为演示的用的是cobalt strike 3.8,所以此处就用的jdk1.8,如下,则是jdk在Ubuntu中的具体配置过程

1
2
3
4
5
6
7
8
9
10
wget http://enos.itcollege.ee/~jpoial/allalaadimised/jdk8/jdk-8u152-linux-x64.tar.gz
tar xf jdk-8u152-linux-x64.tar.gz
mv jdk1.8.0_152/ /usr/local/
ln -s /usr/local/jdk1.8.0_152/ /usr/local/jdk
# vi /etc/profile
export JAVA_HOME=/usr/local/jdk/
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
# source /etc/profile
# java -version

 

0x04 搞定vps,再紧接着就要去准备域名了,推荐直奔 godaddy,别问我为什么,以后你就会明白的,注册域名时切记千万不要用真实的个人信息,别用太扎眼的字符,如,hack,sec,fuck,rootkit,backdoor 之类,不然,别人一眼就看出来了,可以选择注册一些非常常规的,如 shop,book,之类……相对还容易蒙混过关,域名搞定以后,就可以来配置解析了,如下,首先,你要创建一条A记录,A记录务必要指向我们自己团队服务器的ip,而后再创建几条ns记录,此处创建了三个ns记录,实际中还可以更多些,然后再把所有ns记录的A记录指向刚刚创建的A记录,也就是说,让解析可以准确的找到我们的团队服务器位置,此处是整个过程最核心的一步,务必要好好理解

0x05 域名解析配置完成后,我们可以拿 dig +trace 域名先来简单跟踪下域名解析过程,看看我们的ns最后是不是被解析到了之前指定的A记录上,如果解析不到,也就意味着你的payload回连时很可能就定位不到团队服务器,后果就是无法正常上线,此处务必成功,再往后继续,否则都是徒劳

0x06 一切准备就绪,在本地用cobalt strike客户端连到我们的团队服务器上,创建监听器和payload,注意,这里的payload要选择beacon_dns,host要用A记录的域名,端口随意,最好用一些穿透性比较强的端口

此处是用于解析上述A记录的ns服务器域名,把我们之前创建的那三个ns域名全部加进去,用逗号隔开即可

最后,再基于此listener创建payload,丢到目标机器上执行,稍微等一下,即可看到目标成功上线后的效果,如下

此时,再回到目标机器上看看都发生了什么,首先,是目标机器不停发送针对我们域名的dns请求,因为它最终要定位到团队服务器把封装在里面的数据传给它

再来看看目标机器的进程端口,我们发现只有进程,似乎没端口,其实并不是没端口,而是在睡眠,我们暂时看不见而已



后话:
    俗称 域名上线,只不过底层用的是dns协议,而非http,https,或者udp…使用dns的好处,想必就不用再多说了,大家应该早都熟透了,域名相对于ip有更强的隐蔽性,而且它相对比较固定,只要没被发现,解析到的ip是可以随便换的,也就是说,不用担心你的权限再因为这样的原因掉了,这样也给了我们更多的灵活性,另外,cobalt strike也非常轻量,在目标机器上几乎是感觉不到的,在你自己团队没有很强的RAT能力时,Cobalt Strike将会是个非常不错的替代品,因为一些原因,没法说的很详细,大家如果有问题,可以随时在公众号中私信交流 ^_^

from 

https://klionsec.github.io/2017/12/28/cobalt-strike-dns/