清朝云资源网

博客

  • 7月9日,星期日,在这里每天60秒读懂世界!

    7月9日,农历五月廿二,星期日!

    在这里,每天60秒读懂世界!

    1、特斯拉与国内15家车企签署了《汽车行业维护公平市场秩序承诺书》,承诺不打价格战,中汽协:删除涉及"价格"条款;

    2、上海:首条新一代智慧公路S32申嘉湖智慧高速公路试运行;北京:无人驾驶的出租车将正式上路;

    3、河南信阳市罗山县一雪糕店7日发生爆炸,致夫妻一死一伤,官方:冰柜压缩机故障引发;

    有网友发布视频称,在河南信阳市罗山县一冷库发生爆炸。7月8日,潇湘晨报记者从当地多部门了解到,该事故事故发生在该县一小区附近的雪糕店,为夫妻店,丈夫经抢救无效死亡,妻子大面积烧伤仍在治疗中。据罗山县应急管理局工作人员介绍,经初步核查,该爆炸事故系冰柜压缩机故障引发。

    4、8日下午,湖北五峰土家族自治县突发一起山体滑坡,初步估计滑坡超50万方,截至8日晚,已救出5人,另有9人失联;

    5、电子竞技将成为2026亚运会正式项目;亚奥理事会执委表决通过:哈尔滨市获得2025年第九届亚洲冬季运动会举办权;

    日本爱知·名古屋亚组委确认了41个大项,包含2024年巴黎奥运会的32个大项以及其他9个大项。其中电子竞技由亚奥理事会推荐入选。电子竞技将成为2026年第20届爱知·名古屋亚运会正式项目。

    6、证监会启动公募基金费率改革,17家头部公募宣布:管理费与托管费降至1.2%、0.2%以下;

    7、台媒:最新民调显示,民众党主席柯文哲以30.8%支持度反超民进党主席赖清德的29.3%,中国国民党侯友宜的支持度为18.5%;

    台媒体人张禹宣认为,赖清德之所以民调被反超,是因为他忽略了民众想下架民进党的决心。

    8、洪都拉斯:寻求与中方商讨价值200亿美元的铁路项目投资,计划会在大约15年内建成;

    洪都拉斯经济发展部长塞拉托洪都拉斯区位图

    9、荷兰首相:因移民政策分歧,联合政府将解散,将向国王递交书面辞呈;

    荷兰首相吕特

    10、波兰总司令部:波兰将在与白俄罗斯的边境调派1000名士兵和200台装备;白俄罗斯:立陶宛单方面关闭两国边境一检查站;

    11、美国宣布:已完全销毁储存了数十年的化学武器库存。目前化学武器公约缔约国均已销毁;

    据法新社报道,当地时间7月7日,美国总统拜登宣布,美国已销毁最后一批化学武器。至此,美国终于完全销毁其已有数十年历史的化学武器库存。

    12、美要拉84国组"全球联盟"就芬太尼施压中国,专家:内病外治,不从自身找原因,只会让问题更严重;

    13、当地8日,苏丹武装冲突持续,已造成至少22人死亡,数十人受伤;

    当地时间8日,苏丹喀土穆州卫生部表示,苏丹武装部队与快速支援部队当天在该州恩图曼市爆发武装冲突,造成至少22人死亡,数十人受伤。

    14、外媒:俄表达"密切关注"后,土耳其总统埃尔多安:乌克兰应成为北约成员国;

    15、美国防部宣布了新一轮8亿美元的对乌军援,其中包括对乌提供集束弹药,俄驻美大使:美国挑衅"超出极限"。乌防长:集束弹药不会用于攻击俄领土,只用于结束俄方"占领"。俄官员:将强硬回应!英首相:不鼓励;

    美国防部当地时间7日宣布了一项高达8亿美元的额外军事援助计划,旨在为乌克兰反攻行动提供关键的支持。该计划包括为美国提供的爱国者防空系统和高机动火炮火箭系统(即“海马斯”)补充弹药,美国方面掌握的情况显示,乌克兰的弹药储存正在迅速缩减。

    【微语】人到一定岁数,自己就是那个屋檐,再也不能在别处躲雨。

  • 7月8日,星期六,在这里每天60秒读懂世界!

    7月8日,农历五月廿一,星期六!

    在这里,每天60秒读懂世界!

    1、国家网信办:不得借网络暴力事件蹭炒热度,组织网络暴力或借网络暴力事件炒作等行为,应从重处罚;

    2、教育部:全面推行校外培训机构从业人员准入查询制度,把好从业人员入口关;

    3、7日上午,哈尔滨松北区一脚手架倒塌,砸中了下方水果、蔬菜的摊位,致多人受伤,商户:脚手架已建起月余,一层楼的高度;

    4、知乎宣布将下线"匿名功能",用户将不能匿名创建问题或匿名发布内容。对于历史匿名内容,用户可自主选择是否将其转为实名;

    5、浙江温州购房新政:卖旧买新后,可获得交易申报价0.6%的补贴;

    6、7日晚间,因违规参与银行保险机构业务活动等,中国人民银行对支付宝、财付通开出巨额罚单,分别被罚没超30亿和近30亿。蚂蚁集团和财付通回应:诚恳接受、坚决服从;

    7、宁夏:7月6日起到31日,对全区燃气用户开展一次全覆盖免费入户安全检查;

    8、广东揭阳市揭西县一凉果厂发生中毒事故,致4死1伤!官方:挂牌督办,初步调查结果是硫化氢气体泄漏;嘉兴南湖警方:男子入户盗窃被户主发现后行凶,致2人死亡

    9、韩国政府称福岛核污水排海符合标准,反对党组织国会静坐抗议;中国海关总署:禁止进口日本福岛等地食品!严格100%查验;

    10、韩媒:韩国"幽灵婴儿"案件的持续增加令人深感震惊,案件已增至780起,已确认27人死亡;

    据韩国MBC电视台2日报道,自水原在上月22日爆出震惊韩国的“冰箱死婴”案后,韩政府开始对2000多名“幽灵儿童”(即没有进行人口登记的儿童)进行全面普查,接连发现多起“幽灵儿童”死亡案件。

    11、美防长重申美国对保卫菲律宾的承诺,中方:不得损害中方在南海的领土主权和海洋权益;

    12、外媒:世界首款疟疾疫苗投入广泛使用,高风险非洲国家首批获分配;

    13、南非约翰内斯堡东郊贫民窟5日发生有毒气体泄漏,已造成包括3名儿童在内的16人死亡;意大利米兰一养老院发生火灾,造成6人死亡81人受伤

    南非警方和当地官员周三晚间表示,至少16人,包括3名儿童,在一个金属棚屋密集的聚居地内因非法矿工使用有毒硝酸盐气体提取金而丧生。事情发生于今日凌晨一点二十左右。据悉火灾最先从该家养老院605号房间内发生,住在该房间内的两名年纪分别为69岁以及87岁的两名妇女被当场烧死。另外四名受害者分别是75岁、84岁和85岁的三名妇女以及一名73岁的男子。这四人死亡原因为吸入大量烟雾中毒死亡。

    14、美国防部发言人:美国目前有锗的战略储备,但没有镓储备。美商务部:将与盟友伙伴协商解决;

    镓、锗等都是芯片制造的重要原材料,这两种金属矿产无论是在储量还是在出口上,中国均在全球占据领先地位。路透社也补充介绍称,锗用于高速计算机芯片、塑料制品和军事应用领域,如夜视设备以及卫星图像传感器;镓用于雷达及无线电通信设备、卫星和LED。

    15、美媒:拜登同意向乌克兰提供集束炸弹,尽管人权组织担心可能伤害平民;外媒:7日,扎波罗热地区发生爆炸;美军称俄军机在叙利亚连续两天"骚扰"美无人机,俄方:美军每天都违规,且非法占领叙利亚;

    【微语】生活的甜是可以积攒的,就像揣在兜里的糖。如果感到苦,就吃一块,然后重整旗鼓,继续向前。

  • 7月7日,星期五,在这里每天60秒读懂世界!

    7月7日,农历五月二十,星期五!

    在这里,每天60秒读懂世界!

    1、中国生物:我国首款6月龄以上人群通用四价流感疫苗上市;

    2、中疾控:6月26日至7月2日,流感样病例新冠阳性率降至15.4%;

    2023年6月1日-6月30日,全国31个省(自治区、直辖市)及新疆生产建设兵团报告新增重症病例1968例、死亡病例239例(其中新冠病毒感染导致呼吸功能衰竭死亡病例2例、基础疾病合并新冠病毒感染死亡病例237例)。

    3、山西岚县公交车事故死亡人数升至4人,其中至少有3名学生,另有17人受伤;

    4、5日下午,浙江宁波5名年轻人到水库游泳:其中3人不幸溺亡,都是外地人,警方介入调查;

    7月5日下午,浙江宁波鄞州区横溪镇孔家潭村,三名少年在水库游泳不幸溺亡。极目新闻记者从当地获悉,当时有五个十六七岁左右的年轻人结伴前来游泳,结果其中三人溺水,三人都是外地人,目前,警方正在调查此事。

    5、江西抚州黎川县民政局发通告称彩礼超6万可举报,当地回应:已撤销,考虑不周。民政局工作人员:很多人都会超过规定的那个数;

    6、6日凌晨,四川恩广高速突发山体岩石崩塌,巨石冲毁桥梁墩柱,致部分桥面坍塌,3人受轻伤;

    7、吉林男子私自建桥,总共投入超13万元,收费5万元被判刑,桥已被拆!村民:没桥多绕70公里,媒体:仅一罚了之,忽略了群众出行困难;

    8、河南郏县一被查车男子掏出警官证质问"能不能走",其朋友疑似酒驾,当地纪委已介入调查。平顶山郏县警方通报:涉事人被免职;

    “民警亮证质问能不能走”一事引发关注。7月6日,上游新闻记者从权威渠道获悉,后排男子是河南省平顶山市郏县公安局民警徐某,驾车男子是徐某朋友,徐某朋友疑似酒驾,徐某现场拨通了郏县公安局交警大队一名中队长张某某的电话。

    9、云南昭通大关县天星镇发生一起火灾:致6人遇难,涉及两户人家;

    7月6日0时30分左右,大关县天星镇朝阳社区一民房发生火灾,1时20分现场明火被扑灭,共造成6人死亡,火灾原因仍在调查中。有目击者告诉新京报记者,起火的是一家售卖家具和电器的店铺,位于一楼,店铺上方还有三层居民楼。

    10、5日上午,柳州市柳北区一工厂发生事故,视频显示,厂区内有火焰燃烧,有人员伤亡;

    据目击视频显示,事故现场燃起熊熊火焰。同时,柳钢医院证实,该厂的烧伤患者已紧急送往该院接受治疗。此外,柳州市殡仪馆的工作人员称当晚有遇难工人被送至殡仪馆。结合火焰燃烧现场和工人伤亡情况,初步判断这是一起爆燃事故。

    11、外媒:当地5日早上,墨西哥南部一高速上发生公共汽车坠崖事故,已造成至少29死14伤,初步调查显示,涉事车辆刹车系统失灵;

    12、日媒:6日下午,一卡车在宫城县小学校内撞击多名儿童,多名被撞者送医;

    13、菲律宾炒作中国"危险拦截"菲船只,外交部:菲律宾海警船未经允许擅闯仁爱礁附近,中国海警船依法执法;

    14、俄媒:北约确认成立北约—乌克兰理事会,并将于12日下午举行首脑级会议;

    15、俄媒:俄罗斯外交部召见芬兰驻俄大使,驱逐9名芬兰外交官,并从10月1日起撤销对芬兰驻圣彼得堡总领馆的运作许可;

    【微语】宁愿花时间去修炼不完美的自己,也不要浪费时间去期待完美的别人。

  • 7月6日,星期四,在这里每天60秒读懂世界!

    7月6日,农历五月十九,星期四!

    在这里,每天60秒读懂世界!

    1、教育部:2022年在园幼儿数下降,比上年减少177.66万人,下降3.70%;

    2、商务部原副部长:出口管制芯片原材料只是开始,若对华高技术限制继续升级,中国反制措施也会升级;

    3、无锡出台反家暴新规:对举报或制止家暴人员实施见义勇为奖励;

    4、4日晚,太原发生一起持刀杀人事件,警方:嫌疑人因感情纠纷,杀害女子后自杀;5日傍晚,山西吕梁岚县普明镇一公交发生交通事故,官方:已致1人遇难,多名伤者正在救治,其中1人重伤;

    7月4日晚上7点左右,在山西太原万柏林区一家万象城停车场内发生了情杀案,现场一男一女死亡,十分惨烈!

    5、重庆万州区"7·4"洪涝因灾死亡15人,失踪4人,全区直接经济损失22784.474万元;

    6、湖北一学生高考志愿被同学恶意篡改,官方:将恢复此前志愿,违法行为人系其同学,被行拘5日;

    7、歌手李玟去世,年仅48岁,姐姐发声:7月2日因抑郁在家轻生,于5日经抢救无效去世。据悉李玫因婚姻阴霾患抑郁症。轻生当天给粉丝发语音:感受到大家的爱和支持,希望你们健康快乐;

    8、浙江:支持符合条件的平台企业在境内外上市,禁止非法从事资金支付结算业务;

    9、外媒:日本计划最早8月排放福岛核污染水入海;韩国最大在野党:IAEA评估报告未验证福岛核污水安全性;韩学者:日本应自费在境内储存核污水,执意排海危害全世界;

    10、丰田称在固态电池技术上取得重大突破:10分钟充满能跑1200公里,成本和尺寸将减半;谷歌宣布在量子计算领域取得新突破:比世界最快的超级计算机快"47年";

    图片来源:丰田中国官网

    11、外媒:特朗普任命的法官出台历史性禁令,阻止拜登政府与社交媒体公司接触;

    美国总统拜登被列为被告,密苏里州和路易斯安那州总检察长提起诉讼,指控他审查脸书(Facebook)、推特(Twitter)等平台的网络言论,试图压制批评者的声音。联邦法官周二(7月4日)颁布初步的特别禁令,阻止拜登政府的关键机构和官员,与社交媒体公司就“受保护的言论”进行会议和沟通。

    12、美国总统参选人:中国周边有313个美军基地,谁对全球安全威胁更大;

    https://www.zhihu.com/video/1660086540578500608

    13、塔利班要求阿富汗境内女子美容院全部关停,联合国:将对经济造成打击;

    2021年4月,位于阿富汗首都喀布尔的一家美容院/美联社 图

    14、俄方:没有美国和北约援乌,无人机不可能袭击莫斯科;俄媒:美中情局招募外国人参与俄乌冲突;

    15、当地5日,乌克兰东部一城市发生爆炸:疑俄军事基地遭袭,巨大火球升起已致36伤;俄媒:普里戈任被召回莫斯科开会,瓦格纳或将在白俄组建4万人部队,此前搜查的卢布、美元和金条已归还给普里戈任;

    https://www.zhihu.com/video/1660087111016472576

    【微语】时间扑面而来,我们终将释怀。健康的活着,平静的过着,开心的笑着,适当的忙着,就很好。

  • NAT 类型详解以及如何查看自己的 nat 类型

    NAT 类型详解以及如何查看自己的 nat 类型

    四种NAT类型

    NAT 可以分为四种类型:

    1. 完全锥形NAT(Full Cone NAT)

    完全锥形NAT最简单,也是最灵活的一种。它会为内部网络中的每个主机分配一个公共IP地址和端口号,并且允许从任何外部网络地址的任何端口与内部主机通信。一旦内部主机首次向外部主机发送数据,完全锥形NAT就会将源IP和端口映射到公共IP和端口,以便外部主机可以回复。

    1. 地址限制锥形NAT(Address Restricted Cone NAT)

    地址限制锥形NAT在完全锥形NAT的基础上增加了限制。它要求内部主机只能与之前已经与其通信过的外部主机进行通信。也就是说,在内部主机与外部主机建立连接之前,外部主机必须已经向内部主机发送过数据包。

    1. 端口限制锥形NAT(Port Restricted Cone NAT)

    与地址限制锥形NAT类似,端口限制锥形NAT还要求外部主机使用相同的端口号与内部主机进行通信。也就是说,在内部主机与外部主机建立连接之前,外部主机必须已经向内部主机发送过数据包,并且使用相同的源端口号。

    1. 对称型NAT(Symmetric NAT)

    对称型NAT是最严格的一种。它会为每个不同的目标IP地址和端口组合分配一个唯一的映射,并且只允许与该目标地址和端口进行通信。这意味着,当内部主机与不同的外部主机进行通信时,对称型NAT会为每个连接创建一个新的映射。因此,对称型NAT会限制内部主机能够与多个外部主机同时建立连接。

    关于 P2P,不同 NAT 类型的穿透性。

    649e6f214f472

    可以看见只有两种情况无法打通。

    如何查看NAT类型

    使用工具 pystun 工具即可查看 nat 类型,项目地址:https://github.com/jtriley/pystun。

    需要有 python 环境,才能进行安装。

    pip install pystun

    当然你也可以直接运行 docker 命令进行查看。

    docker run -it --rm --network=host smilence86/pystun
  • Docker 搭建开源文件同步工具 Syncthing

    Docker 搭建开源文件同步工具 Syncthing

    简介

    Syncthing 是一个开源的文件同步工具,可以在不同设备之间同步文件和文件夹。它使用了点对点的方式进行同步,如果点对点连接成功则不需要通过云服务器中转,因此更加安全和私密。

    Syncthing 就好比是 Onedrive,当你指定了同步哪些文件夹,它会定时检测文件夹下的文件是否有增加减少或者修改,如果有修改那么将会点对点同步到另外的客户端,当然这是你在一边配置了分享,另一边配置了同步的情况下。当然,它可以是单向同步,也可以是双向同步的,这取决于你的配置。

    在正常情况下安装,你是不需要自己搭建发现服务器和中继服务器的,因为默认使用官方的服务器。,中继服务器(Relay Server)则是一种用于帮助设备之间传输数据的服务器。

    但是考虑到玩意文件比较多或者文件比较大,文件同步的实时性要求又比较高,使用自己的服务器将是一个比较好的选择,所以接下来也有相关的教程,不需要则可以忽略。

    搭建

    1. 客户端搭建

    docker run -d \
    --name syncthing \
    -p 8384:8384 \
    -p 22000:22000/tcp \
    -p 22000:22000/udp \
    -p 21027:21027/udp \
    -v /home/docker/sync/:/var/syncthing \
    syncthing/syncthing:latest

    注意这里需要映射文件夹,看你自己情况,如果你已有需要同步的文件夹,请将该文件夹映射到容器内,否则 syncthing 将无法进行同步。

    首次进入会警告设置管理员账号和密码,不设置警告不会消失。

    649bddfa96c2f

    点击设置的图形用户界面设置即可。

    649bde462d39e

    同步相关的设置下面再讲,先讲如何搭建发现服务器和中继服务器,如果你不需要可以直接跳过。

    2. 发现服务器搭建

    发现服务器(Discovery Server)是一种用于帮助设备之间发现彼此并建立连接的服务器。当设备加入 Syncthing 网络时,它会向发现服务器发送请求,以获取其他设备的信息。发现服务器会将设备的信息存储在一个公共数据库中,其他设备在需要连接到新设备时可以通过发现服务器获取到该设备的信息。发现服务器的作用类似于一个中介,帮助设备之间建立连接,但它并不参与实际的文件同步过程。

    搭建需要公网,在服务器运行如下命令。

    docker run -d \
    --name syncthing-discosrv \
    -p 8443:8443 \
    -v /home/docker/syncthing/discosrv:/var/stdiscosrv \
    syncthing/discosrv \
    -debug -listen=":8443"

    使用 docker logs -f syncthing-discosrv 命令查看日志,获取 device ID。

    649be20070278

    打开客户端,点击设置,选择连接,输入:

    https://公网IP:8443/?id=设备id

    649be30052ec2

    保存后,点击设备发现状态会显示如下。

    649c2d26150de

    3. 中继服务器搭建

    中继服务器(Relay Server)则是一种用于帮助设备之间传输数据的服务器。在某些情况下,设备之间直接进行数据传输可能会受到网络环境的限制,例如设备处于不同的局域网中或者网络防火墙的限制。这时,设备可以通过中继服务器进行数据传输。设备将数据上传到中继服务器,然后其他设备从中继服务器下载数据。中继服务器的作用是帮助设备之间绕过网络限制,实现数据的传输。需要注意的是,中继服务器只在必要时才被使用,大部分情况下设备之间直接进行数据传输。

    搭建需要公网,在服务器运行如下命令。

    docker run -d \
    --name syncthing-relaysrv \
    -p 22067:22067 \
    -v /home/docker/syncthing/strelaysrv:/var/strelaysrv \
    syncthing/relaysrv:latest \
    -debug -pools="" -listen=":22067"

    使用 docker logs -f syncthing-relaysrv 命令查看日志,获取 Url。

    649be34ce1984

    将 ip 替换为你自己的公网 ip。

    relay://公网IP:22067/?id=设备id

    649bf64a2bf1f

    保存后,点击侦听程序显示如下内容。

    649c2dc78be83

    到这里搭建发现服务器和中继服务器就完成了,当然,新加入的客户端也要进行同样的操作。

    使用

    1. 添加设备

    当你有两个设备时,如果不进行添加设备是无法进行同步操作的,这个添加设备也相当于是一个授权,是一个相互的操作。

    首先查看一台机器的识别码。

    649c2fe19025b

    复制识别码后,在另一台客户端点击添加远程设备进行添加。

    649c301d9fab9

    这里同时可以备注设备名,共享和高级可以等会再设置。

    649c30a2509b2

    然后再回到刚刚那台客户端,同意添加设备。

    649c312fce9ab

    然后就可以在远程设备处看见连接成功了,并可以看见当前是什么连接类型。

    649c3189e2e1e

    2. 文件同步

    先在测试1机器上添加文件夹 /var/syncthing/test1

    649c3f467c492

    此时测试1的机器上,/var/syncthing/test1 目录有4个文件,但此时文件夹还是非共享的。

    649c3fd4885d2

    点击选择,设置共享给测试2机器。

    649c400a44d01

    测试2机器将收到共享文件夹的确认信息。

    649c403c18f6d

    我这里将内容同步到 /var/syncthing/tmp 文件夹。

    649c406a8c693

    等待一会,发现文件已经同步好了。

    649c409b90b7e

    还可以在高级中设置同步类型、完整扫描间隔等等,其中同步类型可以是仅发送、仅接收和发送与接收。

    649c415b325f2

  • 使用脚本快速通过远程服务器拉取 docker 镜像

    使用脚本快速通过远程服务器拉取 docker 镜像

    现在情况是,在国内 dockerhub 无法正常访问,之前还能拉取镜像,现在拉取镜像都拉不了,阿蛮君也不知道什么情况。

    但是又发现腾讯云服务器似乎拉得挺快,于是有了通过服务器拉取镜像,然后将镜像拷贝到本地并加载的想法。

    手动操作太麻烦,将操作写成了脚本,需要的自取,替换相关变量即可使用。

    #/bin/bash
    #set -x
    # 定义变量
    image_name=$1
    user=root
    password="123456"
    host=localhost
    
    tmp_dir="/tmp"
    tmp_img_name="tmp.tar"
    
    # 下载镜像
    sshpass -p $password ssh $user@$host "cd $tmp_dir && rm -rf $tmp_img_name && docker pull $1 && docker save $1 -o $tmp_img_name"
    # 拷贝镜像
    sshpass -p $password scp $user@$host:$tmp_dir/$tmp_img_name $tmp_dir
    # 加载镜像
    docker load -i $tmp_dir/$tmp_img_name && rm -rf $tmp_dir/$tmp_img_name
    # 删除远程镜像
    sshpass -p $password ssh $user@$host "cd $tmp_dir && rm -rf $tmp_img_name && docker rmi -f $1"

    将脚本命名为 docker-pull.sh,并放在 /usr/bin 目录下。

    使用效果如图:

    649474f393021

  • Docker 搭建 headscale 异地组网完整教程

    Docker 搭建 headscale 异地组网完整教程

    前言

    之前写过 Zerotier 搭建私有根服务器及创建虚拟局域网,阿蛮君也是一直在使用自建的 zerotier,但是为什么还要折腾 headscale 呢?最大的原因是 zerotier 创建根服务器只能使用 ip,这对迁移不是非常方便,并且自己也想了解下 headscale,所以折腾了几天总算有了结果。

    一、搭建headscale服务端

    1.创建相关文件并配置

    这里需要手动创建 db.sqlite,这是根服务器的数据库文件。另外,还需要下载官网给的配置文件示例,然后需要修改一部分。

    mkdir -p /home/docker/headscale/config && \
    mkdir -p /home/docker/headscale/data && \
    touch /home/docker/headscale/data/db.sqlite && \
    wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /home/docker/headscale/config/config.yaml

    修改相关配置文件,比如配置文件中配置 127.0.0.1 的话,那么就只能本机访问。这里修改为 0.0.0.0 那么就所有的 ip 都能访问。

    sed -i 's/127.0.0.1/0.0.0.0/g' /home/docker/headscale/config/config.yaml
    # 这将修改以下几个地方,其中server_url还需要另外修改
    # 1. server_url: http://0.0.0.0:8080
    # 2. listen_addr: 0.0.0.0:8080
    # 3. metrics_listen_addr: 0.0.0.0:9090
    # 4. grpc_listen_addr: 0.0.0.0:50443

    另外因为server_url是对外访问和登录的地址,如果你需要使用域名并开启https,那么照我如下配置。如果你仅仅使用ip,那么这个地址修改为ip+端口的方式即可。

    域名填自己的

    sed -i 's#http://0.0.0.0:8080#https://headscale.amjun.com#g' /home/docker/headscale/config/config.yaml

    修改 dns 配置文件,如果不进行修改,那么登录时选择接受服务器的 dns 地址就会出现域名无法解析的情况。注意,这里的 dns 地址可以有多个,如果有需要自行添加即可。

    sed -i 's/1\.1\.1\.1/114.114.114.114/g' /home/docker/headscale/config/config.yaml

    客户端可以通过 主机名 + 用户 + 基础域名 访问任意一台终端,所以这里修改下基础域名,根据自己的实际域名进行填写。

    域名填自己的

    sed -i 's/example.com/amjun.com/' /home/docker/headscale/config/config.yaml

    设置客户端随机端口,这里是听见有说不开机随机端口可能出现只能加入一台客户端的情况,为了保险还是选择开启。

    sed -i 's/randomize_client_port: false/randomize_client_port: true/' /home/docker/headscale/config/config.yaml

    启用内嵌的derp

    当然你可以使用官方提供的 derp 服务器,但如果你想搭建自己的 derp 服务器,又不想另外搭建一个 derp 服务器,那么这是有必要的。

    注意:使用此 derp 服务器,需要有域名并配置 ssl,否则请参考:Docker 搭建中继服务器 derp – 纯 IP 实现 。

    # /home/docker/headscale/config/config.yaml
    derp:
      server:
        # xxx
        enabled: true
        # xxx
        region_id: 999
        # xxx
        region_code: "headscale"
        region_name: "Headscale Embedded DERP"
        # xxx
        stun_listen_addr: "0.0.0.0:3478"

    enabled 选项默认为 false,需要设置为 true。

    3.启动headscale服务端

    docker run -d \
    --name headscale \
    --restart always \
    -v /home/docker/headscale/config:/etc/headscale/ \
    -v /home/docker/headscale/data:/var/lib/headscale \
    -p 8080:8080 \
    -p 9090:9090 \
    -p 3478:3478/udp \
    --restart always \
    headscale/headscale:0.22.3 \
    headscale serve

    下面是一些相关的命令:

    以前是 namespace 的概念,现在似乎改为 user 了。

    # 查看用户
    docker exec -it headscale headscale users ls
    # 创建用户
    docker exec -it headscale headscale users create hz
    # 生成apikey
    docker exec -it headscale headscale apikey create
    # 查询apikey
    docker exec -it headscale headscale apikey ls

    二、搭建web-ui

    这一步是搭建 headscale 的 web-ui 界面,这不是必要的,因为阿蛮君更多使用命令,这只是有助于更好的查看相关信息。

    docker run -d \
    --name headscale-webui \
    --restart always \
    -v /home/docker/headscale/config:/etc/headscale/:ro \
    -v /home/docker/headscale/web-ui/data:/data \
    -u root \
    -p 5000:5000 \
    -e HS_SERVER=https://headscale.amjun.com \
    -e DOMAIN_NAME=https://headscale.amjun.com \
    -e SCRIPT_NAME=/admin \
    -e AUTH_TYPE=Basic \
    -e BASIC_AUTH_USER=admin \
    -e BASIC_AUTH_PASS=admin \
    -e KEY="2uHP6BSVocX+wcWU5mzuXA7JvnZA70UaTadB8L1heOo=" \
    --restart always \
    ifargle/headscale-webui:latest

    其中 /home/docker/headscale/config 为上面服务端的映射目录,这两个目录需要一致。HS_SERVERDOMAIN_NAME 填写自己的域名1。KEY 是用来加密待会需要保存的 apikey 的字符串,使用命令 openssl rand -base64 32 生成。

    接下来需要创建 headscale 服务器的 api-key,这里设置一个比较久的过期时间。

    三、配置nginx和web-ui

    1.配置nginx

    如果前面server_url没有配置 ssl 加密,那这一步也不是必要的。

    添加如下配置:

    server {
        listen       443 ssl;
        listen  [::]:443 ssl;
        server_name  headscale.amjun.com;
        ssl_certificate  /etc/nginx/conf.d/cert/amjun.com.cer;
        ssl_certificate_key /etc/nginx/conf.d/cert/amjun.com.key;
    
        location ^~/ {
            proxy_pass http://localhost:8080/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $server_name;
            proxy_redirect https:// https://;
            proxy_buffering off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        }
    
        location ^~/admin/ {
            proxy_pass http://localhost:5000/admin/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
    server {
        listen 80;
        server_name  headscale.amjun.com;
        rewrite ^(.*)$ https://$host:443$1 permanent;
    }

    保存配置后重启 nginx,如果配置正确,那么通过 https://域名/admin 应该可以访问到 web-ui 界面,输入容器启动时配置的用户名密码即可进入。

    64990a476d089

    2.配置web-ui

    上面提示输入 apikey,这个需要 headscale 服务端生成,这里设置一个比较长的时间,根据自己的需要即可。

    docker exec -it headscale headscale apikeys create -e 10000d

    运行命令后将生成的 key 输入,点击 save 即可,概览页面如下:

    64990b3b849e2

    四、创建用户和授权密钥

    headscale 个人理解是用户就是命名空间,进行网络隔离,所以需要先创建用户。

    #  创建用户
    docker exec -it headscale headscale users create hz

    授权密码的作用是,客户端登陆时不需要再服务端进行确认,阿蛮君总是喜欢使用简单的方式,所以就选择这种方式了。

    # reusable 参数代表可以重复使用,不加的话密钥只能用来一个客户端加入
    docker exec -it headscale headscale preauthkeys create -e 10000d --reusable -u hz
    # 查看密钥 
    docker exec -it headscale headscale preauthkeys list -u hz

    这里记得记录好授权密钥,下面将会用到。

    五、客户端安装

    headscale 相当于是重新实现了 tailscale 的服务端,客户端基本还是用的 tailscale。

    tailscale 客户端下载地址:https://tailscale.com/download/

    1. windows

    1.1 安装客户端

    下载 windows 客户端并进行安装。

    1.2 安装注册表

    访问 https://headscale.amjun.com/windows,可以看见配置的教程。

    提示需要修改注册表,这里可以直接 curl https://headscale.amjun.com/windows/tailscale.reg 下载文件后,双击运行文件进行安装即可。

    1.3 登录

    在 tailscale 的安装目录下使用 cmd 打开,输入命令:

    tailscale login --login-server https://headscale.amjun.com --authkey b6a9b4f4e9c3a7c7e7b9b1a3a6b9e6b7a5e7c2a1e3a0a4a1 --accept-dns=false --accept-routes

    这里的 authkey 是第四步生成的,然后在服务器使用命令查看。

    docker exec -it headscale headscale nodes ls

    2. linux

    2.1 脚本安装

    curl -fsSL https://tailscale.com/install.sh | sh && \
    tailscale login --login-server https://headscale.amjun.com --authkey b6a9b4f4e9c3a7c7e7b9b1a3a6b9e6b7a5e7c2a1e3a0a4a1 --accept-dns=false --accept-routes

    这里仅仅安装方式不同,登录的命令完全一样。

    2.2 docker安装

    docker run -d \
    --name=tailscaled \
    -v /home/docker/tailscale/:/var/lib \
    -v /dev/net/tun:/dev/net/tun \
    -e TS_STATE_DIR=/var/lib/state/ \
    --network=host \
    --privileged tailscale/tailscale:v1.44.0 \
    --restart always \
    tailscaled --tun=tailscale0 -debug=:8088 -no-logs-no-support=true

    这里需要将 TS_STATE_DIR 指定的文件夹持久化,否则删除容器再新建后,在服务端能看见重复的设备。并且需要指定 --tun=tailscale0,不然似乎不能在宿主机创建网卡。

    然后使用如下命令进行登录。

    docker exec tailscaled tailscale login --login-server https://headscale.amjun.com --accept-dns=false --accept-routes=false --authkey b6a9b4f4e9c3a7c7e7b9b1a3a6b9e6b7a5e7c2a1e3a0a4a1 --advertise-routes=172.21.9.0/24,172.30.1.0/24,172.26.1.0/24,172.20.2.0/23

    根据自己网络情况设置 --advertise-routes,我这是需要通过这台内网机器访问公司其他网络。

    3. 安卓

    3.1 安装并配置

    目前官方暂不可以自定义登录链接,需要下载可以自定义登录链接的安卓客户端,阿蛮君这里提供了一份可以使用的客户端,链接放在后面。

    安装后,点击右上角三个设置自定义登录地址:

    64991ac900b81

    点击保存并重启,再点击 sign in,将看见如下内容。

    64991b2bd4fb6

    3.2 服务端注册

    根据提示在服务端运行命令:

    docker exec -it headscale headscale nodes register --user hz --key nodekey:xxxx

    注意这里的 USERNAME 需要修改为自己刚刚创建的用户名。

  • Docker 搭建网页版局域网文件传输工具 snapdrop

    Docker 搭建网页版局域网文件传输工具 snapdrop

    一、前言

    在不同设备间需要传输文件的时候,阿蛮君总是会面临一个艰难的选择,到底用不用微信文件助手传,如果文件很大怎么办,并且传到文件助手我应该怎么在文件管理中找到文件的位置。

    这是真实发生的事情,之前使用 zerotier 异地组网,安卓端需要安装 zerotier fix 软件并更换 planet 文件,我当时搞了很久。

    今天又面临需要传文件的问题,忍无可忍,于是想在网上找局域网传输工具,但是很多都是需要安装客户端,我还是觉得太麻烦了。最后,终于找到了这款神器 snapdrop

    如果你之前搭建过,但是找不到客户端,也别急着划走,请往下看

    二、简介和搭建

    snapdrop 类似于 AirDrop 隔空投递,基于Web技术,使用WebRTC(Web实时通信)协议来实现设备之间的直接通信。它可以在 web 端运行,这是最重要的一点,不需要下载客户端,那么也就以为着跨平台。

    搭建也非常简单,使用如下命令即可,并不需要进行额外配置。

    docker run -d \
    --name snapdrop \
    -p 9090:80 \
    hausen1012/snapdrop

    这里说一下,如果使用官方的容器,很有可能出现找不到设备的情况。因为官方的服务器,只能看见连接了同一网络的设备,毕竟官方的服务这么多人用呢。如果不进行隔离,那么找自己的设备都找不到。

    但是基本上自建的容器都是自己使用,所以我这边是在 git 上找到的相关的解决办法,并解决后重新构建了镜像,所以大家可以放心使用。

    此外,还修复了一点图片显示异常问题,其实就是添加了一条 css 限制图片宽度,不然显示是这样的。

    649a81fdb55be

    三、使用

    1. 加入网络

    此时使用浏览器访问发现什么也没有,这是因为目前还没有其他的设备加入这个网络,并且自己不能看见自己。

    649a7fbc14c9e

    如果我将手机也加入到这个网络,那么将显示一台设备。

    649a800df1fda

    2. 发送文字

    可以右键需要发送的设备,输入文字信息。

    649a803e3e812

    此时手机端将显示文字信息,并可以进行复制。其实下面这张图片都是我截图用 snapdrop 传过来的,嘻嘻嘻~~

    649a810e144ea

    3. 发送文件

    当我在电脑端选择文件发送,效果如下,可以选择忽略或者保存。

    649a8237ad3f3

    当电脑端选择图片发送,先比较于之前的显示,是不是效果好多了。

    649a896181456

  • Docker 搭建中继服务器 derp – 纯 IP 实现

    Docker 搭建中继服务器 derp – 纯 IP 实现

    1.纯IP搭建关键

    接之前 Docker 搭建中继服务器 derp,上次的文章需要有域名,并且申请好 ssl 证书。

    原因在于 derp 服务器,在 tailscale/cmd/derper/cert.go 文件中需要验证域名,如果将验证的代码去掉,那么 derp 将不会出现证书不匹配的错误,也就是说此时可以使用 IP或者域名都不会报错。

    func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {
            // 需要将下面的判断注释
            //if hi.ServerName != m.hostname {
            //      return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
            //}
    
            // Return a shallow copy of the cert so the caller can append to its
            // Certificate field.
            certCopy := new(tls.Certificate)
            *certCopy = *m.cert
            certCopy.Certificate = certCopy.Certificate[:len(certCopy.Certificate):len(certCopy.Certificate)]
            return certCopy, nil
    }

    另外需要注意的是,tailscale 客户端也会进行证书验证,由于 derp 服务器生成的自签名证书肯定不可能与我们所使用的 IP或者域名匹配,所以客户端直接连接 derp 肯定也会报错,所以需要客户端跳过域名验证。

    总结来说,需要满足以下两点:

    • derp 服务器不验证域名
    • tailscale 不验证域名

    2. derp 搭建

    使用如下命令即可搭建一个不验证域名的 derp 服务器。

    docker run -d \
    --name derper \
    --restart always  \
    -p 12345:443 \
    -p 3478:3478/udp  \
    -d hausen1012/ip_derper

    此时浏览器访问 https://IP:12345/ 将提示不安全的链接,因为域名不匹配。

    64a0de00a8961

    正因为如此,才需要配置 tailscale 跳过域名验证,否则还是不能用 derp。

    3. 配置headscale

    除了 derper 之外,Tailscale 客户端还需要跳过域名验证,这个需要在 Headscale 中配置。

    而 Headscale 的本地 YAML 文件即 derp.yaml 目前还不支持这个配置项,所以只能使用在线 URL 了,就和官方提供的 derp 服务器一样,也是给了一个 url 地址。

    新建 derp.json

    {
      "Regions": {
        "901": {
          "RegionID": 901,
          "RegionCode": "hh",
          "RegionName": "Hotiis Hongkong",
          "Nodes": [
            {
              "Name": "901",
              "RegionID": 901,
              "DERPPort": 12345,
              "HostName": "xx",
              "InsecureForTests": true
            }
          ]
        }
      }
    }

    HostName 填写 IP 或域名,最主要的就是配置 InsecureForTests 选项,目前 derp.yaml 中不支持,需要使用在线文件,所以需要将这个文件放在 nginx 或者其他web服务器下。

    接下来修改 headscale 的配置文件:

    # /etc/headscale/config.yaml
    derp:
      # xxxx
      urls:
      #  - https://controlplane.tailscale.com/derpmap/default
        - http://xxx/derp.json
      paths:
      #  - /etc/headscale/derp.yaml
      # xxxx
      auto_update_enabled: true
      # xxxx
      update_frequency: 24h

    http://xxx/derp.json 修改为可访问的在线链接,不能仅局域网可访问。

    接下来重启 headscale 即可。

    docker restart headscale

    4. 验证

    使用 netcheck 命令仅仅只是验证 3478 端口能通。

    64a0fdffb88bc

    当使用 web 页面访问 derp 时,会有 http: TLS handshake error 相关的错误,这个不影响使用。

    如果看见 client [xxx]: readFrameHeader 相关的信息时,说明客户端可以连接上 derp 服务器了。

    64a0ff6d644bf

    通过 status 命令可以查看使用的中转服务器,使用 tailscale ping 命令也可以查看使用哪个中转服务进行转发。

    64a12f579ae8c