自从开始访问真正的互联网,VPN 和 Shadowsocks 便像是空气一样,毫不显眼,但是一旦失效,我就几乎活不下去。最记得有一次旅行途中,手机上的 VPN 失效无法启动,然后我就度过了一次漫长的,与互联网隔绝的旅行。
如果是 Shadowsocks 重度用户,几乎都会有这样一个体验,在桌面环境使用时,经常遇到不遵循系统代理的软件,在 Windows 上面更是严重,npm
和 git
等软件几乎都需要单独配置。这个问题可以通过在路由器使用 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