Implementation of Unblock-Youku function in Gateway Server 在网关服务器中实现unblockyouku功能。
Unblock Gateway 是一个帮助配置 Shadowsocks 回国代理分流的命令行小工具,实现通过网关服务器自动分流,将国内一些网站的访问通过 Shadowsocks 代理回国,用以解除这些网站的海外访问限制,其它流量则会正常直连不走回国代理。本Repo可以搭建在树莓派、任何一台局域网Linux机器,其他机器只需要设置该网关,或者通过路由器设置该网关。
分流规则提取自 Unblock Youku,Unblock Youku 的规则中一般只包含站点用于检测的地址 ,不包含实际音视频流的地址,因此大部分情况下音视频流可以直连不用走代理,这样可以避免音视频变慢,也可以有效节约代理服务器的流量。
本Repo大多数功能来自于unblockchn,感谢原作者。本Repo主要为了解决没有华硕梅林路由器,但仍然想让路由器下的所有设备都可以使用unblock youku的情况。
网关其实含义非常丰富,可以是树莓派,可以是家庭服务器,也可以是一台独立的PC,甚至还可以是PC上虚拟机。由于网关即为路由中的下一跳,所以局域网内所有的数据都会首先被发送到这台网关上,由它再来判断是直接发给目标地址,还是走ss。见参考
当然前提是你需要有一台位于国内的 Shadowsocks 服务器,在国内的路由器上部署 Shadowsocks 服务器端也是可行的。
-
从 Unblock Youku 的 urls.js 中提取分流规则。
-
根据分流规则生成 ipset 规则,将需要回国代理的 IP 地址加入 chn ipset。
-
添加 iptables 规则,将属于 chn ipset 的请求转发到 Shadowsocks 透明代理工具 ss-redir 的端口,通过 Shadowsocks 代理回国。
Unblock Gateway 自动化以上过程,提供了一键配置网关的命令和一些管理命令。
- 安装依赖程序:
# Shadowsocks 透明代理工具 ss-redir
$ sudo apt-get install shadowsocks-libev
- 安装 Unblock Gateway:
# 安装 Unblock Gateway
$ git clone https://github.com/glucee/unblock_youku_gateway.git
# 进入 Unblock Gateway 目录
$ cd unblock_youku_gateway
# 安装 Unblock Gateway 依赖
$ pip3 install -r requirements.txt
# 修改 Shadowsocks 服务器配置
$ vi default_config.py
# 一键配置
sudo python3 unblockgw.py setup
- 配置网关
安装完后需配置网关即可,见配置
$ sudo python3 unblockgw.py --help
usage: sudo python3 unblockgw.py router [-h] {status,on,off,check,renew,setup,create}
Unblock Gateway 网关命令:
status 查看代理状态
on 开启代理
off 关闭代理
check <URL/IP/域名> 检查 <URL/IP/域名> 是否走代理
renew 更新规则
setup [--no-ss] 一键配置网关 [--no-ss: 跳过配置 ss-redir]
create 仅生成 ipset 规则配置文件
positional arguments:
{status,on,off,check,renew,setup,create}
optional arguments:
-h, --help show this help message and exit
$ sudo python3 unblockgw.py setup
如果想要跳过配置 ss-redir,那么就加上 --no-ss 参数:
$ sudo python3 unblockgw.py setup --no-ss
至此,回国代理和自动分流就配置并开启好了。
可以访问下列地址以验证回国代理是否成功,如果显示 true
,就说明回国代理已生效:
$ sudo python3 unblockgw.py status
已开启
$ sudo python3 unblockgw.py off
关闭成功
$ sudo python3 unblockgw.py on
开启成功
$ sudo python3 unblockgw.py check http://ipservice.163.com/isFromMainland
59.111.19.7 走代理
$ sudo python3 unblockgw.py check https://google.com
216.58.193.78 不走代理
$ sudo python3 unblockgw.py check www.bilibili.com
148.153.45.166 走代理
$ sudo python3 unblockgw.py check 192.168.2.1
192.168.2.1 不走代理
$ sudo python3 unblockgw.py router renew
Unblock Gateway 在网关上默认定时每日 03:00 自动更新分流规则,及时跟进 Unblock Youku 规则的变化。
$ sudo python3 unblockgw.py create
生成配置文件成功
此命令让 Unblock Gateway 跳过配置网关,仅提取 Unblock Youku 的规则,在 configs
目录下生成相应的 ipset 规则配置文件。
除了 Unblock Gateway 自动生成的规则以外,如果你需要自定义一些 ipset 规则,可以通过修改 configs
目录下的规则模板文件 ipset.rules.tpl
来实现。
保留模板文件中的 {rules}
一行,其在生成规则时会被 Unblock Gateway 规则替换,然后在模板文件中添加你需要的规则,例如:
ipset.rules.tpl
{rules}
create blacklist hash:ip family inet hashsize 1024 maxelem 65536
add blacklist 103.31.6.5
add blacklist 208.73.51.100
运行更新规则命令来使自定义的规则生效:
$ python3 unblockgw.py renew
上面设置好之后, 修改 /etc/sysctl.conf, 取消注释: net.ipv4.ip_forward=1 执行命令使其生效 sysctl -p
如果你的网关服务器地址是192.168.1.XX,可以在路由器界面上配置网关为该地址,那么,所有连上该服务器的设备都会经过该网关服务器分流,也就自动使用了Unblock-Youku,注意DNS地址仍然采用之前的地址,或者使用8.8.8.8
如果想保存IPTABLE,用户可以安装iptables-persistent,这个软件可以保存IPTABLE的规则,并在开机启动后也不会丢失。 每次开机启动后,如果想确认服务器没有问题,可以试着使用sudo python3 unblockgw status检查一下。
感谢Unblockchn和Unblock-Youku作者