自从十月份以来,自己长期使用的一些vps都断断续续开始抽风,甚至是自己挂网站的服务器也是经常访问不了,就连科学上网工具也大多失效,直至我写这篇文章的今天2017-11-14,依然如此,自己前段时间挂了脚本在校园网环境(北京)监控过自己vultr,linode,digitalocean这三大家在程序员圈子里比较有名的vps服务商的ip,监控端口为80,443,22,结果发现可用率不超过50%,于是便决心放弃这三家被国人玩坏的知名服务商另寻出路了。

其实我首先是用上Google的Google Cloud Platform,用着注册送的300美元开了一家asia-east-2的小主机,发现网速十分快,到大陆的三网延迟均在50上下,下载速度也十分理想,本决定是它了,结果仔细看了看价格,最低配置是0.2个cpu,0.6g内存每个月为5美元,流入中国的流量每G要0.23美元,这一下算过来这么差的配置跑一个月得用十几刀,想想自己也消费不起还是放弃了。就是从这时走上了寻找小众厂商的道路,写这篇文章也是总结了以下我购买一台vps之后测试它是否符合我的网络使用需求的一般步骤。

创建新用户

买下一台服务器后服务商一般是提供给一个root账号以供ssh登陆,密码有随机数也有自己初始化的,不过最好还是自己新建一个非root账户使用:

# 新建一个<user>用户,之后会提示输入用户名信息等,会自动创建一个/user/<user>的目录
adduser <user>
# 将刚刚新建的用户授予管理员权限
usermod -aG sudo <user>

更新系统

一般我选择的是Ubuntu 16.04 64bit,因此下面的所有步骤都是基于此系统

sudo apt update
sudo apt upgrade

更新内核

需要一台有高质量网络的服务器,我会选择开始防止网络拥塞的bbr选项,经过我的几次测试发现真的挺管用的,不过这一选项需要在linux内核版本为4.9及以上才能开启,这里说明如何升级内核:

进入 http://kernel.ubuntu.com/~kernel-ppa/mainline 选择合适版本的内核,如你选择了4.9.61,则进入后复制这三个下载链接

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.61/linux-headers-4.9.61-040961_4.9.61-040961.201711080535_all.deb

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.61/linux-headers-4.9.61-040961-generic_4.9.61-040961.201711080535_amd64.deb

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.61/linux-image-4.9.61-040961-generic_4.9.61-040961.201711080535_amd64.deb

使用wget命令下载到vps上并执行

sudo dpkg -i *.deb

安装完毕后,更新引导并重启

sudo update-grub
sudo reboot

删除旧的内核(4.4)

sudo dpkg -l|grep linux-image 
sudo apt-get purge linux-image-4.4*

检查是否已经是最新的内核

uname -r

开启BBR

# 切换到管理员权限
sudo su

# 写入配置
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 保存配置
sysctl -p

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

# 检查是否有bbr模块,若出现则生效
lsmod | grep bbr

延迟与丢包测试

延迟与丢包测试我一般会使用 http://ping.chinaz.com/ 测试全国延迟情况,以及 http://ping.pe 测试延迟与丢包,若美国西部地区250ms以下为佳,日本以150ms为佳,香港台湾地区以100ms以下为佳,最好三网都比较好,尽量不要出现某一家延迟巨大。测试丢包时 http://ping.pe 尽量一片绿最好,偶尔几个红色冒出来也可以接受。

安装nginx测试下载速度

sudo apt update
sudo apt install nginx

在nginx的默认网站根目录下放较大的二进制文件,在生成大文件时可以顺便观察以下磁盘的io速度,不过我的重点实在网络质量,普通每秒几十m的机械硬盘我都可以接受,而且现在大部分都提供了ssd,速度都不会太差

cd /var/www/html
sudo dd if=/dev/zero of=2M.bin bs=1M count=2
sudo dd if=/dev/zero of=100M.bin bs=1M count=100

使用 https://www.17ce.com/ 输入你的ip/2M.bin测试全国get的速度,若失败,检查以下你服务商的服务器防火墙选项查看80端口是否打开,跑完测试结果后全国平均下载速度在1m/s以上为佳,500k/s,也可以接受,与延迟测试同理,三大运营商中不要有特殊情况,速度质量平均最好。

之后也会在自己所处的网络环境访问一遍ip/100M.bin看看自己的下载速度怎么样。

本地网络环境测试

因为自己的校园网总抽风和普通的三网或4g都有点不同,所以自己也会使用校园网跑一遍本看看80端口正不正常,内容如下,跑个两小时若没有出现100%失败的情况那就没问题了

#!/bin/bash
DATE_LOG=`date "+%Y-%m-%d-%H-%M"`
while true
do
DATE_N=`date "+%Y-%m-%d %H:%M:%S"`
echo "$DATE_N" >> ping_$DATE_LOG.log
echo "========================" >> ping_$DATE_LOG.log
echo "ld.lrf.pw">>ping_$DATE_LOG.log
~/paping -p 80 -t 2000 -c 5 --nocolor YOURIPHERE | grep -E 'Average|Failed' >> ping_$DATE_LOG.log
sleep 60
done