题外话

有人觉得讽刺。然而墙就在那,穿越了就是另一个世界——我可没说这个世界对中国人就是好的,当然各种资源,肯定多多益善。但任何事情都有另一面,并不只有香甜的空气。

比如某科技网站引用了新乡时报的上不了网课的孩子:疫情暴露中国教育的数字鸿沟,英文标题要收敛些The Coronavirus Exposes Education’s Digital Divide(白左至少表面上要点脸,不像自恨党/香蕉人瞎到以为美国不存在数字鸿沟,哪怕实际上挂羊头卖狗肉)。

作者是Raymond Zhong——甭跟我扯什么大家都是中国人,如果我在战场上听到有人说我是中国人别开枪,我立刻朝丫先打完一弹夹(有约定口令)。犹太和阿拉伯还都是闪米特人,就算忠还有清君侧。

这人得多瞎,在美国动不动打电话都没信号,嘲笑4G基站占全球2/3的中国?发达国家中最高监禁率、贫富最悬殊,讽刺中国的“教育数字鸿沟”?

不能说他的报道纯属捏造,但事实只是一方面,关键在于如何解读。他真的不明白美国的贫民区中学生,为什么不会徒步数小时冒着严寒到山顶上网课?要不要比较下中美的未成年堕胎率、吸毒率、犯罪率?

当然,新乡日报作为濒临灭绝的旧媒体之一,读者也不多——中文无评论(台蛙港废皆无),英文有一个印度人评论,虽然印度和中国只有人口相近……但整天被这种酸臭浸泡,是你想象的天堂吗?

前言

10年开始一直用PP2P,但PP2P用4G连不上,16年11月换装OpenVPN。

OpenVPN网络要求低,却会被DNS污染,所以离不开hosts文件。大部分网站都可以用固定IP,可能会慢点,但Youtube这种疯狂跳转的不行。TCP很可靠,但到了18年最多用一天IP就会被ban,要浪费1分钟换主机。UDP时间稍长就不行了,要反复重启,但我也忍到现在了。因为我几乎只用搜索。

20年需要Youtube科技视频素材,必须换装全面、高效的梯子。前几年流行的SS(R)和我没听过的v2ray据说现在也不行了。不得不承认,如今翻墙早已不是计算机专业独属技能了,甚至很难搜到非一键安装

域名

Trojan必须有域名。我因为搜索Trojan知道了NameSilo,搜手动安装又知道了域名比价,发现刚申请的.win贵了$.75……我可在name.com买过3年的.computer,浪费了90多刀(相当于3条16G内存)!域名代理和中介一样,靠信息不透明赚大钱。现在搜索和比价工具很多,不爽就多动脑,只有想不到没有做不到。如果找不到合适的工具,也许你的机会来了。人类各种进步,都为解决不爽,只不过大部分人将就了一辈子。

网站

既然长期持(只要用Trojan就得)有域名,就有理由坚持写博客了。nginx、mysql/mariadb、php/wordpress这些都很简单,以前也搭过,但再来一遍就觉得烦了。所以先逐行试好了用sed改配置,再从头运行,单脚本全部通过了。

最初的设想,主域名运行Trojan服务,二级域名运行HTTPS。nginx支持虚拟域名,理论上可以用nginx转发主域名HTTPS到Trojan,实际上没看到Trojan支持nginx转发。

因为Trojan会监听443,把符合Trojan协议的通信伪装成普通HTTPS,否则转发到80。如果只运行nginx,用HTTPS访问,和HTTP的主页一样。而如果运行 wordpress,用HTTPS访问,页面是乱的。推测Trojan转发不完善,无法在HTTPS加载CSS,因为nginx的HTTPS没问题。将就下,毕竟网站只是附属,HTTP访问网站没任何问题。

证书

如果只搭网站,装好nginx、wordpress,certbot可以一次通过:

certbot --nginx -d $domain -d $subdomain -d $subdomain

certbot相当于数字证书申请、下载、配置一键脚本,默认会修改nginx的配置,这样443就会被nginx所占用,导致Trojan服务无法启动(这是一大坑),所以要这样用:

certbot certonly -d $domain --agree-tos --register-unsafely-without-email --webroot -w /var/www/html

此外还要修改证书目录/文件的权限,我有点困惑,为啥nginx可以正常读取?

cd /etc/letsencrypt && chmod o+rx live archive && chmod o+r archive/$domain/privkey*.pem

全部安装配置命令

注意替换域名、密码和邮箱,最后的mysql语句要分两次复制/粘帖,否则装半天都被冲掉了。

#替换你的域名、Trojan/WordPress服务的密码
domain='pinshu.ren'
password='yourpasswd'

sed -i -e 's/grep /grep -ai /' -e '/ll=/d' .bashrc && echo 'sudo su' >> .profile && sudo su
cd /etc/update-motd.d && rm 10-help-text 50-motd-news 90-updates-available && sed -i -e '/  System information as of /d' -e 's/\/bin\/date/uptime/' 50-landscape-sysinfo && cd /etc/apt/apt.conf.d && sed -i -e 's/\/\/\(.*updates"\)/\1/' -e 's/\/\/\(.*-Unused-\)/\1/' -e 's/\(.*-Unused-.*\)false/\1true/' -e 's/\/\/\(.*Reboot "\)false/\1true/' -e 's/\/\/\(.*Time "0\)2/\15/' 50unattended-upgrades && sed -i -e 's/grep /grep -ai /' -e '/ll=/d' ~/.bashrc && cd /etc && ln -fs /usr/share/zoneinfo/Asia/Shanghai localtime && echo "
alias ll='ls -lh'
alias lct='ls -ct'      #sort by ctime
alias llct='ll -ct'
alias llctr='ll -ctr'
alias lctr='ls -ctr'
alias lmt='ls -t'       #sort by mtime
alias llmt='ll -t'
alias llmtr='ll -tr'
alias lmtr='ls -tr'
alias lat='ls -ut'      #sort by atime
alias llat='ll -ut'
alias llatr='ll -utr'
alias latr='ls -utr'
alias lx='ls -X'        #sort by extension
alias llx='ll -X'
alias lls='ll -S'       #sort by size
alias llsr='ll -Sr'
alias li='ls -I'        #--ignore=PATTERN
alias lr='ls -R'        #--recursive
alias llhd='ls -lhd'
alias llk='ll --block-size=K'
alias llm='ll --block-size=M'
  
alias dfh='df -ht ext4'
alias dfg='df -t ext4 -PBG'
alias dfm='df -t ext4 -PBM'
alias duh='du -hd0'
alias dug='du -d0 -BG'
alias dum='du -d0 -BM'
  
alias pscpu='ps -eo pid,pcpu,rss,stime,time,cmd --sort=-pcpu | head -n6'
alias psmem='ps -eo pid,pcpu,rss,stime,time,cmd --sort=-rss | head -n6'
alias mcm='free -m && echo --sort=-pcpu && pscpu && echo --sort=-rss && psmem'
  
alias te='/usr/bin/time -f %E'
  
alias ping='ping -c 10'
alias wget='wget -c -t0'" >> bash.bashrc
#谷歌云GCP内核需开启BBR,其它VPS默认已开启(内核>4.9),多余命令可以删掉
echo 'net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr' >> sysctl.conf && sysctl -p # --system
#Minimal不包含add-apt-repository
add-apt-repository -y ppa:greaterfire/trojan && apt-get update && apt-get install -y fail2ban supervisor nginx mariadb-server php-fpm php-mysql certbot trojan unzip && apt-get upgrade -y && apt-get autoremove -y && apt-get clean && sed -i 's/^bantime.*10m/bantime=10y/' /etc/fail2ban/jail.conf && cd /etc/nginx/ && cp sites-available/default ~ && sed -i -e "s/\/html/\/php/" -e 's/index.html /index.php /' -e "s/server_name _/server_name $domain/" -e 's/#location ~ \\/location ~ \\/' -e 's/#\(.*\)fastcgi-php/\1fastcgi-php/' -e 's/#\(.*\)fpm.sock;/\1fpm.sock;}/' sites-available/default && wget wordpress.org/latest.zip && unzip latest.zip && rm latest.zip && chown -R www-data:www-data wordpress/ && mv wordpress /var/www/php && cd /var/www/php && mv wp-config-sample.php wp-config.php && sed -i -e 's/database_name_here/wordpress/' -e 's/username_here/wordpress/' -e "s/password_here/$password/" wp-config.php && certbot certonly -d $domain --agree-tos --register-unsafely-without-email --webroot -w /var/www/html && service nginx reload && echo '0 3 1 */2 * certbot renew' | crontab - && sed -i -e "s/password1/$password/" -e "s/\/path\/to\/certificate.crt/\/etc\/letsencrypt\/live\/$domain\/fullchain.pem/" -e "s/\/path\/to\/private.key/\/etc\/letsencrypt\/live\/$domain\/privkey.pem/" /etc/trojan/config.json && cd /etc/letsencrypt && chmod o+rx live archive && chmod o+r archive/$domain/privkey1.pem && systemctl enable trojan && service trojan start && mysql_secure_installation && mysql -p #root,INDEX.PHP,server_name,fastcgi-php,fpm.sock
#mysql_secure_installation:passwd,n,4y
create database wordpress;
create user wordpress@localhost identified by 'yourpasswd';
grant all privileges on wordpress.* to wordpress@localhost;
flush privileges;
exit
#certbot --nginx -d $domain -d $subdomain #需要多装一个软件包python3-certbot-nginx

补充这段代码:letsencrypt颁发的证书每90天过期(非3月),只能每俩月(初凌晨3点)续一次

echo '0 3 1 */2 * certbot renew' | crontab -