分类 全部文章 下的文章

使用overture替换dnsmasq做域名分流解析

20210617更新:RouterOS使用DNS转发功能实现域名分流解析
之前分享过使用dnsmasq基于大陆域名白名单分流解析域名,这种办法受限于白名单列表的更新,列表总是滞后于网站实际使用的域名,造成一些境内网站cdn解析到了境外,影响境内网站打开速度。
由于gfw的dns污染只会使用境外地址和私有地址,可以利用这个特性做dns分流解析:所有域名用境内dns服务器解析,如果域名解析得到境内ip则直接采用,如果得到境外ip则使用境外dns服务器解析。
开源软件overture就可以实现这个功能。overture有AB两组dns服务器,AB组各有一个IP列表和域名列表,假设A组为境内dns服务器,A的ip列表是大陆IP列表,A的域名列表是境内域名白名单,B的域名列表是被墙的域名gfwlist。

下面是overture的安装及配置步骤
安装脚本overture_install.sh

#! /bin/bash
apt update && apt install curl wget unzip
wget -q https://github.com/shawn1m/overture/releases/download/v1.7/overture-linux-amd64.zip
unzip overture-linux-amd64.zip  "overture-linux-amd64"
mv overture-linux-amd64 /sbin/overture
cat << EOF > /lib/systemd/system/overture.service
[Unit]
Description=overture-dns-server
After=syslog.target network-online.target
[Service]
ExecStart=/sbin/overture -c /etc/overture/config.yml
StandardOutput=syslog
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
EOF
mkdir /etc/overture
cat << EOF > /etc/overture/config.yml
bindAddress: :53
debugHTTPAddress:
dohEnabled: false
primaryDNS:
  - name: dns1
    address: 114.114.114.114:53
    protocol: udp
    socks5Address:
    timeout: 2
    ednsClientSubnet:
      policy: disable
      externalIP:
      noCookie: true
  - name: dns2
    address: 223.5.5.5:53
    protocol: udp
    socks5Address:
    timeout: 2
    ednsClientSubnet:
      policy: disable
      externalIP:
      noCookie: true
alternativeDNS:
  - name: google8888
    address: 8.8.8.8:53
    protocol: udp
    socks5Address:
    timeout: 3
    ednsClientSubnet:
      policy: disable
      externalIP:
      noCookie: true
  - name: google8844
    address: 8.8.4.4:53
    protocol: udp
    socks5Address:
    timeout: 3
    ednsClientSubnet:
      policy: disable
      externalIP:
      noCookie: true
onlyPrimaryDNS: false
ipv6UseAlternativeDNS: false
alternativeDNSConcurrent: true
whenPrimaryDNSAnswerNoneUse: alternativeDNS
ipNetworkFile:
  primary: /etc/overture/china_ip_list.txt
  alternative: /etc/overture/china_ip_list.txt
domainFile:
  primary: /etc/overture/china_list.txt
  alternative: /etc/overture/gfw_list.txt
  matcher: suffix-tree
hostsFile:
  hostsFile:
  finder: full-map
minimumTTL: 0
domainTTLFile:
cacheSize: 0
cacheRedisUrl:
cacheRedisConnectionPoolSize:
rejectQType:
  - 255
EOF
systemctl enable overture

列表更新脚本 overture_update_fliters.sh,首次运行overture前需要执行此脚本。

#! /bin/bash
cd /etc/overture
rm china_list.txt gfw_list.txt china_ip_list.txt
curl -s https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt > china_ip_list.txt
curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf  | sed 's/server=\///g;s/\/114.114.114.114//g' > china_list1.txt
curl -s https://raw.githubusercontent.com/hq450/fancyss/master/rules/WhiteList_new.txt  | sed 's/Server=\///g;s/\///g' > china_list2.txt
cat china_list1.txt china_list2.txt | sort -u > china_list.txt
rm china_list1.txt china_list2.txt
curl -s https://raw.githubusercontent.com/Loukky/gfwlist-by-loukky/master/gfwlist.txt | base64 -d | sort -u | sed '/^$\|@@/d'| sed 's#!.\+##; s#|##g; s#@##g; s#http:\/\/##; s#https:\/\/##;' | sed '/\*/d; /apple\.com/d; /sina\.cn/d; /sina\.com\.cn/d; /baidu\.com/d; /qq\.com/d' | sed '/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/d' | grep '^[0-9a-zA-Z\.-]\+$' | grep '\.' | sed 's#^\.\+##' | sort -u > gfwlist.txt
curl -s https://raw.githubusercontent.com/hq450/fancyss/master/rules/gfwlist.conf | sed 's/ipset=\/\.//g; s/\/gfwlist//g; /^server/d' > koolshare.txt
cat gfwlist.txt koolshare.txt | sort -u > gfw_list.txt
rm gfwlist.txt  koolshare.txt
systemctl restart overture

配置定时任务定期更新overture的域名和IP列表

0 3 * * 1 /root/overture_update_fliters.sh

参考:
docker 搭建 overture 无污染 DNS

ios地区为美区时显示农历(阴历)和中国节假日

ios一直使用全美区,icloud、location、language、app store等都是美区,一直使用第三方app查看农历/阴历。
可以使用以下方法实现和中国区一样的日历显示。
1,显示农历
方法一,Settings-->Calendar-->Alternate Calendars-->Chinses,此方法会同国区一样在锁屏显示中文的农历
方法二,订阅第三方日历,我使用infinet/lunar-calendar生成了2020-2023年的农历和节气的ics文件,导入到日历即可
2,显示中国节假日
Settings-->Calendar-->Accounts-->Add Account-->输入http://p10-calendars.icloud.com/holiday/CN_zh.ics

Routeros V7配置策略路由

20230529更新:增加ipv6策略路由实现境内外ipv6地址分流的方法。

在两年前我写过一篇routeros配置vpn分流大陆ip的文章,里面主要介绍了使用routeros基于源地址和目的地址的策略路由。在使用Routeros V7 测试版的过程中发现V7相比于V6版在路由配置方便有很大变更,所以这篇文章会以Routeros V7为基础介绍策略路由的配置。

网络基本情况
routeros作为家庭唯一路由,通过pppoe接入互联网,通过wireguard连接香港的routeros。

策略路由目标
1,需要翻墙的内网ip:目的地址是境内ip走pppoe默认路由,目的地址是境外IP走wireguard通过香港routeros进入墙外互联网
2,其他内网ip全部走pppoe默认路由

IP地址分配参考上一篇文章Routeros 配置WireGuard

本地lan的地址是192.168.1.1/24,wg-access地址是10.0.0.1/24,wg-hk的地址是10.0.1.1/30,手机wireguard的地址是10.0.0.2/32,笔记本电脑的地址是10.0.0.3/32
香港wg0地址是10.0.1.2/30

配置步骤
1,导入大陆IP地址表
参考Routeros的address-list大陆分流列表
把cnip.rsc上传到routeros,执行

/import cnip.rsc

2,配置分流路由表
Routeros V7取消了通过firewall的mangle里添加路由标记自动添加路由表功能,所有这里需要手动添加路由表

/routing/table/add name="gfw" fib

添加IP分流策略路由

/ip/route/add dst-address=0.0.0.0/0 routing-table="gfw" gateway=10.0.1.2

3,新建需要翻墙的内网地址列表,假定192.168.1.100和192.168.1.200需要翻墙

/ip/firewall/address-list/add list=gfw address=192.168.1.100/32
/ip/firewall/address-list/add list=gfw address=192.168.1.200/32

4,给需要翻墙的内网ip添加标记

/ip/firewall/mangle/add chain=prerouting action=mark-routing new-routing-mark=gfw passthrough=yes dst-address-type=!local src-address-list=gfw dst-address-list=!CNIP log=no log-prefix=""

5,配置无污染DNS服务器
参考使用dnsmasq基于大陆域名白名单分流解析域名使用overture替换dnsmasq做域名分流解析

6,测试目的IP分流
在192.168.1.100上执行traceroute命令

traceroute 8.8.4.4
192.168.1.100--->192.168.1.1--->10.0.1.2--->香港服务器公网路由--->8.8.4.4
traceroute 114.114.114.114
192.168.1.100--->192.168.1.1--->PPPoE公网路由---->114.114.114.114

ps,按照上述ipv4的策略路由配置方法,ipv6并不会生效。
此问题是ipv6策略路由的路由表问题。截至v7.10beta8,mikrotik还没有修复ipv6的路由表问题,或者是mikrotik将来会调整策略路由配置方法。
ipv6的firewall的对应mangle条目的counter有计数,说明修改routing-mark已经生效,但是数据包没有走routing-mark设置的路由表。
经过搜索mikrotik官方论坛,需要另外增加一条设置

/routing/rule/add action=lookup-only-in-table routing-mark=gfw table=gfw

Routeros 配置WireGuard

Routeros在2019年下半年发布了V7的beta版,我在之前文章一直在更新beta版新特性。2020年6月routeros v7beta7系统内核升级到5.6,8月发布了Routeros v7.1 beta2增加了对WireGuard的支持。
WireGuard被视为下一代VPN隧道协议,是类似于gre、ipip隧道的无状态VPN隧道,基于UDP协议,配置简单。

由于Routeros V7还在beta阶段,webfig和winbox等UI控制台还存在很多不完善的地方,下面通过命令行配置。
以下配置基于Routeros V7.1beta2 CHR版。

简单介绍一下拓扑,routeros作为唯一路由器,新建两个wireguard接口:wg-access和wg-hk,wg-access用于手机、PC等在非本地网络下的远程接入,wg-hk用于连接香港VPS用于加速访问境外地址。

本地lan的地址是192.168.1.1/24,wg-access地址是10.0.0.1/24,wg-hk的地址是10.0.1.1/30,手机wireguard的地址是10.0.0.2/32,笔记本电脑的地址是10.0.0.3/32
香港wg0地址是10.0.1.2/30

通过ssh连接routeros或者webfig、winbox的terminal输入命令。
1,wg-access
新建本地routeros的wg-access接口,注意mtu要改成1500,默认是1420,输入下面新建接口命令后会自动创建接口的private-key和对应的public-key

/interface/wireguard/add name="wg-access" mtu=1500 listen-port=50000

给本地routeros的wg-access接口配置IP地址

/ip/address/add address=10.0.0.1/24 interface=wg-access

添加wg-access接口下的客户端peers,注意下面的public-key和preshared-key替换成实际的key,客户端的key在新建空隧道时会自动生成

/interface/wireguard/peers/add interface=wg-access public-key="lYVc...AlE=" allowed-address=10.0.0.2/32 preshared-key="93E...PSA="
/interface/wireguard/peers/add interface=wg-access public-key="lYVc...AlE=" allowed-address=10.0.0.3/32 preshared-key="93E...PSA="

2,wg-hk
新建本地routeros的wg-hk接口

/interface/wireguard/add name="wg-hk" mtu=1500 listen-port=10000

新建香港VPS上routeros的wg0接口

/interface/wireguard/add name="wg0" mtu=1500 listen-port=10000

在香港routeros的wg0接口下添加peer

/interface/wireguard/peers/add interface=wg0 public-key="lYVc...AlE=" allowed-address=10.0.1.1/30 preshared-key="93E...PSA="

给香港routeros的wg0接口配置IP地址

/ip/address/add address=10.0.1.2/30 interface=wg0

在香港routeros上添加本地lan的路由

/ip/route/add dst-address=192.168.1.1/24 gateway=10.0.1.1

在本地routeros的wg-hk接口下添加peer

/interface/wireguard/peers/add interface=wg-hk public-key="lYVc...AlE=" endpoint=香港VPS的公网IP:10000 allowed-address=0.0.0.0/0 preshared-key="93E...PSA="

给本地routeros的wg-hk接口配置IP地址

/ip/address/add address=10.0.1.1/30 interface=wg-hk

配置本地routeros的策略路由
参考Routeros V7配置策略路由routeros配置vpn分流大陆ip

关于routeros的wireguard的说明
1,mtu要修改成1500,使用默认的1420时会有部分cdn不能加载,现象是浏览器报超时错误。mtu问题类似情况参考ikev2 客户端mtu引起的网络故障
2,wireguard每个接口有个自己的公钥对应的路由表,配置peer就是写路由表,routeros v7.1beta2目前有bug,配置多个相同路由的peer,删除后配置的不会恢复之前的路由。
3,routeros v7.1beta2的全局路由表和wireguard的路由表可能存在某些bug,如果配置后不生效,可以删除peer后重新添加。

松下加湿器FE-KXP23开箱及冷蒸发型加湿器对比

北方每年10月开始一直到次年4月空气就变得异常干燥,对于鼻炎患者异常难受,一个好的加湿器就变得异常重要。

这里首先普及一个湿度的基本知识:空气含水量与空气温度和气压有关系,一般空气压力变化不大,可以只关注空气温度,比如标准大气压下,10度时50%的相对湿度的空气含水量是4.7克/立方米,而25度时50%的相对湿度的空气含水量是11.5,二者空气含水量相差巨大。

几年前经过了解知道了超声波方式加湿的危害,也知道了蒸发式加湿器,然后就入了米家的智米加湿器,这个加湿器是通过多层水车方式把水从水箱带出来,然后风扇吹过,水分从水车上蒸发随气流吹出。原理简单,缺点是加湿量太小,只有250ml/h,2019年小米好像推出了升级款,通过加热进入机器的空气,提高出风口的湿度,加湿量达到600ml/h。智米加湿器入手价格350,现在日常价格400。加湿量太小不推荐。

之后又入了airx的H400加湿器,这个加湿器通过加湿滤网泡在水箱,通过毛细现象把水吸到滤网上,然后风扇把空气吹过滤网,达到加湿空气的作用,这个加湿器的加湿量达到400ml/h,比智米的250ml/h提高了不少。入手价格999,现在日常价格799。靠加湿滤网毛细吸水,水不能最大浸湿加湿滤网,加湿量小,类似的还有352的加湿器,不推荐。

第三个加湿器是2019年入手的airmx秒新的air water a5加湿器,这个加湿器的原理是通过水泵把水从水箱抽起淋到加湿滤网上,然后风机吹滤网加湿空气,它还有一个加热流入空气的功能,所以最大加湿量为1500ml/h,但是功率也达到了600w,关掉电加热功能实测加湿量为700ml/h左右。2019年手机app功能还比较简陋,只有简单功能,而现在2020年底app功能已经比较完善,只是缺少定时开关机功能。2020年10月份air water a3发布,首发就入了,不带电加热功能,最大加湿量为1200ml/h,但是感觉第一批质量有问题,前面板经常检测到打开状态导致不能开机,就退了,实际加湿量没测,估计能到1000ml/h。airmx 的a5我在2019年入手价格2199,2020年价格2500左右,活动价2100。a3价格2300左右,活动价1600。airmx的a5和a3加湿量大,手机端目前功能也比较完善了,除了价格稍高,推荐。

今年终于下决心入了松下的FE-KXP23加湿器,它原理与airmx a5一样,没有电加热,而是增大加湿滤网面积和风扇功率,虽然简单粗暴,但是加湿量达到了2300ml/h。

下面是松下FE-KXP23加湿器开箱
包装箱正面
包装箱侧面
与airmx a5大小对比
KXP23控制面板和出风口
KXP23侧面
KXP23拆掉正面面板
KXP23水箱1
KXP23水箱2
KXP23水箱3
KXP23水箱4
KXP23拆下加湿滤网
KXP加湿滤网
kXP23与西门子双门冰箱大小对比
turbo模式下KXP23出口湿度可以达到相对湿度90%,换算成空气含水量是18克/立方米,这个测量并不精确。
KXP23出风口湿度

简单说一下松下FE-KXP23加湿器使用半天的感受
1,加湿量确实大。之前用airmx的airwater a5,室温25度时,空气湿度一般没有超过63%,而使用松下FE-KXP23加湿器使用turbo模式一小时湿度就达到了75%。
2,噪音在turbo模式下为50db。相对加湿量来说还是可以接受的,以后用法是回家开启最大加湿量,达到60%后切换到最抵挡。
3,有12升的分体式水箱,水箱口大便于清洁维护。
4,缺点:没有手机app远程控制;日本本土的100v稍有不便。好在最大功率不到50w,可以用小型变压器解决,这里使用了umi的100va版变压器。