Docker 中运行 OpenWrt

在尝试过各种 x86/arm 路由,各种开发版,各种盒子。一圈下来,最后还是回到 OneCloud (玩客云)刷 Armbian,其内安装 Docker 跑 OpenWrt 作旁路网关为结局。

作为家用,性能足够,价格也足够便宜,到写这篇文章时,海鲜市场的价格大概 30 块左右包邮。

如何短接触点刷机,如何刷 Armbian, 略过不表。这篇文章只是用来记录,在 Armbian (Debian) 下将 OpenWrt 运行起来的流水账。

IPv6 隐私扩展

DHCPv6 方式管理 IPv6 不在本文讨论之列,这篇文章主要是介绍通过 SLAAC (Stateless Address Autoconfiguration) 来生成 IPv6 后,打开 IPv6 隐私扩展。以及如何生成稳定的隐私地址。

  • 隐私扩展 RFC 4941 通过 “隐私地址” 允许出站连接使用临时的、随机生成的地址(每隔几个小时/几天刷新一次地址)。
  • 稳定私有地址 RFC 7217 允许从不透明哈希值来生成私有静态地址。

未打开 IPv6 隐私扩展前,IPv6 地址是通过设备 MAC 地址来作为 EUI64 来生成的。 方法是 IPv6 前缀 + MAC 地址(中间插入FFFE)。

譬如 IPv6 前缀 2409:11:11:11,mac地址是 11:11:11:11:11:11,那么生成的 IPv6 为 2409:11:11:11:1111:11ff:fe11:1111

打开网卡的 promiscuous 模式

如果需要桥接网络设备,或者尝试 docker 的 macvlan 网络,那么势必要打开网卡的 promiscuous 模式。

首先,最近的 linux 发行版都支持用命令行临时打开。

sudo ip link set dev eth0 promisc on

只是绝大多数时候我们需要永久打开 promiscuous 模式。那么我们可能根据自己系统选择合适的方法。

双栈网络上优先使用 IPv4

随着 IPv6 的普及,对网络特定的需求也得到改变,一些特定的场景下,我需要系统优先访问 IPv4,但是访问 IPv6网络应用也要能正常访问。但是现代操作系统,默认基本都是 IPv6 优先,所以接下来需要做一些特定的设置。

Linux

GNU/Linux 比较简单,在系统已经安装 glibc 的前提下,编辑 /etc/gai.conf 文件,取消下面行的注释

precedence ::ffff:0:0/96  100

密钥是时候更换到曲线 25519

有关 Curve25519/Ed25519/X25519 介绍的文章已经很多,分别指的椭圆曲线加密/签名/密钥交换算法。由于 NIST 系列的不透明以及来历不明参数,被广泛怀疑。棱镜门后,25519 系列开始逐渐被大众接受。直至当下的部署情况: Things that use Curve25519

具体介绍就不多说了,以下简单说一下常用场景使用 25519 算法的过程。