openwrt 18.06.1 配置科学上网

openwrt 安装不缀述,网上教程很多,可以刷在路由器上、小主机上、甚至VirtualBox的虚拟机里。本文假定openwrt已经设置好并上网,电脑连接路由器LAN口。

1.安装 shadowsocks-libev 相关的包

opkg update (多运行几次,我遇到过第一次update后找不到shadowsocks相关的包)

opkg install shadowsocks-libev-config shadowsocks-libev-ss-local shadowsocks-libev-ss-redir shadowsocks-libev-ss-rules shadowsocks-libev-ss-tunnel luci-app-shadowsocks-libev

2. 基础配置

进入openwrt web配置界面,选择 Service->shadowsocks-libev

点击 Remote Servers, 里面已经默认配置一个服务器 sss0,修改地址,端口,密码,加密方式,最重要的,将disabled的勾去掉,点击 save&apply 按钮。

再点击 Local Instances, 点击 ss-local.cfgXXXXX (XXX为随机数字)条目对应的Disabled 按钮,将其变成 Enabled,点击 Save & Apply。配置保存生效以后, ss-local.cfgXXXX 条目的Running 状态由no变为yes。这时,路由器上已经运行一个SOCKS5服务器,端口1080。设置电脑浏览器的代理服务器为路由器地址,端口1080,尝试访问谷歌,如果成功则说明ss客户端在openwrt上工作一切正常。

接着要测试iptables+ss-redir自动转发代理(透明代理)的功能,在Local Instances中,将ss-redir.hi 设为Enabled。再点击 Redir Rules, Disabled勾去掉,点击Destination Settings,dst default 由bypass改为 forward。点击Save&Apply 使配置生效。将电脑浏览器的代理设置取消,访问谷歌,如果成功,则说明无条件透明代理设置成功。所有数据包都由路由器转发到ss服务器了。

3. 进阶配置

上面最后配置的透明代理将全部流量都转发到远端SS服务器,显然太浪费流量,而且国内的网站去国外转一圈效率也很低。因此我们需要在路由器上识别国内国外流量,区别对待。

1.首先将 Destination Settings中的dst forward 设为 bypass。

2. 将opkg列表更新由http 改为https, http存在更新不全的情况,可能是GFW搞鬼

opkg install libustream-mbedtls (如果提示找不到,opkg update 多运行几次)

sed -i s/http:/https:/g /etc/opkg/distfeeds.conf

opkg update

3. 安装各种依赖包

opkg remove dnsmasq

opkg install dnsmasq-full

opkg install coreutils-base64 curl ca-certificates ca-bundle

4.

==================

步骤太多太烦,写了一键脚本,执行就好:

cd /tmp && opkg update && opkg install curl ca-bundle && curl -s -L https://github.com/ysy/ss/raw/master/openwrt_tproxy.tgz -ot.tgz && tar x -z -f t.tgz && cd openwrt_tproxy && ./setup.sh