使用Image Builder编译自动翻墙OpenWrt固件
Image Builder又叫Image Generator,利用它我们可以方便地定制适合自己无线路由器的固件
编译OpenWrt自定义翻墙固件的注意事项
- 不要用“root”用户编译
- 进入到编译系统目录中执行编译相关命令,如:~/Downloads/openwrt
- 在编译版的路径中不能够出现空格
- 如果已经用root用户下载并解压了源码,可用命令改属主成普通用户:sudo chown -R user:user ~/Downloads/openwrt
下载适合自己无线路由器的Image Builder, NetGear WNDR4300 为例
-
进入 http://downloads.openwrt.org/
-
选择 Stable Releases或 Development Snapshots
- 目前的 Stable Releases: http://downloads.openwrt.org/releases/18.06.1/targets/
- Development Snapshots: http://downloads.openwrt.org/snapshots/targets/
-
选择 CPU类型,如 ar71xx: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/
-
选择 Flash 类型, 如nand或generic,如果是 WNDR4300 路由器,则选 nand: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/
下载命令举例:
cd ~/Downloads
wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/openwrt-imagebuilder-18.06.1-ar71xx-nand.Linux-x86_64.tar.xz
tar -xf openwrt-imagebuilder-18.06.1-ar71xx-nand.Linux-x86_64.tar.xz
# 为操作方便,重命名为短目录
mv openwrt-imagebuilder-18.06.1-ar71xx-nand.Linux-x86_64 openwrt-imagebuilder-nand
下载包含默认翻墙配置文件的openwrt-fanqiang项目
-
git下载openwrt-fanqiang项目
cd ~/Downloads git clone https://github.com/softwaredownload/openwrt-fanqiang
-
或者下载zip文件
https://github.com/softwaredownload/openwrt-fanqiang/archive/master.zip
本地项目文件夹是: ~/Downloads/openwrt-fanqiang
复制openwrt-fanqiang里面的翻墙配置文件到config-wndr4300目录下
建立一个配置文件夹,以路由器型号结束,如 ~/Downloads/config-wndr4300
cd ~/Downloads
mkdir config-wndr4300
cd openwrt-fanqiang
cp -R openwrt/default/* ~/Downloads/config-wndr4300/
cp -R openwrt/wndr4300/* ~/Downloads/config-wndr4300/
上面的操作,先复制共用的配置文件 openwrt/default/* 到 config-wndr4300目录下
然后复制WNDR4300专用的配置文件(如果存在)到 openwrt/WNDR4300/* 到 config-wndr4300目录下,如果有同名文件就覆盖
如果你要贡献本项目,也是先在openwrt-fanqiang/openwrt目录下先建立路由器型号为名称的文件夹,再把专用的配置文件放到此文夹下。注意文件夹和文件名都是小写的
修改TL-WNDR4300路由器翻墙配置文件
主要修改以下文件:
config-wndr4300/etc/shadowsocks-libev/config.json
config-wndr4300/usr/bin/ss-firewall-asia
config-wndr4300/etc/uci-defaults/defaults
为了方便以后升级,可以写个bash文件自动修改配置文件
一切操作尽量自动化,你甚至可以自动化一切操作:下载ImageBuilder,下载OpenWrt源码,下载shadowsocks-libev源码,同步openwrt-fanqiang源码,编译ipk,修改翻墙设置,编译翻墙固件,早上一觉醒来,新鲜出炉、美味可口的翻墙固件就已经摆放在桌上了
下面是一个自动修改配置文件的例子,从中可以知道需要修改哪些地方。从2015年12月起,可能用于自动化修改的默认值都应该标准化,方便自动化操作
#!/bin/bash
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2015-12-24
REPOSITORY=~/Downloads/openwrt-fanqiang
CONFIG=~/Downloads/config-wndr4300
createdir() {
rm -rf $CONFIG
mkdir $CONFIG
}
copy() {
cp -R $REPOSITORY/openwrt/default/* $CONFIG/
cp -R $REPOSITORY/openwrt/wndr4300/* $CONFIG/
}
setmod() {
chmod +x $CONFIG/usr/bin/*
chmod +x $CONFIG/etc/uci-defaults
chmod +x $CONFIG/etc/uci-defaults/*
}
modify() {
# server ip address
sed -i 's/1.0.9.8/server_ip/' $CONFIG/etc/shadowsocks-libev/config.json
# server_port
sed -i 's/1098/server_port/' $CONFIG/etc/shadowsocks-libev/config.json
# local_port
sed -i 's/7654/7654/' $CONFIG/etc/shadowsocks-libev/config.json
# password
sed -i 's/killgfw/killgfw/' $CONFIG/etc/shadowsocks-libev/config.json
# method
sed -i 's/chacha20-ietf-poly1305/chacha20-ietf-poly1305/' $CONFIG/etc/shadowsocks-libev/config.json
# local_port
sed -i 's/7654/7654/' $CONFIG/usr/bin/ss-firewall-asia
# ppoe username
sed -i 's/wan-username/wan-username/' $CONFIG/etc/uci-defaults/defaults
# ppoe password
sed -i 's/wan-password/wan-password/' $CONFIG/etc/uci-defaults/defaults
# wifi password
sed -i 's/icanfly9876/icanfly9876/g' $CONFIG/etc/uci-defaults/defaults
# root password
sed -i 's/\\nfanqiang/\\nfanqiang/' $CONFIG/etc/uci-defaults/defaults
}
if [ "$1" = "createdir" ]; then
createdir
elif [ "$1" = "copy" ]; then
copy
elif [ "$1" = "setmod" ]; then
setmod
elif [ "$1" = "modify" ]; then
modify
else
echo "usage: createdir copy setmod modify"
fi
自动修改翻墙配置文件用法:
./config-wndr4300.sh createdir
./config-wndr4300.sh copy
./config-wndr4300.sh setmod
./config-wndr4300.sh modify
确定OpenWrt无线路由器的PROFILE值
cd openwrt-imagebuilder
make info
找到自己固件的型号,比如我的是 NETGEAR WNDR4300v1
,它的PROFILE值是WNDR4300V1。如下图:
找出默认应该包含进OpenWrt固件的包
基础包:
对于WNDR4300无线路由器来说,可以这样获取:
echo $(wget -qO - http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/config.seed | sed -ne 's/^CONFIG_PACKAGE_\([a-z0-9-]*\)=y/\1/ip')
由于 OpenWrt开发非常活跃,不同版本的基础包可能是不同的
2018-09的基础包:
libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd
默认包:
运行命令:
make info
在顶部会列出:
Current Target: "ar71xx (Generic devices with NAND flash)" Default Packages:
base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c
所有型号路由器共用包:
Default:
Default Profile
Packages:
kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport
特定路由器型号专属包,列出在PROFILE的下面,对于 WNDR4300V1:
kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
自定义包(shadowsocks-libev 后面四个包是依赖):
ipset ipset-dns wget bind-dig iptables-mod-tproxy kmod-ipt-tproxy ip-full stubby dnsmasq-full simple-obfs libmbedtls libcares libev libsodium shadowsocks-libev
-
libmbedtls libcares libev libsodium shadowsocks-libev
shadowsocks-libev 及依赖,需要自己编译
-
simple-obfs 是 shadowsocks-libev 混淆插件,需要自己编译
-
stubby 可用于 DNS over TLS
-
iptables-mod-tproxy kmod-ipt-tproxy ip-full 用于防火墙 UDP 转发
-
dnsmasq-full 需要配合 shadowsocks 客户端 ss-tunnel 使用
Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由
默认的dnsmasq为base版本,该版本不能对特定的域名地址进行标记操作(因为我们需要对一些特定域名如twitter等进行标记),改为更加强大的dnsmasq-full
-
bind-dig 可以调试域名解析
如果你的openWrt版本是 ATTITUDE ADJUSTMENT,可能加上iptables-mod-nat-extra包,如果没安装的话iptables的端口转发会不支持
上述包整合在一起并去重复。简单方法是复制到 Sublime Text, 以空格分隔,再用正则把空格 替换成 \n, 然后 Edit -> Permute Lines -> Unique
注意,在编译前要把自己编译的 shadowsocks-libev 及其他要用到的 .ipk 文件放到ImageBuilder的目录下packages
OpenWrt Image Builder的三个命令行参数
- PROFILE 指定设备型号,此处是 WNDR4300V1
- PACKAGES 指定要编译进固件的包
- FILES 指定要编译进固件的自定义文件,如网络有关配置文件, 自定义包,我们放在 ~/Downloads/config-wndr4300 目录下了
要排除的package 写在最后面,格式是
-package
开始编译OpenWrt自动翻墙固件
cd ~/Downloads/openwrt-imagebuilder-nand
make image PROFILE=WNDR4300V1 PACKAGES="libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport ipset ipset-dns wget bind-dig iptables-mod-tproxy kmod-ipt-tproxy ip-full stubby dnsmasq-full simple-obfs libmbedtls libcares libev libsodium shadowsocks-libev -dnsmasq" FILES=~/Downloads/openwrt-wndr4300
注意,我们已经使用了 dnsmasq-full
,就不需要用 dnsmasq
, 用 -dnsmasq
排除,否则可能会有编译错误
编译好的的固件在ImageBuilder的bin/targets/ar71xx/目录下
然后把编译出的固件刷进路由器,重启路由器后后就能免设置智能翻墙
刷翻墙固件后管理员登录OpenWrt
刷好固件并重启路由器后,电脑连上无线网络, 然后就可用密码fanqiang
登录路由器
- ssh登录openwrt管理路由器: ssh root@192.168.1.1
- 浏览器打开192.168.1.1登录
以后玩OpenWrt出问题,可以重新刷上这个翻墙固件就又可以在网上畅行无阻了
相关资源: