编译安装路由器用的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. HTML入门(HB、DW)

    一.文字内容 <b></b>  <strong></strong>     /*加粗 <i></i>   <em>& ...

  2. pod setup命令失败解决方法

    最近运行pod setup出现以下问题: remote: Compressing objects: 100% (34/34), done.error: RPC failed; curl 56 SSLR ...

  3. 【万字长文】别再报班了,一篇文章带你入门Python

    本文始发于个人公众号:TechFlow,原创不易,求个关注 最近有许多小伙伴后台联系我,说目前想要学习Python,但是没有一份很好的资料入门.一方面的确现在市面上Python的资料过多,导致新手会不 ...

  4. 用Redislive监控redis

    注意:RedisLive是使用Python2.x编写,建议使用2.7,本次环境为Centos 7.2,默认Python版本2.7. 项目地址:https://github.com/nkrode/Red ...

  5. dp 20190617

    A. Alternative Thinking 这个标的是dp,但是我感觉就只能算思维题,不是特别难, 你仔细想想就知道,你先求出01这样子满足条件的个数,如果要进行改变,最多只可以增加两个,也可以增 ...

  6. 【FPGA技巧篇一】FPGA设计的四种常用思想与技巧之一 :乒乓操作

    本文篇章将讨论一下的四种常用 FPGA 设计思想与技巧: 乒乓操作. 串并转换. 流水线操作. 数据接口同步化, 都是 FPGA 逻辑设计的内在规律的体现, 合理地采用这些设计思想能在FPGA设计工作 ...

  7. 整型和浮点型与QByteArray的转换

    目录 QByteArray 整型 QByteArray 浮点型 QByteArray QByteArray The QByteArray class provides an array of byte ...

  8. 【Scala】关于集合的各种知识点

    目录 映射Map 不可变Map 概述 操作实例 可变Map 概述 操作实例 Map的遍历 for循环遍历 格式 操作实例 模式匹配遍历 格式 操作实例 Tuple 元祖 概述 定义格式 获取元素方法 ...

  9. 一文教你快速修改ubuntu终端显示的主机名和用户名

    为了让终端的显示更加简洁,清爽,改掉显示的用户名和主机名,改成你喜欢的名字. 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞

  10. dp规划之矩阵连乘问题

    问题描述:给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,我们要计算这n个矩阵的最少计算次数.  将多个矩阵连乘抽象为最后一次计算即两个矩阵相乘. public static v ...