Openwrt路由器上配置shadowsocks透明代理+gfwlist(PAC)
Shadowsocks 服务推荐:Just My Socks
推荐理由:价格便宜,支持月付,安全灵活。本文配置的前提是已经有shadowsocks服务。你可以通过购买或者自行搭建的方式获得。以下是链接:
- 直接购买网上的服务,此处推荐Just My Socks
- 快速Just My Socks配置Shadowsocks,请点这里。
- 自行搭建,请参考KVM VPS上配置V2Ray(Shadowsocks mode) + 加速:普通BBR/魔改BBR(测试于Ubuntu 16.04)
本文所使用的环境,仅作参考:
- OpenWrt 18.06.1/LuCI openwrt-18.06
DNS部分:
if 访问地址在gfwlist中
DNS请求转发到127.0.0.1:5353的dns-forwarder的监听端口
dns-forwarder转发到8.8.8.8进行解析
8.8.8.8在gfwlist中,通过匹配iptables规则转发到1080端口
ss-redir监听1080端口,通过shadowsocks代理服务器转发请求
else
正常使用公共DNS或者ISP提供的DNS服务器
其他数据:
if 访问地址在gfwlist中
if 访问地址在gfwlist中
通过匹配iptables规则转发到1080端口
ss-redir监听1080端口,通过shadowsocks代理服务器转发请求
else
正常访问
步骤1:依赖包安装(非常重要)
本文所有的操作都基于SSH和Web管理界面操作。
最后,添加gfwlist对应的配置文件,此处要感谢cokebar提供的脚本和文件。
到这里配置就完成了,你可以测试下是否可以直接连上路由,访问谷歌或油管。如果不能,重启下路由器,并清空下你电脑的DNS缓存。
步骤1:依赖包安装(非常重要)
本文所有的操作都基于SSH和Web管理界面操作。
首先通过SSH添加GPG Key,这样之后添加的源才能通过签名验证:
wget http://openwrt-dist.sourceforge.net/packages/openwrt-dist.pub -O /tmp/openwrt-dist.pub
opkg-key add /tmp/openwrt-dist.pub
然后在OpenWRT Web管理界面,“系统”>“软件包”>“配置”中,“自定义feeds”最后添加两行源:
src/gz openwrt_dist http://openwrt-dist.sourceforge.net/packages/base/mips_24kc
src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/packages/luci
注意:红底橙色斜体字部分需要替换为自己路由器的cpu指令集。可以通过命令‘opkg print-architecture’查看。
然后'opkg update'更新软件列表。(有时候因为墙内网络的特殊性,可能会失败,多试几次即可。如果一直抽风,请找一台可以翻墙的机器,手动下载下文提到的所有ipk软件包,然后scp上传到路由器,再手动安装。)
'opkg update'完成后,便可开始安装软件包。
opkg install shadowsocks-libev-ss-local
opkg install shadowsocks-libev-ss-redir
opkg install shadowsocks-libev-ss-tunnel
opkg install ip ipset libpthread iptables-mod-tproxy
opkg install dns-forwarder luci-app-dns-forwarder
opkg install zlib
opkg remove dnsmasq && opkg install dnsmasq-full
最后dnsmasq-full安装非常重要,否则dhcp服务和dns服务都将不能使用,dnsmasq.d下配置的脚本也将不能识别,从而导致dnsmasq出错,路由器将不能联网和正常dns解析,切记dnsmasq-full必须安装成功。
步骤2: 配置shadowsocks
'/root/'路径下新建一个shadowsocks文件夹,然后进入该文件夹,新建一个json配置文件,我们这里以'vultr.json'为例,你可以使用其他名字,只要和后文中引用的路径一致即可。
cd /root/
mkdir shadowsocks
vim vultr.json
在'vultr.json'中输入如下内容:
{
"server":"1.1.1.1",
"server_port":"1234",
"password":"passwordpassword",
"local_port":"1080",
"method":"aes-128-gcm",
"fast_open":true,
}
以上内容请根据自己的shadowsocks服务修改,其中:
- server: Shadowsocks服务器ip
- server_port: Shadowsocks服务器端口
- password: Shdowsocks服务密码
- local_port: 本地服务提供端口,可以不改
- method: 加密方式
- fast_open:tcp快速打开,与下文tcp快速打开设置相对应,也可以删除该项,不设置快速打开。
'/etc/init.d/'下新建文件shadowsocks,内容如下:
#!/bin/sh /etc/rc.common
START=95
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
SERVICE_PID_FILE=/var/run/shadowsocks.pid
CONFIG=/root/shadowsocks/vultr.json
start() {
# Proxy Mode
service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE
}
stop() {
# Proxy Mode
service_stop /usr/bin/ss-redir
}
保存后,为该文件增加执行权限:
chmod +x /etc/init.d/shadowsocks
然后配置为开机启动:
/etc/init.d/shadowsocks enable
启动服务:
/etc/init.d/shadowsocks start
看一下是否启动成功:
netstat -lnp | grep ss-redir
如果成功,应当能看到类似如下字样:
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 1493/ss-redir
开启TCP fastopen(需要系统内核版本大于3.7,内核版本可使用'uname -r'命令查看)。在'/etc/sysctl.conf'文件中找到'net.ipv4.tcp_fastopen'并设置为'3',如果找不到该字段,则直接在文件末尾添加一行:
net.ipv4.tcp_fastopen = 3
然后使修改生效:
sysctl -p
/etc/init.d/shadowsocks restart
步骤3:配置dnsmasq和ipset
在OpenWRT Web管理界面中,选择“网络”>“防火墙”>“自定义规则”,添加如下内容。其中1080端口和shadowsocks配置文件中的local_port相对应,请根据实际情况修改。
ipset -N gfwlist iphash
iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
ip6tables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
ip6tables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
ipset add gfwlist 8.8.8.8
(ip6tables用以设置ipv6的代理逻辑,因为如今ipv6流量同样会被GFW干扰)
然后配置dnsmasq,请务必注意,此时dnsmasq-full必须已经安装。
新建/etc/dnsmasq.d目录,然后使用如下命令,将该路径加入配置:
uci add_list dhcp.@dnsmasq[0].confdir=/etc/dnsmasq.d
uci commit dhcp
验证下是否成功:
uci get dhcp.@dnsmasq[0].confdir
注意:对于OpenWRT版本(非LEDE版)需要尝试在/etc/dnsmasq.conf最后加一行'conf-dir=/etc/dnsmasq.d'.
下载 dnsmasq_gfwlist_ipset.conf,然后放入/etc/dnsmasq.d目录。另外cokebar还提供了自动生成脚本https://github.com/cokebar/gfwlist2dnsmasq ,但是在使用该脚本时,需要安装一些依赖包,具体在以上github链接中,已经给出详细说明,此处就不再赘述。
我们可以通过新建一个脚本,加入crontab,从而自动获取最新gfwlist,并配置服务。以下脚本仅供参考,部分参数可能需要根据你的实际情况调整。
我们可以通过新建一个脚本,加入crontab,从而自动获取最新gfwlist,并配置服务。以下脚本仅供参考,部分参数可能需要根据你的实际情况调整。
#!/bin/sh
if [ -f /root/dnsmasq_gfwlist_ipset.conf ]; then
echo "Deleting old dnsmasq_gfwlist_ipset.conf..."
rm /root/dnsmasq_gfwlist_ipset.conf
echo "Deleted"
fi
/root/gfwlist2dnsmasq.sh -s gfwlist -o /root/dnsmasq_gfwlist_ipset.conf
echo "Moving dnsmasq_gfwlist_ipset.conf to /etc/dnsmasq.d"
mv /root/dnsmasq_gfwlist_ipset.conf /etc/dnsmasq.d/dnsmasq_gfwlist_ipset.conf
echo "Restarting the dnsmasq service..."
/etc/init.d/dnsmasq restart
步骤4:DNS配置
为了防止DNS污染,我们需要将一些被墙的网站,通过代理进行DNS解析。
在OpenWRT Web管理页面中,选择“服务”>“DNS转发”,然后:
- 勾选“启用”
- “监听端口”填写5353,注意,此处的端口号需要与dnsmasq_gfwlist_ipset.conf配置文件中的端口号相对应,配置文件中默认是5353
- “监听地址”填写127.0.0.1
- “上游DNS”填写8.8.8.8
然后在WAN口配置中(“网络”>“接口”>“WAN”选项卡>“高级设置”):
- 取消“使用端局通告的DNS服务器”
- 在“使用自定义的DNS服务器”中填写127.0.0.1
最后,在“网络”>“DHCP/DNS”页面中:
- “DNS转发”中填写你ISP的DNS,或者公共DNS,比如114.114.114.114。
其他说明
*在配置完shadowsocks后,可以使用ss-local工具测试下shadowsocks是否配置正确:
ss-local -c /root/shadowsocks/vultr.json -b <你的路由器IP> -l 1081
如果没有返回错误,再在你的浏览器的代理服务器设置中,设置下socks v5代理,ip就是你的路由器IP,端口1081. 设置完成之后,访问baidu.com,搜索ip,搜索结果第一栏会显示你的ip归属地,看看是不是你的shadowsocks代理服务器对应的ip和地区。
*如有其他问题,欢迎留言讨论
按照此法已成功配置
回复删除博主你好,配置到:
回复删除在OpenWRT Web管理页面中,选择“服务”>“DNS转发”,
这步的时候,点击DNS转发时,会出现这个错误:
Failed to execute cbi dispatcher target for entry '/admin/services/dns-forwarder'.
The called action terminated with an exception:
/usr/lib/lua/luci/dispatcher.lua:938: module 'luci.cbi' not found:
no field package.preload['luci.cbi']
no file './luci/cbi.lua'
no file '/usr/share/lua/luci/cbi.lua'
no file '/usr/share/lua/luci/cbi/init.lua'
no file '/usr/lib/lua/luci/cbi.lua'
no file '/usr/lib/lua/luci/cbi/init.lua'
no file './luci/cbi.so'
no file '/usr/lib/lua/luci/cbi.so'
no file '/usr/lib/lua/loadall.so'
no file './luci.so'
no file '/usr/lib/lua/luci.so'
no file '/usr/lib/lua/loadall.so'
stack traceback:
[C]: in function 'require'
/usr/lib/lua/luci/dispatcher.lua:938: in function
我opkg install luci-compat了一下,上面的问题就可以了,感谢博主
删除步骤2: 配置shadowsocks中,
回复删除1.可以配置域名么?
2.加密方式支持aes-256-gcm么?
第一条,是justmysocks推荐的配置,如果IP被封了,会自动更换IP
第二条,是justmysocks自动配置,无法更改呀。
1. 可以使用域名
删除2. 可以支持aes-256-gcm
gfwlist可以手动修改吗?我只需要特定网站走ssr
回复删除感谢您的分享,通过上述配置,我成功实现了透明代理。但是目前仍有一个问题,希望能得到您的帮助。
回复删除按照上述方法配置透明代理后,我的 win7 笔记本连上 LAN 口可以访问google,手机通过热点连接后同样可以访问,但是 win10 主机连上相同的 LAN 口后无法访问 。已按照网上的方法在 cmd 里通过 ipconfig /flushdns 命令清空 DNS ,同时win10主机的代理设置已确认关闭,仍然无法解决。
根据您的经验,您认为可能是哪里的问题。感谢您用宝贵的时间为我们指引方向。
我照你的教程做的,基本上ok,就是telegram连不上,不知道怎么回事,其它的如discord 都行。已经确认节点没有问题。
回复删除参考如下链接就行:https://bbs.misstar.com/?thread-12.htm&sort=desc
删除测试方法有效,重启后依旧正常使用telegram,这里给出详细步骤 修改/etc/misstar/applications/ss/script/ss
在 start_ss_rules_gfwlist函数中加入
ipset add gfwlist 91.108.4.0/22
ipset add gfwlist 91.108.56.0/22
ipset add gfwlist 149.154.160.0/20
ipset add gfwlist 149.154.164.0/22
路由器重启也能自动生效