也许是世界上最小的便携式路由器

使用虚拟机虚拟 LEDE 路由器。

自从开始访问真正的互联网,VPN 和 Shadowsocks 便像是空气一样,毫不显眼,但是一旦失效,我就几乎活不下去。最记得有一次旅行途中,手机上的 VPN 失效无法启动,然后我就度过了一次漫长的,与互联网隔绝的旅行。

如果是 Shadowsocks 重度用户,几乎都会有这样一个体验,在桌面环境使用时,经常遇到不遵循系统代理的软件,在 Windows 上面更是严重,npmgit 等软件几乎都需要单独配置。这个问题可以通过在路由器使用 ss-redir 解决,但是一旦离开日常的办公环境,没法部署路由器,访问网络就又成了难题。几经折腾之下,我尝试使用虚拟机运行 LEDE ,通过修改宿主机的路由表,让虚拟机作为宿主机的路由器,这样便可以随身携带一台高性能的路由器了。

准备工作

部署环境

转换镜像

将下载好的 LEDE Firmware 转换成 VirtualBox 可用的磁盘文件。

gunzip lede-x86-64-combined-ext4.img.gz
VBoxManage convertfromraw --format VDI lede-x86-64-combined-ext4.img lede.vdi

设置网卡

添加一张 Host-only 的网卡,这张是负责和虚拟机的 LAN 网段进行通讯的。

任何一个内网 IP 均可,注意不要和等下设置的路由器 LAN 口 IP 冲突,网段尽量足够小,毕竟只有两台机器。

不需要开启 DHCP,因为我们使用的是静态地址,而且 LEDE 中有 dnsmasq 负责 DHCP。

添加桥接宿主机网卡的若干,数量取决于你是否需要多个 IP 均衡负载,这里需要创建虚拟机后完成。

配置虚拟机

配置虚拟机,一般来说 512M 的内存足够 LEDE 使用了,硬盘使用刚才转换的 VDI 文件。

如果你的宿主机单核性能比较弱,可以给虚拟机多个核心,据我所知 Shadowsocks 是可以通过 port reuse 来支持多线程的。

eth0 使用 Host-only 的网卡,其余网卡可以桥接宿主机的网卡。

VirtualBox 的 GUI 界面只支持配置 4 个网卡,使用 CLI 配置则可以添加最多 8 个网卡。

# VBoxManage modifyvm {vmname} --bridgeadapter{0-7} {interface}
VBoxManage modifyvm LEDE --bridgeadapter6 en5

配置 LEDE

开机进入 LEDE,使用 vim /etc/config/network 设置 LAN 口的静态地址。

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.100.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

使用 /etc/init.d/network restart 使配置生效,如果没有配置错误,此时在宿主机使用 ping 192.168.100.1 可以 ping 通虚拟机。

通过 passwd 设置 root 密码之后,可以使用 ssh [email protected] 从宿主机 SSH 进入虚拟机。

方便起见可以安装 luci 界面,opkg update && opkg install luci

可以通过 Web 方式访问 http://192.168.100.1,就像管理普通 OpenWrt 路由器一样虚拟机。

部署 Host-only 网络

修改宿主机路由表。

sudo route change default 192.168.100.1

此时默认路由已经是虚拟机。

可选操作

网络认证

例如校园网用户,可以使用 sysuh3c 之类的软件每一个端口进行认证,这类软件一般都支持指定网卡。

部署 MWAN3

如果你的网络对单个 IP 有限速,可以通过多个网卡获取多个地址,然后使用 MWAN3 进行负载均衡。

首先每个网卡都要能连接互联网,并且需要配置好网关跃点,这个数值可以随意。

在 MWAN3 的接口中添加需要负载均衡的接口,一般来说还可以通过 ping 来判断一个接口的可用性。

在成员添加接口,这里我们的比重都是一样的。

策略是负载均衡。

最后把我们的策略设置为默认。

可以看到三个网口都在线。

三个网口的权重都一样。

可以通过观察每个网卡的流量判断均衡负载是否生效。

这里是对比图,单个 IP 限速 1.2 MB/s,叠加前后对比。

Shadowsocks & ChinaDNS

解决 IP 封锁和 DNS 污染,可以参考这个网站

wget http://openwrt-dist.sourceforge.net/auto_install_lede.sh
chmod +x auto_install_lede.sh
./auto_install_lede.sh

Koolproxy 去广告

解决广告问题,可以参考这个网站

一些自动化脚本

VBoxManage startvm --type headless LEDE
VBoxManage controlvm LEDE poweroff

将虚拟机以无 GUI 界面的方式运行。

Known issues

桥接宿主机无线网卡获取不到 IP 地址

Bridging to a wireless interface is done differently from bridging to a wired interface, because most wireless adapters do not support promiscuous mode.1