如果你真的有一天受够了现有的 SS 服务商,不管是受够了时长/流量限制,还是速度亦或是稳定性,从而决定自己建一个机场,那么你第一个要思考的问题就是,机场究竟应该建在哪儿——如何选择一个 VPS 提供商?

需求分析

你建机场用来干什么?总不能是锻炼技术吧。相信绝对多数的人的目的都是飞越长城,那么我们便可以基本认为你的机场要建在美国,少数情况下是香港;而海外服务器的带宽、流量满足一个人甚至两三个人使用都是绰绰有余的;硬件配置 1 核 512 M 或者 1 G 的最低配置就够用了。

那么现在,你只需要考虑两个问题:成本线路速度。特殊情况像我这样,享受着速度奇差的校园网的用户,还需要考虑一个 IPv6 支持情况

成本和线路速度其实是一个问题——线路速度并不指 VPS 带宽,而是指你(国内运营商)到 VPS(国外运营商)的国际线路的情况——即选 169 骨干网、CN2 GT 还是 CN2 GIA 的问题,线路等级越高,成本自然越高。

三种线路对比可以参见之前的文章:初次体验 CN2 GIA – 魔方云香港 VPS

话不多说,直接上干货。

提供商对比

CN2 提供商

RSA Market, DGC Host 因为过于声名狼藉并没有列入其中

提供商地区-机房价格配置流量 & 带宽线路类型IPv6 支持说明
Bandwagon Host美西-洛杉矶-DC2 QNET 4.14 USD 2核/1G/20G 1000GB/1Gbps CN2 GT最便宜的版本,仅支持年付 49.99 USD;官网未标 CN2,实际上是 QNET 机房接入中国电信 CN2 GT;偶尔缺货
美西-洛杉矶-DC3 CN2 4.14 USD 1核/1G/20G1000GB/1GbpsCN2最便宜的版本,仅支持年付 49.99 USD;中国联通 CN2;有时缺货
美西-洛杉矶-CN2 GIA 4.14 USD 1核/500M/10G 500GB/1Gbps CN2 GIA最便宜的版本,仅支持年付 49.99 USD;中国电信 CN2 GIA;常年缺货
GigsGigs Cloud美西-洛杉矶12.8 USD 2核/1G/20G 2000GB/1Gbps CN2 GIA 贵的原因大概是高配和高流量,以及线路是自己的,质量很好。6.8 USD 的版本缺货
香港10 USD 1核/500M/15G 120GB/1Gbps 大陆直连GGC 的香港 CN2 版本是惊人的 22 USD 每月,以及虽然高带宽、自建机房、自由直连线路,但还是太贵了
Wiki Host美西-洛杉矶50 CNY1核/512M/15G 500GB/15Mbps 半程CN2带宽着实有些小,而且去程 163 回程 CN2 GIA 这种东西是什么想法
Cube Cloud美西-洛杉矶55 CNY2核/1G/15G 1000GB/100Mbps CN2 GIA 国人运营,蜂鸟科技旗下。上游是 DGC Host,搬迁计划一拖再拖,还需观望
香港69 CNY2核/1G/15G 400GB/50Mbps CN2 GIA 香港机房非常推荐,各项参数都不错还支持 IPv6,目前香港 CN2 GIA 里最优的选择
RFC Host美西-洛杉矶-LAX 6.99 USD1核/512M/8G 500GB/1Gbps CN2缺货
美西-洛杉矶-LAX28.99 USD 1核/512M/10G 500GB/500Mbps CN2 GIA 洛杉矶甚至美西地区质量最高的 CN2 GIA 线路
香港12.99 USD1核/512M/8G 500GB/100Mbps 半程CN2并不算是很有优势的一个配置,缺货
Dedi One美西-圣何塞6.66 USD2核/1G/20G 1000GB/1Gbps CN2 GIA仅支持季付 20 USD,算很好的选择但是缺货
Host Dare美西-洛杉矶 3.83 USD1核/756M/35G 600GB/80Mbps CN2 GIA 比较良心的 CN2 GIA 线路
Any Node美西-洛杉矶 1.25 USD1核/256M/10G 500GB/1Gbps CN2 GT 仅支持年付 15 USD,这也太便宜了吧!2 核/1 G/25 G 也才一月 5 USD 或一年 50 USD!甚至觉得下面非 CN2 可以直接不用看了hhh!
Cloud Cone美西-洛杉矶 2.8 USD1核/512M/10G 1000GB/1Gbps 半程CN2 GIA这家的 UI 有种蜜汁可爱风233,十分便宜,去程 CN2 GIA,带宽足,但是这家的 IP 被玩坏了,可能换五六个 IP 都是被墙的hhh
Tripod Cloud美西-圣何塞7.99 USD1核/512M/20G 750GB/100Mbps CN2 GIA 国人运营,质量和服务都很好,仅支持年付 44.99 USD。缺货
Dedi Serve奥地利-维也纳9.99 EURO1核/1G/25G 1000GB/250Mbps CN2 GIA少见的欧洲 CN2 线路

以上列出的都是商家主打系列里最划算的,基本都是 KVM 架构。有些商家有便宜的 Open VZ 架构 VPS 或者一些隐藏的便宜 VPS 的购买链接,但是不会放到主页上,有需要可以直接 Google

非 CN2 提供商

提供商地区-机房价格配置流量 & 带宽线路类型IPv6 支持说明
Vultr美西-洛杉矶 3.5 USD1核/512M/20G 500GB/1Gbps 普通163老牌供应商,纯 IPv6 VPS 只要 2.5 USD 每月,虽然是 169 线路但是有优化,世界各地有十几个数据中心。控制面板很友好,适合新手!
Linode美西-弗里蒙特5 USD1核/1GB/25G 1000GB/1Gbps 普通163 老牌供应商,以优质的东京 VPS 著称
Digital Ocean美西-旧金山5 USD 1核/1GB/25G 1000GB/1Gbps 普通163 新锐供应商,市场份额直逼几个老牌供应商。和 Vultr 的 UI 一样好看,学生可以在 GitHub 上领 50 USD 代金券
Hostwinds美西-西雅图4.49 USD 1核/1GB/30G 1000GB/1Gbps 普通163 老牌供应商,虽然是普通线路但是速度表现优于其他普通线路的 VPS,客服能力强大。整体质量甚至优于搬瓦工和 Vultr

前言

虽然很早就听说过 CN2 线路了,但是一直没有什么购买的动机。之前买了 Digital Ocean 的旧金山 VPS ,本指望着利用学校 IPv6 不限速的特点绕开慢到心态爆炸的 IPv4 ,但实际使用才发现,别说访问国内网站,访问 YouTube 之类的国外网站也并不怎么快,只有上学期末学校几乎没有人的时候突然网速飙升。

最近想换 VPS 时又看到了 CN2 线路的文章,突然想到:自己搭的 Shadowsocks ,虽然去程走的是教育网 IPv6 出口,但访问国内走的应该是普通的电信 163 网啊!事不宜迟,赶紧搞一个 CN2 !

CN2 线路

什么是CN2线路

CN2 全称为“中国电信下一代承载网”,英文 Chinatelecom Next Carrier Network ,缩写为 CNCN ,进一步缩写为 CN2 。

CN2 作为电信的“精品网络项目”,其先进的技术构造、对大量网络资源的独占,导致 CN2 线路机房的 VPS 卖得比其他线路贵很多。

电信的三种承载网络

163 骨干网:最常见的电信国际线路,骨干节点全部以 202.97 开头,速度慢且丢包率高。

CN2 GT:Global Transit ,是 CN2 中的中端产品,在 CN2 里的等级比较低,
省级/出国节点为 202.97 开头,国际骨干节点有 2~4 个 59.43 开头的 CN2 节点。在出国线路上拥堵程度一般,相较于 CN2 GIA 性价比也很高。

CN2 GIA:Global Internet Access ,目前 CN2 中的最高端的产品,在CN2中的等级最高,省级/出国/国际骨干节点都以 59.43 开头,全程没有 202.97 开头的节点。 线路表现最好、最稳定 ,价格也最高。

如何判断是否为 CN2 线路

ipip.net 的 TraceRoute 工具 查看去程跃点,如果全部都是 202.97 开头的节点,则为 163 骨干网;如果 207.97 与 59.43 节点并存,则为 CN2 GT ;如果全部都是 59.43 开头的节点,则为 CN2 GIA 。

为了防止单向 CN2 的情况,可以在 VPS 中用 mtr 命令测试回程线路(不过目前的 CN2 线路好像很少有这种情况了):

mtr -rn ip
  • 163骨干网线路: Digital Ocean 旧金山机房
北京电信到 Digital Ocean 旧金山机房 Traceroute 结果
Digital Ocean 旧金山机房到百度电信节点 mtr 结果

全程走 202.97 节点,线路拥堵。

  • CN2 GIA 线路: Cube Cloud 魔方云香港机房
北京电信到 Cube Cloud 香港机房 Traceroute 结果
Cube Cloud 香港机房 到百度电信节点 mtr 结果

全程走 59.43 节点,只有少数省级节点可能是 202.97 ,一般不影响速度;跃点数相对较少。

CN2 GIA 线路 VPS 体验

高质量低价格还带 CN2 的 VPS 找谁?搬瓦工啊!但是由于 CN2 GIA 线路实属稀缺资源,导致搬瓦工便宜的 CN2 GIA 节点常年缺货,即便有货也会马上售罄。同样的,阿里云香港的 VPS 也是处于长期断货的状态……

无奈我们只能选择价格稍高但地理位置相当诱人、评价也较好的 Cube Cloud 魔方云香港机房。

概况

处理器:E5-2670 * 2 vCore
内存:1 G
SSD:15 G
流量:400 G
带宽:50 Mbps
IP 地址:IPv4 * 1 / IPv6 * 25
价格:69 RMB / Month

虽然这个价格(大约 10 刀/月)在搬瓦工也能买到 CN2 GIA VPS。而且带宽、流量更高,但是香港线路带来的超低延迟(只有50几毫秒)还是打动了我。而且魔方云除了 1 个 IPv4 地址外,还给了 25 个 IPv6 地址,这对于本就在寻找 IPv6 VPS 的我来说简直是天大的好消息!

延迟只有 50 几毫秒

测试

  • 配置

打开 VPS 详情页和控制面板的第一眼,我就被这个 UI 的简陋程度给吓到了,并且网页操作 VPS 的难度相当大, UI 延迟也很高,对新手来说还是有点胃疼……并且网页控制端没有提供详细的 CPU 、内存占用等情况,只有简单的网络、 HDD I/O 情况,很是……简约……

简约的控制面板……

最重要的问题是,目前来看魔方云并不支持动态 IP 或者更换 IP 地址,这对于隔两周就要被封一次 IP 的 Shadowsocks 来说可是一个灾难性的问题,就看香港的 IP 是不是那么容易被封了……

好的一点是,魔方云的 Ubuntu 系统自带锐速,并且开启了 BBR ,减少了配置 Shadowsocks 的步骤,算是一点安慰吧……

  • 网络

IPv4 的 Traceroute 和 mtr 在之前已经展示过了,但由于校园网 IPv4 速度非常差劲,所以用 IPv6 居多。监测跃点可以看到,IPv6 去程绕道美国,延迟一下子增加到了170多毫秒。

北京教育网到 Cube Cloud 香港机房 IPv6 Traceroute 结果

但因为回国路线是 CN2 GIA ,所以在B站看视频的速度可以轻松达到 30 Mbps ,在 YouTube 上的速度也可以轻松达到 24 Mbps ,观看 4K 视频之类的完全不在话下。

Bilibili, 速度 30 Mbps
YouTube, 速度 24 Mbps

三大运营商的国际线路对比

中国电信

  • 163 骨干网(又名 CN1 )
  1. 通常会经过路由节点 AS4807
  2. 在电信宽带线路中等级最低。
  3. 省级-出国-国际骨干节点多以 202.97 开头,全程没有以 59.43 开头的 CN2 路由节点。
  4. 非高峰期比较堵塞但速度尚可接受,丢包率可以接受(一般 < 5% )。在下午 6 点至夜间 11 点之间的高峰期比较拥堵,且丢包率较高(一般 > 5% )。
  5. 经过的路由点较多。
  • CN2 GT ( Chinatelecom Next Carrier Network Global Transit )
  1. 通常会经过路由节点 AS4134
  2. 在电信 CN2 线路中等级低。
  3. 省级-出国节点多以 202.97 开头,国际骨干节点有 2~4 个 59.43 开头的 CN2 路由节点。
  4. 非高峰期流畅速度快,丢包率低(一般 < 1% )。在下午 6 点至夜间 11 点之间的高峰期表现为流畅且速度较快,丢包率低(一般 < 3% )。
  5. 经过的路由点较少 。
  • CN2 GIA ( Chinatelecom Next Carrier Network Global Internet Access )
  1. 通常会经过路由节点 AS4134
  2. 在电信 CN2 线路中等级最高。
  3. 省级/出国/国际骨干节点都以 59.43 开头。当本省没有 CN2 节点时会就近接入 CN2 节点,所以可能出现极少数的 202.97 开头的节点。
  4. 非高峰期流畅速度非常快,丢包率几乎为0(一般 < 0.01% )。在下午 6 点至夜间 11 点之间的高峰期速度非常快,丢包率极低(一般 < 0.1% )。
  5. 经过的路由点最少、

中国联通

  • 169 骨干网
  1. 通常会经过路由节点 AS4837
  2. 省级-出国-国际骨干节点多以 219.158开头,全程没有以 218.105210.51 开头的 A 网路由节点。
  3. 非高峰期轻度负载,堵塞程度较低,速度适中,丢包率可以接受(一般 < 1% )。在下午6点至夜间11点之间的高峰期负载较高,丢包率适中(一般 > 3% )。
  4. 经过的路由点较多。
  • A网
  1. 通常会经过路由节点 AS9929
  2. 省级-出国-国际骨干节点多以 218.105 开头,全程混有部分或少量219.158 开头的 AS4837 路由节点。
  3. 非高峰期轻度负载,堵塞程度较低,速度快,丢包率较低(一般 < 1% )。在下午6点至夜间11点之间的高峰期负载适中,丢包率低(一般 < 3%)。
  4. 经过的路由点较少。

中国移动

  • PCCW(电讯盈科线路)
  1. 通常会经过路由节点 AS9808
  2. 省级-出国-国际骨干节点是多以 221.176221.183 开头的 AS9808 路由节点,在部分地区会混入铁通 AS9314 / 电信 AS4134 / 联通 AS4837 路由节点。
  3. 非高峰期轻度负载,堵塞程度较低,速度快,丢包率较低(一般 < 1% )。在下午6点至夜间11点之间的高峰期负载适中,速度较快,丢包率较低(一般 < 3% )。
  4. 无法比较所经过的路由节点数量。

总结

作为电信的精品网络项目, CN2 GIA 线路确实做到了高速度、低拥堵、低丢包。但是作为个人使用来说,普遍十刀十几刀的香港线路月租还是略微有点高,到期后准备更换魔方云的香港机房 CN2 GT 线路,虽然不及 CN2 GIA ,但还是有不错的表现和优秀的性价比。

在挑选过程中还看到了阿里云香港、阿里云新加坡、 HostDare 等供应商,他们虽然也有低价、高带宽、高流量的 VPS ,但是却都有一个对我来说致命的弱点:不提供原生 IPv6 地址啊!必须走 HE 的隧道,这也是我忍痛选择魔方云的最主要的原因。

引用

转载自 Ubuntu 16.04下Shadowsocks服务器端安装及优化 – Penguin

前言

本文旨在提供简明的 Ubuntu 下安装 Shadowsocks 服务端的教程,并包括常用的优化:包括 BBR、TCP Fast Open以及吞吐量优化。

文中使用了 Ubuntu 16.04 及之后的版本支持的 Systemd 管理 Shadowsocks 的启动与停止,显得更为便捷,但因此也仅适用于 Ubuntu 16.04 及之后的版本,基于 Python 3 ,支持 IPv6

文章测试的系统环境为最新的 Ubuntu 18.10

安装 Shadowsocks 服务端

安装 pip

本教程使用 Python 3 为载体,因 Python 3 对应的包管理器 pip3 并未预装,首先安装 pip3

sudo apt install python3-pip

如果提示 Unable to locate package ,很可能是系统刚配置完毕,软件源还来不及更新,所以无法找到包,一般会在新镜像配置完毕后短时间内出现,这个时候只需要输入:

sudo apt-get update

再执行安装 pip3 的指令就可以了

安装 Shadowsocks

因 Shadowsocks 作者不再维护 pip 中的 Shadowsocks (定格在了2.8.2),我们使用下面的命令来安装最新版的 Shadowsocks :

pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip

安装完成后可以使用下面这个命令查看 Shadowsocks 版本:

sudo ssserver --version

目前版本会显示 “Shadowsocks 3.0.0” 。

创建配置文件

创建 Shadowsocks 配置文件所在文件夹:

sudo mkdir /etc/shadowsocks

然后创建配置文件,这一步可以用常用的编辑器 nano 完成,也可以用 WinSCP 连接服务器手动创建 (个人更喜欢后者一点,因为修改起来比较方便),以下为 nano 创建文件的命令 :

sudo nano /etc/shadowsocks/config.json

如果是单用户 (单端口) 使用,复制粘贴如下内容 (注意修改密码) :

{
    "server":"::",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"用户的密码",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

如果是多用户 (单端口) 使用,复制粘贴如下内容 (注意修改密码,并且注意端口冲突) :

{
	"server":"::",
	"local_address": "127.0.0.1",
	"local_port":1080,
	"port_password":
	{
		"8388":"端口A的密码",
		"9000":"端口B的密码",
		"9001":"端口C的密码"
	},
	"timeout":300,
	"method":"aes-256-cfb",
	"fast_open": false
}

如果使用了 nano 编辑,按 Ctrl + O 保存文件,下方会提示确认文件位置,按 回车 写入文件,按 Ctrl + X 退出。

配置 Systemd 管理 Shadowsocks

新建 Shadowsocks 管理文件 (这一步没有什么需要修改的,可以直接用 nano 完成) :

sudo nano /etc/systemd/system/shadowsocks-server.service

复制粘贴如下内容:

[Unit]
Description=Shadowsocks Server
After=network.target

[Service]
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/config.json
Restart=on-abort

[Install]
WantedBy=multi-user.target

Ctrl + O 保存文件。 回车 写入, Ctrl + X 退出。

启动 Shadowsocks :

sudo systemctl start shadowsocks-server

设置开机启动 Shadowsocks :

sudo systemctl enable shadowsocks-server

到这里, Shadowsock 服务器端的基本配置就已经全部完成了!

客户端测试连接

在你的 Shadowsocks 客户端添加服务器,地址填写 你的 VPS 的地址,端口号默认为 8388 ,加密方法默认为 aes-256-cfb ,密码为 你设置的密码。然后设置客户端使用全局模式,浏览器登录 Google 应该就能打开了。

优化

服务端优化尤其 BBR ,对 IPv4 的连接可以说有奇效,通常能使速度大幅提升。这部分属于进阶操作,但是也非常简单。

开启 BBR

BBRGoogle 最新开发的 TCP 拥塞控制算法,目前有着很好的带宽提升效果。

版本检测

BBRLinux kernel 4.9 引入,所以首先要检查服务器的 kernel 版本:

uname -r

如果其显示版本在 4.9.0 以下,则需要升级 Linux 内核 (建议直接更新系统) 。如果和本文一样使用最新的 Ubuntu 18.10 的话,会显示 4.18.0-10-generic。

开启 BBR

检查是否有 BBR

lsmod | grep bbr

如果结果中没有 tcp_bbr (大部分服务器都没有设置,目前使用过的只有 Vultr 的 VPS 会显示),则先执行:

modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf

确认出现 tcp_bbr 之后执行:

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 ,则开启 BBR 成功。

成功开启 BBR 的情况

优化吞吐量

新建配置文件:

sudo nano /etc/sysctl.d/local.conf

复制粘贴如下内容:

# max open files
fs.file-max = 51200
# max read buffer
net.core.rmem_max = 67108864
# max write buffer
net.core.wmem_max = 67108864
# default read buffer
net.core.rmem_default = 65536
# default write buffer
net.core.wmem_default = 65536
# max processor input queue
net.core.netdev_max_backlog = 4096
# max backlog
net.core.somaxconn = 4096

# resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
# reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
# turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
# short FIN timeout
net.ipv4.tcp_fin_timeout = 30
# short keepalive time
net.ipv4.tcp_keepalive_time = 1200
# outbound port range
net.ipv4.ip_local_port_range = 10000 65000
# max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
# max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
# turn on TCP Fast Open on both client and server side
net.ipv4.tcp_fastopen = 3
# TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
# turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1

net.ipv4.tcp_congestion_control = bbr

保存指令并使其生效:

sysctl --system

编辑之前的 shadowsocks-server.service 文件:

sudo nano /etc/systemd/system/shadowsocks-server.service

ExecStart 前插入一行,内容为:

ExecStartPre=/bin/sh -c 'ulimit -n 51200'

即修改后的 shadowsocks-server.service 内容如图所示:

shadowsocks-server.service 文件内容

Ctrl + O 保存文件。 回车 写入, Ctrl + X 退出。

重载 shadowsocks-server.service

sudo systemctl daemon-reload

重启 Shadowsocks

sudo systemctl restart shadowsocks-server

吞吐量优化就完成了。

开启 TCP Fast Open

TCP Fast Open 可以降低 Shadowsocks 服务器和客户端的延迟。实际上在上一步已经开启了 TCP Fast Open ,现在只需要在 Shadowsock s配置中启用 TCP Fast Open

nanoWinSCP 编辑 config.json

sudo nano /etc/shadowsocks/config.json

fast_open 的值由 false 修改为 true 。 Ctrl + O 保存文件。 回车 写入, Ctrl + X 退出。

重启 Shadowsocks

sudo systemctl restart shadowsocks-server

到这里, Shadowsocks 服务器端的优化就全部完成了!

机场除雾指南(。

如果某一天 Shadoowsocks 突然不能用了,那八成就是被GFW拦截了 。被拦截的原因就是电信运营商探测出了你的流量然后屏蔽了,诱因可能有以下几点:

  1. 使用的人很多(多地点连接)
  2. 特殊时期(8 * 8)
  3. 美国的 IP 容易被和谐
  4. 美国便宜服务商的 IP 尤其容易被和谐

判断是否被屏蔽

判断和谐很简单,直接 Telnet 一下端口就可以了。利用 ping.pe 这个网站可以很轻松的测试你的端口是否被屏蔽。点下面这个链接可以看看我的 Digital Ocean 服务器的 8388 端口有没有被屏蔽:

http://port.ping.pe/你的服务器地址:你的端口

测试结果如下图,应该还是正常的。如果红圈内即国内节点全部不通的话,你知道我想说什么233

ping.pe 测试结果
ping.pe 测试结果

真的挂了怎么办

首先判断你到底是被封端口还是被封 IP 了,封端口的话直接换端口即可,封 IP 的话也是换 IP 就可以了。

现在大部分国外 VPS 提供商都可以换IP,只需要 1-2 美元,不用多想直接换。但是在特殊时期或者遇到一些被玩坏的提供商,你可能换好几个 IP 还是被墙的,这个时候你只能要么继续碰运气,要么索性换提供商。

预算在 5$ / month 以上的话可以尝试一下 CN2 GIA 线路,高质量线路不但能带来更好的体验,还能降低被封的概率;或者换地区,比如香港的 VPS,延迟低而且不容易被封。要注意一点,高质量的线路换 IP 也会贵很多,一般换一次在 5 美元左右。

原文参考

网络环境

网络:华北电力大学校园网 IPv4/IPv6 双栈,IPv4/IPv6 地址皆为 DHCP

路由器:小米路由器3G, MediaTek MT7621芯片

系统版本: OpenWrt 18.06.1, 4.14.63内核

准备

一个刷写了 OpenWrt 系统的路由器。极路由和小米路由器3G都是不错的选择,其他路由器只要 CPU 在 OpenWrt 的硬件支持列表内,理论上都可以刷写。可以点击这里查看 OpenWrt 支持的硬件并下载相应的固件。

一个 IPv6 网络。使用 NAT66 的好处就在于,无论你的上端网关是用 DHCPv6 还是 SLAAC 亦或静态地址,只要你有 IPv6 地址,哪怕你分到了一个 /128 的 IPv6 地址,你也能组一个子网。

步骤

1.安装 ip6tables 和 kmod-ipt-nat6

官方版本的 OpenWrt 已经集成了ip6tables,所以执行以下安装命令时会提示“
ip6tables 已存在于root中”

opkg update
opkg install ip6tables kmod-ipt-nat6

opkg update 是每次安装软件前必需的步骤,作用是下载仓库里的软件包信息,每次重启后都必须执行,否则很大概率找不到软件。

2.更改 ULA-Prefix

在 LuCI 中进入 Network -> Interfaces ,你能看到页面下方 Global network options 中的 IPv6 ULA-Prefix (IPv6 ULA 前缀),默认情况下这是一段随机生成的 fd 开头的48位前缀,例如:fde4:8dba:82e1::1/48

LuCI 界面 IPv6 ULA-Prefix

LuCI 界面 IPv6 ULA-Prefix

你只需要把第一位的 f 改为 d ,例如下图,这一步就完成了!具体原因在下面,可以稍后再看。

LuCI 界面 IPv6 ULA-Prefix

LuCI 界面 IPv6 ULA-Prefix

fd00::/8 地址块中的地址是唯一本地地址,这个地址类似于 IPv4 中的私有地址(最典型的例子:192.168.1.123)。如果 Windows 电脑分配到这个地址不会有什么问题,但是 Android 手机如果被分配到唯一本地地址,则所有的网络请求会优先解析 IPv4。这样的话,你只能直接访问 IPv6 的 IP 地址,所有的域名解析都会优先解析为 IPv4 的地址。即使你连接了 IPv6 的 ShadowSocks VPN ,也无法改善这个问题。

为了避免这个情况,只好放弃 ULA 地址重新设置,但是为了避免地址冲突,我们需要根据 IANA 的 IPv6 分配表 选一个没有被使用的地址。可以很容易地发现 d000::/4 就是一段未分配的前缀,而且 OpenWrt 官方也推荐了这个方法,就是使用前16位为 dxxx 形式的 ULA 前缀,例如我所使用的 fde4:8dba:82e1::1/48。

3.更改 /etc/config/dhcp 文件

将 /etc/config/dhcp 文件中的 config dhcp ‘lan’ 下面的内容更改为:

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

或者在  LuCI 中将 Network -> Interfaces ->  LAN -> DHCP Server -> IPv6 Settings 中的 Router Advertisement-Service 设为 server modeDHCPv6-Service 设为 server modeNDP-Proxy 设为 disabled  。这两步操作等价。

LuCI 界面 IPv6 Settings
LuCI 界面 IPv6 Settings

顺便可以将 DNS 设置为 Google IPv6 DNS: 2001:4860:4860::8888

或者我国下一代互联网国家工程中心的公共 DNS: 240c::6666

4.更改 /etc/firewall.user 文件

假设 WAN 对应的接口为 eth0.2 ,则在 /etc/firewall.user 文件中添加以下内容:

ip6tables -t nat -A POSTROUTING -o eth0.2 -j MASQUERADE

5.查找当前网络的 IPv6 网关地址

在 LuCI 的 Network -> Diagnostics 页面,
Traceroute 旁边的下拉框选择 IPv6,执行 Traceroute 操作,获取目前网络的 IPv6 网关地址(即第一跳的地址),假定为 2001:da8:20c:1a06::1 

一般情况下,如果在 Network -> Interfaces 界面看到自己 WAN6 接口的 IPv6 地址是 /64 的话,直接取前64位,最后4位取1,即可得到目前的 IPv6 网关地址。当然最好还是 Traceroute 测一下。

LuCI 界面 Diagnostics
LuCI 界面 Diagnostics

6.为路由器添加默认网关

使用 route -A inet6 add default gw 2001:da8:20c:1a06::1  命令,为路由器添加默认网关。这一步非常重要,不进行的话电脑能获取到 IPv6 地址但是会无法上网。完成之后,连接到路由器的计算机应该就可以正常访问 IPv6 网站了。

但是这条指令是一次性的,每次重启之后都必须执行。 如果要做到路由器开机自动添加该网关,需要在 /etc/hotplug.d/iface/ 下新建一个文件 90-ipv6 ,给予744可执行权限:

90-ipv6 权限
90-ipv6 权限

文件内容如下:

#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
route -A inet6 add default gw 2001:da8:20c:1a06::1

注意替换自己的网关

7.Well Done!

最后重启一下路由器,所有的工作就完成了!你可以访问 test-ipv6.com 网站来确认自己是否已经正确接入了 IPv6 网络。

想说的话

其实 IPv6 NAT 配置起来非常简单,但是毕竟 NAT 有违 IPv6 的本意,所以之前在成功 NAT 了以后又开始尝试 IPv6 Passthrough (IPv6 穿透),即将路由器改造成 IPv4 路由器 + IPv6 交换机。但是将路由器重置十几遍后才发觉貌似不可行……偶然一次和网信办的工作人员交流了一下,了解到 IPv6 校园网虽然不计费不限速,但是也需要认证……只能胃疼地继续用 NAT66 了……

遇到的第二个问题就是 步骤2 中的前缀问题,尽管我知道 Android 有只支持 SLAAC 、无法手动配置 IPv6 DNS 等等许多还算影响不大的问题,但是前缀问题真的是导致我又重置了七八遍路由器,最后在引用的知乎专栏中才了解到了解决办法,也怪自己没有认真看官方文档。

当然,这个方法只推荐于 IPv6 需要认证,同时宿舍用路由器上网的大学教育网环境。如果 IPv6 无需认证,或者想在家中使用 IPv6 ,应该直接使用 IPv6 Passthrough (IPv6 穿透) 获取一个 2xxx 开头的全球单播地址,这样做不仅提高网络通信效率,还符合 IPv6 的初衷。

引用&资料

加号+、插入符^、百分比符号%、上划线~及圆括号()都具有特殊意义。如果要输入上述任何一个字符,要将它放在大括号{}当中。例如,要输入正号,可用 {+} 表示。方括号[]并不具有特殊意义,但也必须将它们放在大括号中。

为了在按下按键时指定那些不显示的字符,例如 ENTER 或 TAB 以及那些表示动作而非字符的按键,需要使用代码:

按键 代码
BACKSPACE(退格) {BACKSPACE}, {BS}, 或 {BKSP}
BREAK {BREAK}
CAPS LOCK(大写锁定) {CAPSLOCK}
DEL or DELETE(删除) {DELETE} 或 {DEL}
UP ARROW(上方向键) {UP}
DOWN ARROW(下方向键) {DOWN}
LEFT ARROW(左方向键) {LEFT}
RIGHT ARROW(右方向键) {RIGHT}
END {END}
ENTER(回车) {ENTER}或 ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} 或 {INS}
NUM LOCK(小键盘) {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F1}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码:

按键 代码
Shift +
Ctrl ^
Alt %

更多举例:

^C          //Ctrl+C 组合键
+C          //Shift+C 组合键
%C          //Alt+C 组合键
+(AX)       //Shift+A+X 组合键
+AX         //Shift+A 组合键,之后按X键
{LEFT 5}    //按←键 5次
{h 10}      //按h键 10次
汉字        //模拟输入"汉字"2个字