编译安装路由器用的Privoxy 3.0.28(华硕RT-AC88U,原版梅林384.15)

Privoxy有什么特殊之处?

  • 支持和SOCKS/HTTP代理的级联。这个功能轻松将SOCKS转为HTTP,当然也可以和某些不可名之软件配合形成级联(说出名字会导致本帖子根本发不出来)。
  • 支持强大的自定义过滤规则,实现类似浏览器PAC脚本的功能实在是小意思,可以指定访问某些URL走特定的线路。

下面是编译Privoxy的笔记,包括在路由器上本地编译、在Ubuntu上交叉编译两种方式,二选一,爱用哪种用哪种。

在路由器上本地编译

安装编译工具

这主要是仰仗Entware中的gcc包。先安装好Entware,再从Entware的源安装编译工具。

opkg install autoconf gcc coreutils-groups zlib-dev automake libtoolbin cmake unzip curl

以下都假定在路由器的外挂硬盘目录下操作(取名为WORKHOME),因为root用户的默认主目录下空间小,而且易失,重启就没了。

export WORKHOME=/tmp/mnt/WD12T/home

编译PCRE正则式库

Privoxy对HTTP字段的过滤就依赖于正则式匹配。

为什么要编译PCRE?因为不能让Privoxy自动使用梅林的系统目录下(也就是/lib目录)的正则式库,这些库是依赖于libc.so.0的,而这个gcc编译出来的产物是依赖于libc.so.6的,这两个libc在链接时当然会冲突,必须统一使用其中一个libc。使用Entware的源中安装的PCRE库貌似也有点问题,Privoxy目录下自带的PCRE版本老,所以就自己编译一个PCRE给Privoxy用。条条大路通罗马,此路不通则绕行,不必吊死在一棵树上。

编译时使用CMake工程。PCRE虽然也提供了Autoconf工程,不过坑比较多,我都踩过了才发现改用CMake能让生活更简单、更充满阳光。

cd $WORKHOME
curl -O https://ftp.pcre.org/pub/pcre/pcre-8.44.zip
unzip pcre-8.44.zip
cd pcre-8.44
cmake -DCMAKE_INSTALL_PREFIX=$WORKHOME/pcre -DPCRE_SUPPORT_UTF=ON -DPCRE_SUPPORT_JIT=ON -DCMAKE_BUILD_TYPE=Release .
make install

编译Privoxy

下载Privoxy需要挂代理。

cd $WORKHOME
curl -x socks5://127.0.0.1:1080 -O https://www.privoxy.org/sf-download-mirror/Sources/3.0.28%20%28stable%29/privoxy-3.0.28-stable-src.tar.gz
tar zxf privoxy-3.0.28-stable-src.tar.gz
cd privoxy-3.0.28-stable
autoheader
autoconf
CFLAGS="-O2 -I$WORKHOME/pcre/include" LDFLAGS=-L$WORKHOME/pcre/lib ./configure --prefix=$WORKHOME/privoxy
make

这里只编译不安装,因为安装脚本有一堆检查,比如检查当前用户是否为root,这些安全检查跟我们局域网使用关系不大(万一需要,可以用防火墙阻止从WAN访问Privoxy的端口),而且碍事,所以就不要安装了。也可以把那些碍事的脚本代码注释掉再安装。

编译出来的可执行文件依赖于libc.so.6。

在Ubuntu中交叉编译

跟Ubuntu的版本关系不大,假定为18.04。

准备编译环境

首先最好是按照Ubuntu 18.04上交叉编译华硕路由器RT-AC88U的梅林384.15版本这个帖子或者梅林工具链的官方README,把对应的工具链的设置熟悉一下,能完整编译一下梅林的源码最好,那样的话依赖的第三方包和梅林工具链肯定没问题了。

假定已按上述帖子把依赖的各种第三方包都装好,那么下载梅林工具链并设置/opt下的各个符号链接。针对华硕不同型号的路由器,需要设置的工具链的符号链接不一样。路由器主要是有HND和非HND的类别区分,HND是Home Networking Division的缩写,是Broadcom搞的。以下均假定针对RT-AC88U型号。

cd ~
git clone https://github.com/RMerl/am-toolchains
sudo ln -s ~/am-toolchains/brcm-arm-hnd /opt/toolchains
sudo ln -s ~/am-toolchains/brcm-arm-sdk/hndtools-arm-linux-2.6.-uclibc-4.5. /opt/brcm-arm
sudo ln -s ~/am-toolchains/brcm-mips-sdk/tools/brcm /opt/brcm

设置PATH便于Autoconf优先搜索到工具链中的gcc、cc1等工具:

export PATH=/opt/brcm-arm/bin:/opt/brcm-arm/arm-brcm-linux-uclibcgnueabi/bin:/opt/brcm-arm/libexec/gcc/arm-brcm-linux-uclibcgnueabi/4.5.3/:$PATH

编译PCRE

这里不用CMake了,改用Autoconf。因为CMake在这里搞交叉编译麻烦。

cd ~
curl -O https://ftp.pcre.org/pub/pcre/pcre-8.44.zip
unzip pcre-8.44.zip
cd pcre-8.44
CFLAGS="-O2" ./configure --prefix=$HOME/pcre --host=arm-linux --enable-utf8 --enable-jit
make install

编译Privoxy

下载Privoxy需要挂代理。

这里有个坑,梅林开发组的大佬在制作梅林工具链本身时是采用了绝对路径的,所以梅林工具链中Autoconf带的Perl脚本使用了绝对路径来定位,不信可以打开$HOME/am-toolchains/brcm-arm-sdk/hndtools-arm-linux-2.6.36-uclibc-4.5.3/share/autoconf/autom4te.cfg这个文件看看,里面使用了诸如"/projects/hnd/tools/linux/hndtools-arm-linux-2.6.36-uclibc-4.5.3/share/autoconf"这样的绝对路径。所以需要建立符号链接,不然执行autoheader/autoconf时会提示有些Perl模块找不到。符号链接指向的真实路径同样和路由器是否为HND类别的有关。RT-AC88U的如下:

sudo mkdir -p /projects/hnd/tools
sudo ln -s $HOME/am-toolchains/brcm-arm-sdk /projects/hnd/tools/linux

配置Privoxy工程:

cd ~
curl -x socks5://127.0.0.1:1080 -O https://www.privoxy.org/sf-download-mirror/Sources/3.0.28%20%28stable%29/privoxy-3.0.28-stable-src.tar.gz
tar zxf privoxy-3.0.28-stable-src.tar.gz
cd privoxy-3.0.28-stable
autoheader
autoconf
CFLAGS="-O2 -I$HOME/pcre/include" LDFLAGS="-L$HOME/pcre/lib" ./configure --prefix=$HOME/privoxy --host=arm-linux --with-docbook=no

到这步后,先不编译。新开一个shell窗口,确保这个shell窗口中未设置梅林工具链的PATH,在这个窗口中用Ubuntu自带的gcc编译出程序dftables,再运行dftables生成chartables.c源码文件。如果用梅林工具链中的gcc编译的话,产物是针对ARM的,显然不能在Ubuntu amd64环境中运行。

cd ~/privoxy-3.0.28-stable
gcc -o pcre/dftables -pipe -O2 -I$HOME/pcre/include -pthread -Wall -Ipcre pcre/dftables.c
pcre/dftables >pcre/chartables.c

然后回到原来的shell窗口继续编译Privoxy:

make

这里也是只编译不安装。编译出来的可执行文件依赖于libc.so.0,最终依赖于uClibc,而在路由器上用gcc本地编译出来的会依赖于libc.so.6。

配置Privoxy

假定编译产物最后放在路由器的目录/tmp/mnt/WD12T/home/privoxy下,目录结构如下:

admin@RT-AC88U-4AF8:/tmp/mnt/WD12T/home/privoxy# ls -la
drwxrwxrwx admin root Mar : .
drwxrwxrwx admin root Mar : ..
drwxrwxrwx admin root Apr : etc
drwxrwxrwx admin root Mar : sbin
drwxrwxrwx admin root Mar : share
drwxrwxrwx admin root Mar : var

下载Privoxy的Windows版本的zip包。假定把zip中的配置文件解压到路由器的目录/tmp/mnt/WD12T/home/privoxy/etc下面。

所需要的文件/目录列表为:

config.txt
default.action
default.filter
match-all.action
templates (这个是目录)
trust.txt
user.action
user.filter

编辑主配置文件config.txt

设置其他配置文件所在的目录:

confdir /tmp/mnt/WD12T/home/privoxy/etc

设置监听端口。默认是127.0.0.1:8118,改为监听在路由器的内网IP 192.168.xxx.xxx上,要不内网的设备访问不了8118端口。注意:此处不要设置为监听在0.0.0.0:8118,那样会导致路由器外面的人也能访问你的这个端口。

listen-address  192.168.1.1:

设置log目录。方便查看错误的原因。

logdir /tmp/mnt/WD12T/home/privoxy/var/log/privoxy

增加自定义动作。假定过滤动作文件名为pac.action,文件名是可以随便取的。

actionsfile pac.action

自定义URL过滤器

pac.action文件的内容如下。以后可以随时根据需要增加需要转发的URL,亦即对于满足条件的URL,是转发到本机的SOCKS5代理的。

{+forward-override{forward .}}
/ {+forward-override{forward-socks5 127.0.0.1: .}}
.github.com
.microsoft.com

添加路由器开机启动项

建立符号链接:

ln -s /tmp/mnt/WD12T/home/privoxy/sbin/privoxy /opt/bin/privoxy

新建梅林的开机脚本文件/opt/etc/init.d/S81privoxy,内容为:

#!/bin/sh
ENABLED=yes
PROCS=privoxy
ARGS="--no-daemon --pidfile /tmp/mnt/WD12T/home/privoxy/var/run/privoxy.pid /tmp/mnt/WD12T/home/privoxy/etc/config.txt"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tmp/mnt/WD12T/home/privoxy . /opt/etc/init.d/rc.func

注意这个脚本最后调用的是/opt/etc/init.d/rc.func,确保这个文件存在。这文件是Entware的服务管理框架脚本,参看https://github.com/Entware/entware-ng-rtndev/blob/master/entware-opt/files/rc.func

脚本存盘后记得给S81privoxy加上可执行属性:

chmod u+x /opt/etc/init.d/S81privoxy

参考资料

https://www.privoxy.org/user-manual/configuration.html

编译安装路由器用的Privoxy 3.0.28(华硕RT-AC88U,原版梅林384.15)的更多相关文章

  1. skywalking探针tomcat8.0.28报错解决

    在部署skywalking agent的时候遇到一个异常 环境如下: tomcat8.0.28 catalina.out 日志报如下错误 30-Apr-2019 10:25:57.664 INFO [ ...

  2. 手动脱KBys Packer(0.28)壳实战

    作者:Fly2015 吾爱破解培训第一课选修作业第5个练习程序.在公司的时候用郁金香OD调试该加壳程序的时候出了点问题,可是回家用吾爱破解版的OD一调试,浑身精神爽,啥问题也没有. 首先使用查壳工具对 ...

  3. centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版

    zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...

  4. MySQL8.0.28安装教程全程参考MySQL官方文档

    前言 为了MySQL8.0.28安装教程我竟然在MySQL官方文档逛了一天,至此献给想入门MySQL8.0的初学者.以目前最新版本的MySQL8.0.28为示例进行安装与初步使用的详细讲解,面向初学者 ...

  5. java连接mysql8.0.28数据库实例

    首先说明,由于是8版本的数据库,所以配置类的写法上与5版本的有所区别,需要注意,同时用idea或eclipse时需要导入jar包,jar包的下载链接: https://dev.mysql.com/ge ...

  6. mysql 8.0.28 查询语句执行顺序实测结果

    TL;NRs 根据实测结果,MySQL8.0.28 中 SQL 语句的执行顺序为: (8) SELECT (5) DISTINCT <select_list> (1) FROM <l ...

  7. Linux下以tar包的形式安装mysql8.0.28

    Linux下以tar包的形式安装mysql8.0.28 1.首先卸载自带的Mysql-libs(如果之前安装过mysql,要全都卸载掉) rpm -qa | grep -i -E mysql\|mar ...

  8. linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记

    上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...

  9. CentOS7 编译安装 Git 服务器 Centos 7.0 + Git 2.2.0 + gitosis (实测 笔记)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 服务器IP:192.168.1.31 域 ...

随机推荐

  1. 定了,这个vue.js开源项目,面试时,一定会考问

     因为现在的网店,都是用的商城系统, 而实体店都是入座后,扫码打开网上商城进行选购(餐饮,超市等),所以,vue.js迅速开发网上购物商城系统成为了香饽饽, 本人开源2020年4月开发的购物商城系统, ...

  2. Java程序员必备基础结构图

    前言 最近看了深入理解Java虚拟机第三版,整理了一些基础结构图,算是比较全的了,做一下笔记,大家一起学习. 1.Java虚拟机运行时数据区图 JVM内存结构是Java程序员必须掌握的基础. 程序计数 ...

  3. unix域源码解析

    首先我们先要创建一个用于通信的结构unix_proto_data ,并初始化某些字段 static int unix_proto_create(struct socket *sock, int pro ...

  4. [New Portal]Windows Azure Web Site (3) 创建Web Site和云端数据库

    <Windows Azure Platform 系列文章目录> 在前一章的内容里,我介绍了使用Windows Azure Management Portal创建Web Site.本章,我将 ...

  5. OpenStack 删除instance 和其附加的volumes

    在openstack里面有时候删除instance时,volume无法跟着删除,可以自己编写脚本来实现, 脚本代码如下: #!/bin/bash for i in $(cat /root/host-d ...

  6. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring

    C. Restoring Permutation time limit per test1 second memory limit per test256 megabytes inputstandar ...

  7. 题解 AT4867 【[ABC155D] Pairs】

    题目 两次二分 首先对ans进行二分,在\([-10^{18},10^{18}]\)之间 考虑怎么check 对于每个ans,枚举每个\(a_i\),二分查找有几个\(a_j\),使得\(a_i\ti ...

  8. Redis超详细总结

    NoSQL概述 一.数据存储的演化史 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. 上述 ...

  9. 【Hadoop离线基础总结】流量日志分析网站整体架构模块开发

    目录 数据仓库设计 维度建模概述 维度建模的三种模式 本项目中数据仓库的设计 ETL开发 创建ODS层数据表 导入ODS层数据 生成ODS层明细宽表 统计分析开发 流量分析 受访分析 访客visit分 ...

  10. 解决MySQL 8.0数据库出现乱码的问题

    1.在MySQL 8.0的安装目录下创建一个my.ini文件(保存为utf8格式),然后写入以下内容: [mysql] # 设置mysql客户端默认编码 default-character-set=u ...