服务器安装全新 Ubuntu 18.04

Ubuntu 18.04 Bionic Beaver 已经在 2018 年 04 月 27 号发布
很多云厂商甚至都还没更新系统模板,作为更新强迫症
很多云厂商出厂的系统都夹带了一些东西,作为系统洁癖患者
决定亲自动手重新安装服务器的系统。

本教程在阿里云、腾讯云、京东云实测成功,下面拿阿里云来开刀。

环境准备

打开阿里云服务器管理控制台,在云主机实例列表中找到需要重装的主机,为避免出现各种奇怪的问题,建议重置系统为本文实验环境 ubuntu 16.04.4 LTS(或者 Debian 9)

然后点击远程连接

使用 ip route 命令列出当前网卡信息,记录下来(专有网络大概可以忽略)

下载系统

新建文件夹 /boot/netboot 并且下载两个 netboot 文件

mkdir /boot/netboot && cd /boot/netboot
wget http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux
wget http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz

更新 grub

修改 /etc/default/grub 如下

cat > /etc/default/grub << EOF
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=20
GRUB_DISTRIBUTOR=Ubuntu
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 crashkernel=auto"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
EOF

修改后执行 update-grub 生成新的 /boot/grub/grub.cfg

update-grub

然后加入 netboot 的引导项

cat >> /boot/grub/grub.cfg << EOF
menuentry 'Ubuntu 18.04 Installer' {
    insmod part_msdos
    insmod part_gpt
    insmod ext2
    set root='(hd0,msdos1)'
    linux /boot/netboot/linux
    initrd /boot/netboot/initrd.gz
}
EOF

进入安装

打开 vnc 页面,确保看到界面后,在 ssh 上运行 reboot 执行重启,当 vnc 界面显示启动项选择时,选择 Ubuntu 18.04 Installer 回车进入。

谈谈开源镜像站

我们日常使用的操作系统、应用软件在更新的时候都需要从上游服务器拉取数据,这个所谓的上游服务器也叫做「源」。由于种种原因,一些私有云平台会搭建自己的镜像站,避免因网络问题导致更新受阻,保障公司内部的机器运转正常。

挑选一个好的镜像站非常重要,通常要从稳定性、健康度和速度三个方面来综合比较。METO 为此搭建了一个监控平台,平台使用爬虫 24 小时监控各大镜像站的连接性以及同步时效。

国内

在中国(除港澳台地区),由于中美之间持续的贸易战导致国际链路一直不太稳定,所以也出现了很多对公网开放的镜像站。大致分为两类,下面列出一些比较有代表的镜像站。

高校开源镜像站:

清华大学mirrors.tuna.tsinghua.edu.cn
中国科学技术大学mirrors.ustc.edu.cn
上海交通大学ftp.sjtu.edu.cn
上海大学mirrors.shu.edu.cn

企业开源镜像站:

阿里云mirrors.aliyun.com
腾讯云mirrors.cloud.tencent.com
华为云mirrors.huaweicloud.com
网易mirrors.cn99.com
首都在线mirrors.yun-idc.com

国外

国外(境外)的镜像站则大致可以分为三类。

高校开源镜像站:

The Chinese University of Hong Kongftp.cuhk.edu.hk
元智大學ftp.yzu.edu.tw
Massachusetts Institute of Technologymirrors.mit.edu

云服务商开源镜像站:

Digital Oceanmirrors.digitalocean.com
Linodemirrors.linode.com
Cat Networksmirrors.cat.net

公益开源镜像站:

Kernel ORGmirrors.kernel.org
Yandexmirror.yandex.ru

评测

更新时间:2019-03-01

从零开始写一个代理

在一些网络管控严格的企业,我们访问互联网的流量通常会被安全部门拦截审查,因此诞生了许多基于混淆、加密流量原理的代理工具,为了更深层地了解代理的工作原理,本文来研究一下如何从零写一个自己的代理工具。

本文只是提供一个造轮子的思路,目前市面上的代理工具和协议已经相当完善,请自行搜索和使用。

socks5

socks 是一种网络传输协议,我们先在企业外架设一个 socks 服务端,而后在企业内通过设置 socks 代理访问其它网页。

目前 socks 最新的协议版本是 5,然而 socks5 协议全部采用明文传输数据,防火墙只需要稍加分析即可作出拦截。

IPIP.net 地址库格式分析

IP 数据库在互联网时代起着举足轻重的作用,例如电商网站的风控系统、通讯软件的登录系统,通常都会将用户的登录 IP 作为一个重要指标进行甄别,因此 IP 数据库的精确性就显得格外重要。

目前网络上提供离线数据库下载的有 qqwry 纯真、IPIP.net、MaxMind 三家。其中 IPIP.net 宣称是基于各电信运营商以及网络服务的 BGP/ASN 数据而分析处理而得来,目前也有众多的知名企业在使用。

2018 年 6 月,IPIP.net 宣布进军 IPv6。在 2019 年 1 月左右,老高在官方放出了全新的 ipdb 格式,能够同时兼容 IPv4/IPv6 地址的查询,另外也大幅提升查询速度。本文就重点来分析一下 ipdb 的文件格式。

基本结构

ipdb 文件在结构上分为三层:文件头、节点区、记录区。

文件头

ipdb 的文件头就是一个简单的 JSON,前 4 个字节表示了 JSON 字符串的长度。

JSON 中提供了数据库的构建时间、节点的数量、多语言的偏移量、支持的字段等等。

节点区

ipdb 的索引方式采用字典树(trie)的方式,首先将 IP 地址转换为二进制形式,然后从根节点开始,遇到二进制位为 0 的时候跳到左子树上,遇到 1 则跳到右子树上。

节点区由若干组节点组成,每组节点长度为 8-byte,其中前 4-byte 表示该节点的左儿子序号,后 4-byte 则是右儿子的节点序号。

举个栗子,我们先把 3.0.0.0 转换成二进制。假设 IPv4 根节点序号为 96,那么根据第 1 个二进制位 0,下一跳应该跳转到 96 节点的左儿子 97 上。以此类推,当跳到序号大于节点总数的时候(还记得文件头中的信息吗),就意味着找到最终的数据了。