自由猫

UBNT ER-X 刷 Open-WRT 并作为透明网关

Published: (Updated: ) in 技巧, , , by .

一直想在家庭网络中增加一个透明网关,达到让网络中所有设备在访问国外网站时自动使用代理的功能。家中本身有一个 3215U + 4 千兆网口的工控机,但嫌弃其电源实在占位置所以没启用。最近才觉察到 UniFi Switch 8 POE 150W 的网口是可以自定义 PoE+ 或 24V Passive PoE 供电的,因为 ER-X 本身体积就小,又支持 24V Passive PoE 供电,这样就可以节省充电器和充电线,仅用一根网线即可供电和数据传输,简约而不简单。

一、编译 ER-X Open-WRT 固件

因为官方 Open-WRT 的固件内容比较素,缺乏必备的 ShadowsocksR Plus 等插件,所以我采用 Lean 的 Open-WRT 固件自行编译。编译此固件是需要编译机可无障碍访问国外部分网站,在虚拟机上使用:

$ export all_proxy="socks5://your.proxy:1080"

尝试编译,依然失败,提示有文件无法下载。所以我最终采用在一台 Google Cloud Engine 机器上编译。编译时按照指引,在 make menuconfig 时:

  1. Target System 选择 MediaTek Ralink MIPS
  2. Subtarget 选择 MT7621 based boards
  3. Target Profile 选择 EdgeRouter X

其余选项不需要动,除非你明白为什么需要动。其他默认参数已经包含了 ShadowsocksR Plus、Adbyby Plus+、KMS服务器等常用功能。

在最近的更新后,Lean 源码中删除了 SSR Plus + 功能模块。请参考此文做一些修改:解决 Lean 固件编译后无 SSR-Plus + 的问题

编译好的固件位于 /lede/bin/targets/ramips/mt7621 目录下。可使用以下语句将其下载到本地:

# 自行修改 username、ip、/path/to/lede、/path/to/destination
# kernel
$ scp username@ip:/path/to/lede/bin/targets/ramips/mt7621/openwrt-ramips-mt7621-ubiquiti_edgerouterx-initramfs-kerne.bin /path/to/destination
# firmware
$ scp username@ip:/path/to/lede/bin/targets/ramips/mt7621/openwrt-ramips-mt7621-ubiquiti_edgerouterx-squashfs-sysupgrade.bin /path/to/destination

二、将 Open-WRT 刷入 ER-X

参考 Open-WRT 官网的教程,很容易即可将 Open-WRT 刷入ER-X。主要需要两步,一是将官方固件刷写为 Open-WRT 的 Kernel,我称之为过渡固件;而是从过渡固件刷写为正式固件。

#上传并刷写过渡固件,假设 ER-X IP 为 192.168.1.1,自行替换 /path/to
$ scp /path/to/openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin [email protected]:/tmp
$ ssh [email protected]
ubnt@ubnt:~$ cd /tmp
ubnt@ubnt:/tmp$ add system image openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin
Checking upgrade image…Done
Preparing to upgrade…Done
Copying upgrade image…/usr/bin/ubnt-upgrade: line 509: [: too many arguments
Done
Removing old image…Done
Checking upgrade image…Done
Copying config data…Done
Finishing upgrade…Done
Upgrade completed
ubnt@ubnt:/tmp$ show system image
The system currently has the following image(s) installed:
ramips Bleeding Edge r49395 (default boot)
v1.7.1.4821926.151103.1114 (running image)
A reboot is needed to boot default image

如果刷写时,出现以下错误提示:

ubnt@ubnt:/tmp$ add system image openwrt-ramips-mt7621-ubnt-erx-initramfs-kernel.bin
Checking upgrade image…Upgrade image does not support the device. Upgrade failed.

则需要使用老版本的 Kenel 文件刷入,步骤一样。

当过渡固件刷入后,输入reboot,重启 ER-X,等待重启完成后,可使用 SSH 重新登陆到 ER-X中。此时 ER-X 中已经是 Open-WRT 过渡固件,所以需要使用 root 用户登录。

使用 SCP 上传正式固件到 ER-X 中,再登陆 ER-X。

$ scp /path/to/openwrt-ramips-mt7621-ubiquiti_edgerouterx-squashfs-sysupgrade.bin [email protected]:/tmp
$ ssh [email protected]

进入上传的正式版固件所在的目录,并进行刷写操作。

$ cd /tmp
$ sysupgrade openwrt-ramips-mt7621-ubiquiti_edgerouterx-squashfs-sysupgrade.bin

等待一会儿,正式固件即可刷入成功并自动重启。重启完成后,即可登陆 Open-WRT 的 Web 管理界面。因为我们刷入的是 Lean 制作的固件,所以登陆账户为 root,密码为 password,可登陆后自行修改。

三、设置 ER-X 为透明网关

设置为透明网关的目的,是让局域网内其他机器能自动加速国外网站的访问,无需特殊设置。其基本操作,是在 Open-WRT 上建立加速服务,由主路由器(假设为 192.168.1.1)将 Open-WRT 的地址下发到局域网中的所有设备上。

第一步,先要将 Open-WRT 设置为局域网内的网关。

选取一个局域网内未使用的 IP 地址,将 Open-WRT 的 Lan 口设置为此静态地址,比如:192.168.1.2,子网掩码:255.255.255.0;网关:192.168.1.1,DNS 设置为192.168.1.1。由于我们依旧使用主路由器做 DHCP,所以需要将 Lan 的 DHCP 服务器关掉(忽略此接口)。然后将 Open-WRT 的 Lan 口连接到交换机或路由器的 Lan 口,如果可以的话,在路由器端也将此 Open-WRT 设备的 IP 设置为固定IP(192.168.1.2)。

第二步,将主路由器的网关设置为 Open-WRT(192.168.1.2)。

以 Ubnt Unifi 控制器为例,在 Settings > Networks > LAN > DHCP Controls 中,将 DHCP Gateway IP 设置为 Open-WRT 的 IP 192.168.1.2。

为测试是否正常,我们将电脑的网络断开重新连接,观察网关 IP 是否已自动获取为 Open-WRT 的 IP,并测试是否能正常上网。如果网关 IP 已修改,且能正常上网,则可以进行下一步。

第三步,在 Open-WRT 上开启国外网站加速功能。

进入 Open-WRT > 服务 > ShadowsocksR Plus + > 服务器节点 中,添加节点或订阅(订阅需更新),然后进入同页面的的「客户端」中,选择一个节点,点击「保存&应用」,待页面显示「ShadowsocksR Plus+ 运行中」,即可使用电脑测试是否能正常网络加速。

Comments

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注