怎样在亚马逊 AWS 上申请12个月免费的 EC2

首先需要准备的物资:
1. 一张 Visa 或者 Master 的信用卡(说银联也可以)
2. 一个电子邮件(这是你 AWS 上的身份,每年可以换不同的邮件申请免费 EC2 )
3. 一个能接收验证码的手机(废话)

账号申请时,会问 Professional 还是 Personal,就选择 Personal 好了。然后填写个人地址,手机号码,然后填写信用卡号码,预扣1美元校验信用卡有效性。然后,信用卡银行会往你在银行登记的手机号码自动语音电话,让你确认境外交易。账号就算创建好了, 也会收到邮件提示。但是屏幕提示是需要24小时以内才会生效。也就是说,没有正式生效之前,是不可以开实例的。大概等了1-2个小时以后,就可以去开实例了。

开实例之前, 要首先选择 Region ,这个非常重要,一般选亚洲的,切换不同的区域, URL 的网址也会不一样,你 ping URL 里的域名,选择延迟比较小的就可以了。 我们就选择东京(Tokyo) 的区域,香港的区域是需要另外 Enable 的,懒得去 Enable 以免生成另外的费用。

之后就选择操作系统类型,我们选 Ubuntu 1804 普通版本,选 Free Tier 的 1G 内存, 1vCPU,8GB SSD*,然后把公网IP 地址和KeyPair 保存下来,等会儿要用到。接下来点击其中的 Security Group,为 Inbound Rule 添加tcp/udp 端口,默认只有 22 端口,根据自己的实际情况,开通对应的 tcp/udp 端口。

这样子一个基本的免费 EC2 申请就算完成了。

高级一点的,我们可以通过 aws-cli ,也就是在命令行下对实例进行操作。在右上角个人昵称的地方下拉,选择 My Security Credentials,然后创建 Access Key。把 Key 保存下来,在 aws-cli 就可以使用的。

要登录 Linux EC2 主机,我们需要 Windows 上安装 ssh 客户端,或者通过 Linux 主机登录,我们在 Windows 上安装了 Cygwin ,可以直接通过其中的 ssh 命令登录 EC2. $ ssh -i tokyo.pem ubuntu@52.195.x.x ,这样子就登录了, 然后 sudo -s 就可以成为超级用户,为所欲为了。

针对高级用户,接下来,我们把前面下载到的一个 Access Key 的 csv 文件记录下来。然后用以下命令配置好 profile,注意后面的 profile name “free_ec2” 可以随便取。

$ aws configure --profile=free_ec2

根据 CSV 里的 keyID 和 keySecret 粘贴,输入区域名:ap-northeast-1,就可以在 $HOME/.aws 下看到生成或者添加的 config 和 credentials 两个文件了。 我们写了一个简单的脚本,可以监控实例是否正常运行,如果有不正常的情况会报错。

#!/bin/bash
profiles=$(sed -n -e 's/\[\(.*\)\]/\1/p' credentials)
[ -z "$profiles" ] && exit 0
for P in $profiles; do
STATUS=$(aws ec2 describe-instance-status --profile $P|jq ".InstanceStatuses"|jq ".[]"|jq -r ".InstanceState.Name,.SystemStatus.Status"|paste -d ' ' - -)
[ "${STATUS}" != "running ok" ] && echo "Error: Something Wrong with AWS Instance! [$STATUS]"
done
$ vim /etc/hostanme
$ sudo apt upgrade
$ sudo reboot
$ sudo apt install kcptun shadowsocks-libev*
$ sudo snap install v2ray (this won't work due to apparmor issue)

斐讯 K2 的不死鸟刷机-科学上网和广告屏蔽

无线路由器刷机的核心需求是科学上网和广告屏蔽,同时一定是为局域网内,整个家庭或者小型办公室使用。我们用 SS-libev + polipo + wpad 的方案实现了客户端的无感“上网”

心急要吃热豆腐的,请直接拉到文章底部,看大总结

不死鸟指的是 Breed Boot-Loader 引导固件,和我们要刷机的操作系统固件不是同一个东西。本文假定你已经刷好了 Breed,就是下面的这个截屏。

假定你已经刷好了 Breed 不死鸟,然后你就可以无限制的刷各种操作系统,不喜欢老毛子就刷 OpenWrt/LEDE,也可以刷梅林。 系统启动不了,就换一个再刷。

刷操作系统的办法很简单,把 PC 电脑的网线直接连接 K2 的 LAN 口, K2 的 WAN 口连接到能上网的路由器的 LAN 口(也可以不连),PC 电脑的 Wi-Fi 连接能上网的 SID,如果 DHCP 有冲突的话(一般肯定会冲突,PC 的有线会拿到 192.168.1.2,无线会拿到 192.168.1.3),可以设置 Wi-Fi 为能上网的 VLAN 里的静态 IP,设置好网关和 DNS ,保证刷机中的电脑能同时上网。当然也要保证能上网的无线环境里使用的不是 192.168.1.x 的网段。

斐讯 K2 是 MT7620A 的 CPU,主频是 580MHz,内存是 64M,Flash (可以理解为是电子硬盘)只有 8M。也就是说,我们要把操作系统放到只有 8M 的 Flash 里。

现在是选择合适的操作系统,刷机了,点 “固件更新”,选择“固件”,从 PC 上选择固件的文件。


我们选择老毛子的固件: RT-AC54U-GPIO-1-PSG1218-64M_3.4.3.9-099.trx

刷新完成后,去 Windows 的网络,查看有线网卡拿到的 IP 地址,如果没有拿到,可以重新插拔网线或者重启 K2,如果还是没有拿到 IP 地址,那就重新刷(不用怕)。你总是可以拿到 192.168.1.2 的 IP 地址的。

譬如刷的时候选择了错误的 Flash 布局(应该选公版),刷完后,PC 报告网线没有连接,说明 K2 根本就没有启动,不用怕, 重新插入电源线的同时按住 reset 10秒左右放手,192.168.1.2 又回来了。

我们换一个官方的 OpenWrt Snapshot 版本刷一下,固件文件是 openwrt-ramips-mt7620-phicomm_psg1218a-squashfs-sysupgrade.bin

刷完后,因为我们刷的是 snapshot 版本,所以不带 web 界面,我们只能 ssh root@192.168.1.1 (没有密码),就可以进入 OpenWrt 的 console 了。 用 opkg 命令就可以安装 web 界面

OpenWrt Snapshot 版本 比较适合有一定 Linux 基础和网络基础的大咖玩,基本都是需要自己琢磨,自己定制,而且最坑的是 8M 的 Flash 实在太小,老毛子从内存里挖了空间给操作系统使用,把配置保存到NVRAM(掉电能保留),然后下次重启又从网上下载 /opt 下的内容,恢复配置,基本原理就是这样,都是为了解决只有 8M 的痛苦。

在详细阐述老毛子 Padavan 之前,我们刷一个梅林,其实是华硕的一个自定义版本,看下界面。 固件文件名:RT-ACK1_K2_3.0.0.4_380_8228-g3af35f9.trx,大小 6.18M

刷完梅林,PC 拿到的地址是 192.168.1.112,网关还是 192.168.1.1,我们在浏览器输入 http://192.168.1.1/ 就看到梅林的界面了:

如果这个时候 WAN 口连接了能上网的路由器的 LAN 口, K2 就能自动上网了, 连接在 K2 LAN口的 PC 自然也能通过有线上网了, 配置好密码和无线后,会自动检测到有新的固件,然后选择自动升级固件。也就是说 K2 是和华硕的 AC54U 是完全兼容的。

梅林的这个固件连 telnet 设置允许也报错,界面也没有 ssh 登录的设置,其实和普通的路由器没啥区别,不建议刷。

回头再说老毛子,刷完老毛子后,有线网卡拿到的是 192.168.123.x 的地址,网关是 192.168.123.1 ,在浏览器输入 192.168.123.1 ,弹出窗口输入用户名和密码都是 admin

真心讲,里面设置 SS 的界面太复杂。

由于我们的境外服务器开启了 kcptun,所以尝试把里面的 kcptun 打开,然后 SS 走 kcptun,发现小小的 64M 内存根本就不够用,就连 nslookup 也返回一些莫名其妙的地址。

可以说, 整体的老毛子固件在 K2 这台小机器上捉襟见肘,根本就无法有效的开启里面的诸多功能,特别是核心的 SS 功能(带 KCPTUN)。

在开启 Adguard Home 做广告屏蔽的时候,如果是 nslookup 一个屏蔽的域名, DNS 查询极其缓慢。 我们回头在 x86_64 的 Ubuntu 虚拟机平台上来评估 Adguard Home。 现在让我们把 K2 切换到一个旧的OpenWrt 固件,也就是刷机自带 Web 界面的固件。

我们去 OpenWrt 的硬件下载列表,搜索 PHICOMM ,K2 PSG1218 就是我们要找的,写稿时的最新版本是 18.06.5 。刷完以后,浏览器访问 192.168.1.1 ,用户名 root ,密码为空, 也可以命令行直接 ssh root@192.168.1.1 登录 OpenWrt 。

Web 界面是这样子的:

和老毛子不同,这里有另外一个坑就是根文件系统只有 3.8M 空余了,几乎不能安装什么大的软件包了。 如果要安装广告屏蔽,要安装 VPN ,要安装科学上网,几乎是不可能的事情。

但是,中文界面总是需要安装的,运行:# opkg update; opkg install luci-i18n-base-zh-cn,刷新 Web 界面,我们就看到中文了。如果还没有的话,去顶上 System 菜单,下拉,选择 System,选择 Languange ,看看是否有中文。

搞完了以上的事情, 只是一个基本的无线路由器的设置,和上面提到的梅林以及其他任何不能刷机的路由器买来的功能是差不多的。只不过多了能直接 ssh 进入操作系统修改。

最核心的就是要科学上网,本身就要好多种不同的技术,从最原始的 SS 版本, 到国人后来开发的 SSR (加了混淆),到一个 SS-libev(适合嵌入式,例如路由器)的版本,到后来 KCPTUN 底层 UDP 协议加速,到其他各种加速方案,到后来V2RAY 用 vmess 协议。但是盒子太小,各种进阶方案对内存的要求太大。

让我们先从相对比较小占用资源的 libev-local 开始,运行
# opkg install shadowsocks-libev-ss-local luci-app-shadowsocks-libev

安装完以上两个软件包后,我们还有 2.9M 的磁盘空间,刷新Web 页面,可以看到多出一个服务菜单,下拉以后可以看到 SS-libev 的配置。我们只安装了 ss-local,因此,我们就去配置 ss-local 这部分,先去 Remote Servers 添加墙外的服务器信息(墙外怎么搭 SS-libev 服务器就不展开了),千万不要忘记把那个“禁用”的勾去掉。保存并应用后去修改 “Local Instances”,其实啥也不用做,因为直接选默认就可以,也就是侦听在所有网口上的 1080 socks5 标准端口。启用这个 ‘local instance’。进入 Firefox 浏览器,选择 socks5 代理,配置 192.168.1.1 1080 端口,如果能访问 Google , 那就是科学上网成功了。 这个无线路由器后面的任意设备,只要设置好 socks5 代理服务就可以上网了。


以上介绍的是 SS-libev。 我们尝试一下 V2ray 。Github 上把这个 12M 的“大家伙” 下载到 PC 端,然后从 OpenWrt 上把文件 scp 到 /tmp 下, 尝试用 opkg install v2ray-core_4.21.3-1_mipsel_24kc.ipk , 显然由于根文件系统只剩余 2M,根本就是徒增烦恼!

接下来我们尝试安装 kcptun 的客户端,去 github 下载 mipsel_24kc 版本,2.39M,看上去还能放到我们的 Flash 里,但是安装到一半还是说磁盘空间不够啊!

接下来,我们尝试用ram-root 的一个工具,利用 NFS 服务器来扩充根文件系统
# opkg install kmod-fs-nfs kmod-fs-nfs-v4
配置好 /etc/ram-root/ram-root.cfg 里面的 NFS Server 信息

可以看到根文件系统有 10M 了, 我们就可以安装 kcptun 了。安装结束我们发现根文件系统使用了 6.8M,很明显这么大的一个东东是不可能全部放到 8M 的 Flash 里的。 因为在家庭环境里, 我们不可能去挂接一个 NFS 哪怕 CIFS 上一个 Windows Share 都不太可能,这就是为什么老毛子采用了 optware,从内存里挖出空间给 root,然后每次启动都要从网上重新下载一堆软件。

为了简化客户端需要设置 socks5 的步骤,我们安装一下 polipo 这个 socks5 转 http 的代理软件:
# opkg install polipo luci-app-polipo luci-i18n-polipo-zh-cn
刷新 K2 的 Web 界面,我们可以在服务下看到 polipo 的配置,配置上游服务器为 127.0.0.1:1080 保存并应用,我们去 Firefox 设置 http 代理为 192.168.1.1 8123 去掉原先设置的 SOCKS 代理配置

Polipo 的 Web 界面设置实际上是有问题的,我们需要手工做几步动作,上游服务器的配置是 socksParentProxy 和 socksProxyType,这个需要用 uci 命令或者直接编辑 /etc/config/polipo 配置文件解决。底下大总结里详细介绍。

然后打开 http 代理, 不能解决 DNS 解析被墙的服务器的问题,因此我们需要安装 DNS 加密服务:
# opkg install libustream-openssl dnscrypt-proxy luci-app-dnscrypt-proxy
安装完毕后,会自动配置 dnsmasq , 转发到 5353 端口。
这一步很关键,如果这一步搞错了, 会导致 K2 无法连接网络,因为 DNS 解析出错了, 其实你也可以手工修改 /etc/resolv.conf 文件, 把 nameserver 从 127.0.0.1 修改为譬如 114.114.114.114 即可恢复网络,后面重启路由, nameserver 会自动更新成 127.0.0.1 的。

我们去”系统”=》“启动项”把 dnsmasq 重启一下。

接下来我们添加一个 wpad ,就是 Web Proxy Auto Discovery,我们需要添加一条wpad 的主机名记录,指向 路由器的 LAN 地址,就是 192.168.1.1 ,然后把外部生成的一个 wpad.dat 文件拷贝到 /www 目录下,然后去 Firefox 或者 IE ,或者手机端 Wi-Fi 连接后,把代理修改成自动发现即可。

IE/Chrome 的配置:由于 uhttpd 不支持 mime type 的问题,这里的“自动检测设置”截屏是错的,在 K2 上无法使用。要使用下面的这个正确的截屏。

左侧为错误的截屏,正确的设置是下图

iPhone Wi-Fi 的配置:点击连接上的 Wi-Fi 的右边 i 那个标记,进入详情,拉到最底下,点击进入配置代理,把“关闭”,设置成“自动”,然后返回就可以。截图里的 IP 不是本演示的 IP ,请忽略。同样的因为 K2 上 uhttpd 原因,iOS 上配置自动代理,还需要输入 wpad.dat 文件的 URL.

那么这个 wpad.dat 文件怎么生成呢? 网络上有一个 Python 写的 genpac 的脚本,会自动下载 gfwlist ,然后生成符合要求的 proxy 代理 js 脚本。语法如下:
# genpac –pac-proxy ‘PROXY 192.168.1.1:8123; HTTPS 192.168.1.1:8123; SOCKS5 192.168.1.1:1080’ -o wpad.dat

其实 DNSCrypt-proxy 还有黑名单功能,能过滤广告和恶意网站。上面列出的一个专门为中国用户的项目比较好。运行其中的 .sh 脚本就能自动生成配置文件。

通过以上步骤,我们就把一台只有 8M Flash 的斐讯 K2 刷机成为具有科学上网,广告过滤核心功能的强大路由设备。

大总结

K2 甚至包括所有市面上 1000 元以下的无线路由器,基本只能涵盖50人以下的使用,K2 的能力不会超过 20人同时使用。所以基本上我们介绍的解决方案仅仅用于家庭和小企业的上网使用。对于几十人甚至上百人的企业的上网需求,我们可以采用高可靠的免费集群解决方案,把路由和代理等功能,可以通过 OpenWrt 或者 Ubuntu 或者其他 Linux/BSD 兼容的操作系统,为企业员工提供强大的,安全的,可靠的,带有广告稿屏蔽功能的网络连接,让企业员工专心工作,不为广告所打扰。

以上的步骤其实有点繁琐,还介绍了其他和 OpenWrt 不相关的一些内容。我们写了一个简单的部署脚本放到了github,希望能帮助到您。

上面提到的 polipo 的上游 socks5 服务器的配置,需要用 uci 命令来完成,我们都已经写在脚本里了。脚本本身都有比较详细的注释,刷机愉快!

后记:一些技术性的 Troubleshooting 的技巧。盒子上的工具都比较弱,不像 X86 的机器上,可以安装很强大的工具,但是一些基本的命令,我们还是需要了解的。

  • nslookup 是一个改装版,只有 nslookup 主机名 这个语法,用来检查盒子是否能解析域名
  • ps 最应该需要知道的查看进程的东东,不需要加任何参数就可以,其实 Web 端也可以看所有进程列表。dropbear 就是 sshd , odhcpd 就是搞 DHCP 的, uhttpd 就是 Web 界面, udhcpc 是盒子本身作为 DHCP 客户端,例如 PPPOE 拨号从ISP 处取地址, ntpd 是时间服务,就是对时间的, polipo 就是 http 代理, dnscrypt-proxy 就是 DNS加密的, dnsmasq 是最核心的做 DNS 解析的服务,并对 LAN 提供 DHCP 服务, ss-local 就是科学上网的进程,对 LAN 提供 SOCKS5 服务。
  • netstat -nlp 这个就是查看端口侦听情况的, 53 端口就是 dnsmasq , 5353 端口就是 dnscrypt-proxy 启动的, 8123 端口就是 polipo , 1080 端口就是科学上网

浏览器调试一定要使用 Firefox,可以先从 socks5 手工代理,看看 192.168.1.1 1080 时是否可以 Google,如果可以,说明科学上网已经成功,再配置自动代理,设置 URL, http://192.168.1.1/wpad.dat 看是否可以,如果可以,那就是成功了!

其他可能的错误就是 IPv6 的问题, 把客户端和网关上的 IPv6 都关闭看看。

另一种非常简单的挂梯子的办法

刚才 Mac 上安装 Proxychains-NG,看到官网介绍例子:

$ ssh -fN -D 4321 some.example.com
$ PROXYCHAINS_SOCKS5=4321 proxychains zsh

这可以说是非常简单了, 如果我们在一个小的路由器上,只要用 auto-ssh 代替以上的 ssh 命令, 那么就等于小路由上一直会有一个 socks5 的代理服务器,我们只要前端再挂一个 tinyproxy,转换成 http 代理,这个不要太简单啊!用什么这么复杂的 SS 了!

然后,用 genpac (pip intall genpac) 生成 wpad.dat , 放到路由的根目录下,在dnsmasq 里把路由器的主机名定义新昵称为 wpad。

浏览器上只要设置自动检测代理,就会自动下载这个 genpac 生成的 wpad.dat 文件,无感上网!