分类
未分类

OpenWrt 内网下发 IPv6

2018 年 4 月,工业和信息化部发布了关于贯彻落实《推进互联网协议第六版 (IPv6) 规模部署行动计划》的通知,大力推广下一代互联网技术 IPv6。

时至今日,高校教育网以及各大运营商已经基本支持了 IPv6 地址的分配。然而绝大多数家庭的路由器还不能支持自动下发,因此并没有享受到下一代互联网的快感。

这里主要介绍使用 OpenWrt/LEDE 来解决内网设备分配 IPv6 的问题。

想要让路由器下的设备获得 IPv6 地址通常有三种方式:relay(中继)、NAT(地址转换)、Passthrough(穿透)。下面分三个部分谈谈具体的配置方案。

中继模式(relay)

OpenWrt 早在 15.05 就内置了 relay 协议,具体是通过 odhcpd 来实现的。

这种方案可以让子网设备分到公网 IPv6 的地址,是最为科学的,然而 odhcpd 的实现有很多 bug,在实际使用中有时候会掉线,需要重启服务才能解决,因此在部分设备上体验不佳。

具体操作如下

进入路由器终端

$ ssh root@192.168.1.1

编辑 dhcp 配置文件,修改如下

$ vi /etc/config/dhcp

config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option ra 'relay'
    option ndp 'relay'
    option dhcpv6 'relay'
    option ra_management '1'

config dhcp 'wan'
    option interface 'wan'
    option ignore '1'

config dhcp 'wan6'
    option interface 'wan'
    option ra 'relay'
    option ndp 'relay'
    option dhcpv6 'relay'
    option master '1'

编辑 network 文件,将地址第一个字母 f 修改为 d

$ vi /etc/config/network

config globals 'globals'
    option ula_prefix 'dd53:abcd:abcd::/48'

最后重启即可

穿透模式(Passthrough)

Passthrough 的原理是将内外网进行桥接,然后对 IPv4 流量采用 NAT 方式进行转发,稳定性相当好,唯一的缺点就是路由器自身会失去 IPv6 的访问,因此如果想在路由器上做离线下载等功能就会非常麻烦。

配置如下

安装 ebtables 和 kmod-ebtables-ipv6 模块

$ opkg update 
$ opkg install ebtables kmod-ebtables-ipv6

设置 IPv4 转发

$ interface=`ip -6 route | grep "default from" | awk '{print $7}'` 
$ ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i $interface 

内外网桥接

$ brctl addif br-lan $interface

杀死 odhcpd

$ /etc/init.d/odhcpd stop 
$ /etc/init.d/odhcpd disable 

点击 LAN 接口的 edit 按钮进入设置,在 IPv6 Settings 选项卡中勾上 Always announce default router

做完这些步骤,稍等一会儿子网设备就会分到相应的公网 IPv6 地址了

分类
未分类

服务器安装全新 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 上。以此类推,当跳到序号大于节点总数的时候(还记得文件头中的信息吗),就意味着找到最终的数据了。