肇鑫的日常博客

日常

谈谈我这近20年的翻墙历史

不知道是不是巧合,中国互联网由开发走向封闭,竟然和国家主席更替的时间遥相呼应。江的时候是开放的互联网。胡的时候开始有墙,但是墙比较矮,普通的vpn就能翻墙。习的时候,墙变高了,好多vpn方案根本不可用,必须得用最新的方案。

2000年初那时的互联网真是好啊。那时候不仅谷歌、推特、脸书都可以直接上,而且,我注册了脸书的账户之后,觉得没啥意思,都很少使用。好多互联网账号,目前还在用的,都是那时候注册的。

这些网站就慢慢都不能用了。不过,谷歌最初是通过遵从国内的法律,还能用一段时间,后来,就必须通过香港中转了,再后来中转也不可用了。

当时我还在贸易公司做外贸,为了使用Gmail,被迫学会了翻墙。当时翻墙很容易,使用系统自带的PPTP或者L2TP就能翻墙。直接搜索就能找到提供翻墙服务的网站,按年交钱就行。

再后来,提供翻墙服务的网站,必须得注册。但实际上,你去注册也不会给你批。为什么呢?因为电信运营商开始提供无墙的专线了。但是价格太贵,而且也不是到处都有,有的地方仅仅提供给经济开发区的外贸企业才能使用。

因为提供翻墙服务的网站,没有资质,就不再合法,并且公安开始抓人。好多网站都被废弃,或者转入地下了。想要注册这类网站,都需要口耳相传。并且,由于墙变智能了,PPTP、L2TP或者OpenVPN这类比较简单的VPN,都会被实时识别,直接被封。要想继续翻墙,得使用更高级的VPN应用,比如Cisco AnyConnect。

Cisco AnyConnect我也用了有几年。当时订阅的一家比较小的vpn的服务。半年一交钱,一年大概不到500。之所以便宜,是因为我注册的早,而且一直都在缴费。实际上它每年都涨价。后来,我推荐给别人这个网站的时候,它一年的收费,已经接近900。这家提供商还是挺有实力的,后期还推出了Windows和Mac平台的自有客户端。

后来,我开始自己编程,做软件开发。并且也有了自己的网站。觉得自己也可以建服务器了。就停止订阅翻墙服务了。自己建服务器,最初是在Vultr,后来在阿里云,后来又回到了Vultr。因为阿里云的轻量服务器,如果发现了你用来翻墙,就会给你安排莫名其妙的问题,导致无法登录后台。

自建服务器,最初用的是ShadowSocks,后来墙又智能了,SS不再安全,就换成了Trojan,一直用到现在。

iPad Pro维修篇

今天是12月2号。11月6号,我的iPad Pro 9.7突然无法充电了。

早上醒了,看到iPad的电量有些低,于是用小米移动电源2充电。结果没有熟悉的充电音,我以为是移动电源没电了,拿起来一看,满电。重新插拔,iPad没反应。这肯定是哪个坏了。

起床,用充电器充,没反应,连iMac 5K充,没反应。换线充。连iMac没反应,连移动电源没反应。连充电器,iPad噔的一声,然后提示“不在充电”。

等了几个小时,从不到10%,充到44%。这速度,聊胜于无。

这台iPad Pro是闲鱼上收的二手,用了也有几年了。屏幕左侧下部有斑,但是不明显。安装了最新的系统,速度还是很快的。我打算再用两年。

我最初怀疑是软件的问题,因为前一天刚好升级到了iOS 13.3 beta。用网上提供的办法,重启,强制关机,恢复设置,都没管用。后来我还从iOS 11.3 beta降回11.2正式版,还是不行。看来只能去维修了。

因为早就过保了,找苹果太贵,上网上查第三方。怀疑是尾插有问题,淘宝上有邮寄维修的,但是觉得不安全。于是按照配件搜,找到一个本地的维修商,叫什么苹果之家之类的吧。

第二天去百脑汇维修。到了之后,略微检测了一下,说可能是尾插的问题,但是没货。于是签了单子,把机器留下了。

第三天上午,接到电话,说是修好了。让我带着我自己的电源和线去试试。我带了两个充电器(一个小米18w,一个苹果12w)。结果到那里,两根线和2个充电器,无论如何排列组合,都是没反应。维修的工作人员都急了,说:“我的确换了尾插啊。不信你看换下来的还在那里呢。”然后又用他的充电器试,结果的确能充。然后我用我的线连他的充电器测试,也能充。但是我质疑说:“我带了两个充电器,也不能都坏了吧?”不过没办法,既然他的充电器能充,我决定按照他的建议去买一个充电器。

到了楼下的品胜,买了一个10瓦的充电器。这个充电器其实不适合苹果,后面我会说。

回到家,开始琢磨充电器和线的匹配。目前手上有3个充电器,紫米18w、苹果12w、品胜10w,小米移动电源1个,而之前我常用的有3根线,都是苹果原装线。但是这三根线,只有1根可以连品胜的充电器给iPad充电。我翻箱倒柜又找出来一根外皮破掉的原装线,这个线虽然破了,但是充电是正常的。还找到一根当初买小米移动电源时送的线,这个线也能充电,但是发热很大。

综合结论:就是好用的完整的线太少了。需要买线。于是我从京东买了两根标注为MFI的Anker线。

11月9号一大早,京东把我的线送来了。一个惊喜,一个失望。

惊喜是新买的Anker的线,不仅可以连品胜充电器给iPad充电,另外,连另外两个之前无法充电的充电器,也能给iPad充电了。我特意测试在电量不足50%的情况下,不同的线连接不同的设备的充电情况。结果发现,紫米18w,小米移动电源10分钟能充6%,iMac 5K和苹果12w能充5%,但是品胜10w只能充2%。后来我发现,原来可能品胜10w只能按照5w给iPad充电。

失望是,这两根线只有一根好用。另外一根,和我其它的现在不好用的原装线一样,只能给iPhone充电,连iPad没有反应。

于是我申请京东售后,要求换货。结果京东换货了来了。却没有带着线来。我联系京东客服,客服说,苹果的线材需要返回检测后才能换货。我说,那我还不如退货再买一个呢。你这个规定有问题。于是换货变成了退货。我手里完全好用的线只有Anker这么一根。

一根线还是勉强够用的。但是我如果想用移动电源充电,就需要把线从充电器上拿下来。这有些不方便。

11月19号,我看到京东有促销Ecclus牌MFi的线,于是买了两根。结果这两根线完全失败。都是iPhone能充,iPad没反应。我开始觉得,可能是我的iPad现在对于A口转L口的线非常挑剔了。

11月21号,从京东买了瓦力18w套装,匹配的是C转L的线。这个充电器倒是可以给iPad充电,不过遗憾的是,它充电的速度太慢了,和品胜10w差不多,10分钟2%。好消息是,这证实了PD快充+C转L的线可以给iPad Pro 9.7充电。这个我之前在网上搜,都没人提过。

于是我上充电头网上看文章,发现要想给苹果设备快速充电,需要设备支持Apple 2.4A的协议。品胜和瓦力的充电器,应该都是不支持这个协议,才只能按照5w给苹果设备充电的。

11月22号,看到充电头有团购,买了绿巨能的1C2A的63w充电器。这个是支持Apple 2.4A协议的。26号到货后,发现一切都很美好,3个口都能给iPad快速充电。这个后面还是发生的新的问题,今天已经退货了。后面单独谈。

12月2号,退货绿巨能1C2A充电器,购买omthing PD 30W 1A1C充电器+C转L线套装。这个也是充电头的团购,

12月6号,到货了,结果充电器无法充电。线倒是能用。选择换货。

12月13号,收到新换的充电器。但是又有新问题,它的充电器支持Apple 2.4A协议。但是配和它送的C转L线却不支持(使用我自己的另一根线却可以,就是瓦力套装里的那根)。这个很让我诧异,之前我一直以为和线没有关系。

12月14号,退货omthing套装。

12月15号,闲鱼收了一个全新的京东京造65W单口充电器。

12月21号,收到了货。这次一切都好。这件事终于可以告一段落了。

维修后的其它问题

11月7号维修的,8号完成拿回来,晚上到家,发现屏幕翘起来了。9号又跑去,让维修的重新粘了屏幕。还特意放了一块胶。

但是回来没几天,还是有些翘。我上网查了一下,iPad更换屏幕之后,应该使用专门的双面胶封装,而不应该使用胶水。这个双面胶,就算在淘宝上单独买,也只要15元。我维修尾插花了300元,但是维修人员居然连双面胶都不给我用,估计也不完全是因为他小气,而是因为他干脆没有。因为据我的观察,来他家的,大部分都是iPhone换电池的和扩容的,修iPad的极少。

最后我11块9从淘宝上买了一个全包的硅胶壳,把整个屏幕套起来了。因为来回一趟要3小时,太麻烦。眼不见心不烦,我也懒得去了。

小事记

日期 事件
11.6 iPad Pro 9.7无法充电。
11.7 第一次维修。
11.8 修好了,取货。买了品胜的充电器。回来后发现线不行,买了两个Anker线。
11.9 收到Anker线,只有一根线好用。退掉一根线。再次去维修,因为屏幕没有粘牢。
11.19 买了两根Ecclus MFi认证线,均不好用。
11.21 购买瓦力18w充电套装。
11.22 瓦力18w能充电,但速度很慢。充电头团购绿巨能63w 2A1C充电器
11.23 退货Ecclus的线。
11.26 到货绿巨能充电器,当时很满意。发现A口在设备快充满时会断流。但是间隔较长,认为问题不大。
12.1 双口同时充电时,A口断流现象由几十分钟一次变成了几分钟一次。联系客服换货。售后客服已下班。
12.2 与客服沟通1个多小时,遭遇多个套路,最终由换货变成了退货。晚上,登上充电头团购新车,购买omthing套装
12.6 到货,充电器不能用,线能用,换货
12.13 换货完成,充电器配合送的线不能实现苹果2.4A快充
12.14 退货omthing
12.15 闲鱼收全新京东京造65W单口充电器
12.21 一切都好。这件事告一段落。

相关

iOS/iPadOS设备充电全面总结

绿巨能1C2A 63w充电器退货历险记,淘宝客服的套路与解法

Ubuntu 18.04下将Apache2多站点改为Nginx多站点,同时开启Trojan

最近SSR实在太不稳定了。断断续续的十分难受。于是,趁着还能上的时间,查询新的翻墙方法。经过测试,决定使用Trojan的方式。

原理

Trojan原理

trojan原理

Trojan服务器获得HTTP请求,如果请求的格式正确,就返回代理的数据,否则就返回HTTP网页,这样在第三方看来Trojan就和一台HTTP服务器没区别。

虽然Trojan可以伪装为HTTP服务器,但是它的服务很基本,比如根本不支持虚拟多站点,只能伪装成一个站点。

因此,(为了省钱,)我们还需要另外搭配Nginx来使用。

Trojan+Nginx多站点原理

Trojan+Nginx多站点原理

HTTP访问Nginx,开启了预读模块的Nginx,会对数据流进行分析,如果访问的域名是Trojan预先定义的域名,就访问内部的Trojan端口。否则则访问Nginx的端口。有以下几点需要注意:

  1. Nginx的预读模块本身使用的是443端口,而Nginx模块的HTTP服务使用是4443端口。这是因为,我们需要外部访问服务器时,统一使用443端口,而在服务器内部,通过内部的端口进行中转。
    1. 对于外部(比如防火墙或其它类似设置),理论上我们只需要开启443端口。但是在实际使用中,我发现有些域名会自动跳转到4443端口,因此如果你遇到外部无法访问特定域名的问题,可以开放4443端口试试。
  2. Trojan默认跑在443端口,但是为了配合Nginx使用,需要修改到其它端口,我这里选的是4433端口。
  3. 这个原理,整体来说,就是在外部看来,统一访问443端口。然后Nginx的预读,会分流转发到Trojan和Nginx。

安装

卸载Apache2

sudo apt remove apache2
sudo apt autoremove

删除apache2,之后删除掉不再需要的依赖。

安装Nginx

Ubuntu 18.04自带的Nginx本身没有开启ngx_stream_ssl_preread_module。我们安装Nginx官方提供的版本,这个版本开启了所有的可开启扩展。

sudo vi /etc/apt/sources.list

在文件最下面添加并保存

# for latest nginx
deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx

添加服务器签名,签名在这里nginx_signing.key。点开前面的网页,复制里面的文本内容,保存到nginx_signing.key。不要直接下载。因为是网页,不是纯文本。

sudo apt-key add nginx_signing.key

安装Nginx并开启防火墙端口

sudo apt update
sudo apt install nginx
sudo ufw allow 'Nginx Full'

你现在可以打开浏览器,然后输入vps的ip地址,如果看到了nginx的欢迎界面,就代表nginx配置成功了。

nginx: Linux packages

配置Nginx多站点

假设你有一个网站叫example.com,网页位置在/var/www/html/example.com/html。新建一个配置文件。

sudo vi /etc/nginx/sites-available/example.com

内容如下

server {
	listen 80;
	listen [::]:80;

	server_name example.com www.example.com;

	root `/var/www/html/example.com/html;
	index index.html;

	location / {
		try_files ``uri ``uri/ =404;
	}
}

我们不用添加443端口,因为等下添加证书的时候,Certbot会帮我们自动生成新的配置文件。

将网站配置生效

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enable
sudo systemctl reload nginx

参考上面的步骤,添加你所有的站点。之后,再额外添加一个站点,用于Trojan的识别。

最后添加的站点,一定要是一个不需要用的二级域名,而不要使用一级域名。因为我发现Nginx的预读有bug。如果你使用了一级域名,那么它的二级域名也都会匹配。这将导致错误。
一级域名指的是example.com这种,二级指的是mail.example.com这种。

这里我们假设额外配置一个叫tro.example.com的二级域名站点。

为Nginx添加SSL证书

通过浏览器访问网站https://certbot.eff.org,选择Nginx和Ubuntu 18.04,安照网站的提示安装certbot。

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

申请证书

sudo certbot --nginx

按照提示进行操作。完成之后,你再通过浏览器访问网站,你会发现已经是https的了。

安装Trojan

sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"

修改Trojan配置

sudo vi /usr/local/etc/trojan/config.json

找到"local_port",将443,改成4433或者你希望的端口。
找到"password",修改为你想要设置的密码。
找到"ssl",将"cert"设置为“/etc/letsencrypt/live/example.com/fullchain.pem"。将"key"设置为"/etc/letsencrypt/live/example.com/privkey.pem"。

保存并退出。运行Trojan。设置为开机启动。

sudo systemctl start trojan
sudo systemctl enable trojan

配置Trojan+Nginx共存

sudo vi /etc/nginx/nginx.conf

在events和http两段之间,插入

stream {
    map ``ssl_preread_server_name ``name {
        tro.example.com trojan;
        default nginx;
    }
    upstream trojan {
        server 127.0.0.1:4433;
    }
    upstream nginx {
        server 127.0.0.1:4443;
    }
    server {
        listen 443;
        listen [::]:443;
        proxy_pass $name;
        ssl_preread on;
    }
}

保存,修改之前设置的所有网站的设置。打开/etc/nginx/sites-enable/中所有的网站的配置,将所有的443端口,改成4443端口,然后保存。

sudo systemctl reload nginx

在好多支持Trojan的客户端中,域名是可选的。但是由于我们需要使用域名来进行跳转,所以在设置客户端时,域名是必填的,必须填写为tro.example.com
Module ngx_stream_ssl_preread_module

开启BBR

sudo echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sudo echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

Ubuntu 18.04/18.10快速开启Google BBR的方法
19.04开始,BBR是默认开启的,不用单独开。

其它

Ubuntu 20.04下安装Nginx与Trojan

ClashXR配置Trojan