找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 3231|回复: 7

4300配置S-S及躲坑记录。

[复制链接]
发表于 2016-8-27 23:19 | 显示全部楼层 |阅读模式
本帖最后由 bslayer 于 2016-8-27 23:22 编辑

花了两天时间在WNDR4300 V1上装上了OpenWRT,配好了SS。躲了一堆坑,详述一下,做个记录。
1、安装OpenWRT。
     按照网上的傻瓜引导先到OpenWRT官网下找适合的ROM。看过攻略就知道:4300应该配AR71xx系列的。硬刷应该找.img格式的。攻略在此:https://www.right.com.cn/forum/thread-152434-1-1.html
首先,电脑打开第一个cmd 输入ping 192.168.1.1 -t,Windows系统功能里打开tftp-client,下载的ROM文件名改简单一点例如4300.img放到C:\
1.电脑改为固定IP(192.168.1.2/255.255.255.0
2.把电脑拉出来的线接到路由lan1,(路由器的剩下的lan口的网线最好都拔掉
3.断电,就是按掉路由器的那个电源开关
4.用尖针按住路由后面的复位键,千万不要松手
5.通电。等待电源灯 从 黄灯→变为绿灯,并且绿灯一直在闪烁。然后松开复位键。
6.再打开第二个cmd
①输入cd c:\
输入tftp -i 192.168.1.1 PUT 4300.img
7.等待3到5分钟。
8.注意看第一个cmd中界面192.168.1.1 -t 是否一直能ping通。 持续10秒以上
9.最后一步很重要,断电(不然的话会没有5G信号,某位大神说的)。步骤如下:
直接拔掉电源插座,等待5秒左右。(先拔掉电源插座,然后关掉路由器上的开关)
10.插上电源插座,等待5秒左右。打开路由器上的开关。
web网页在进入192.168.1.1,默认 账号:root  默认密码:无。需要自己设置。
     好了最新的是15.05 ChaosClaimer(简称CC)的。找了一个,硬刷,成功.........了半小时。半小时后,在我搞了一堆鸡毛后,WEB界面失效了,无论如何都要反复登录,啥也干不成,重刷CC居然还是这样。放狗查无果,莫非我买的这个二手4300有伤?
     无奈试试14.07 BarriedBreaker(简称BB)。又找到了,硬刷,成功..........................很久依然成功。OK就是它了。第一个坑躲过。
2、安装SS
      这个我主要看的是这篇攻略:https://cokebar.info/archives/962,但没有全按照他的做,因为.........这个原因很多,我猜主要是版本不一致的问题,他说的很多我找不到。
      首先得安装$hadow$ocks-libev和luci-app-$hadow$ocks,或者$hadow$ocks-libev-spec和luci-app-$hadow$ocks-spec,就差一个-spec,听说-spec是OpeWRT优化过的。但是官网上的-spec停止支持了,官网是https://sourceforge.net/projects/openwrt-dist/files/?source=navbar。我就先试试不带的吧,于是遇到了#2坑。
      最新的下载下来,安装失败,怎么装都失败,查了一下,可能是内核的问题,最新的SS大概是用CC编译的,我CC跪了,所以装的是BB。那装哪个SS呢?看看CC啥时候放出的吧,装个CC之前的SS大概能行,对比了半天日期,选2.3.0好了,之后的也未必不行,先不试了。果然,$hadow$ocks-libev装上了,但是luci装不上,原因不明。果断换-spec的那一套,都装上了。躲坑成功。
      貌似还要一个ChinaDNS处理DNS污染的问题,同样的,估计最新的悬,也按照日期1.3.1的好了。也成功。
      最后列一下,我装的是:
     $hadow$ocks-libev-spec_2.3.0-1_ar71xx
     ChinaDNS_1.3.1-1_ar71xx
     luci-app-$hadow$ocks-spec_1.3.7-1_all
     luci-app-chinadns_1.3.4-1_all
3、开始配置
     基本还是按照上一篇的方法配置,
     说句题外的,十分佩服能熟练使用vi的那些....神仙,你们都不是人。我每次进了vi就不会退出来,每次都要百度。后来发现了个小玩意nano,这个舒服多了,至少可以用Ctrl键,方向键和编辑键,OpenWRT里幸运地有,果断走起。
                        opkg update
                        opkg install nano
                        启动方法跟vi一样,nano xxxx.conf就好,不会用没关系,里面有提示有帮助,比vi那个极客范接地气一万倍。
     废话不说了。
     先搞dnsmasq,换成dnsmasq-full,这个OpenWRT官方自带,不会有版本的问题。先卸载opkg remove dnsmasq,有警告,忽略,安装opkg install dnsmasq-full,不出所料地失败了。要重启么?重启,安装依然失败。想起来莫非是那个警告么?仔细察看了一下失败原因,涉及好几个文件,都删之。再安装,成功了。总结,卸载dnsmasq时警告不要不理,把那个提到的文件删掉,再装dnsmasq-full.
     然后按照攻略配置dnsmasq,配置ChinaDNS,配置SS。重启,成功了一半,SS工作了,但是所有流量都走SS,说好的智能过滤哪去了?
     ps一下,发现dnsmasq起来了,但是配置文件怎么不是攻略里说的那个?于是去/etc/init.d/dnsmasq看看,过程曲折就不说了,最后修改如下两行。
                      CONFIGFILE="etc/dnsmasq.conf"                      原来是CONFIGFILE="/var/etc/dnsmasq.conf"
                      xappend "--conf-dir=/etc/dnsmasq.d"                xappend "--conf-dir=/tmp/dnsmasq.d"
     重启dnsmasq,按照大伙说的dnsmasq restart,失败不行。算了路由器重启好了,还是所有流量走SS。还有不对的地方,ipset list一下,没发现说好的gwlist这个set呀。攻略里那两句ipset,iptables啥啥的都没有,莫非这两句是要自己写到什么地方去?咋每个大仙都没提过这事呢。好了咱们这么着吧,写到 etc/init.d/firewall里面:
                           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
      重启,依然如故,但是ipset里有gwlist了,iptables -t nat -L里也有这两个转发了,恩,也不算白费劲。仔细看iptables -t nat -L 发现还有一个全部转发的规则,在SS_SPEC_WAN_FW链里面,这个莫非是SS自己加上去的么。grep了好半天,发现在usr/bin/ss-rule里面。果然啊在这儿,这个俩大坑,dnsmasq和iptables,咋任何攻略里都没人提呢。改吧:
                                   fw_rule() {
  $ipt_n -N SS_SPEC_WAN_FW && \
  $ipt_n -A SS_SPEC_WAN_FW -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port $local_port 2>/dev/null || {
  loger 3 "Can't redirect, please check the iptables."
  exit 1
  }
  return $?
}
    另外,把刚才的firewall里的那个规则去掉,就中间红色那行。

    重启,终于成功了。

    我觉得还需要配置的几点:
    1 )  自动获取GWLIst,后来想想这个要不就先算了,要真搞成全自动的,我想自己加个地址还不方便了。
            自动获取的脚本如下,Python的,来自[size=100%]https://github.com/cokebar/gfwlist2dnsmasq,没事自己更新一下传上去就行了。
#!/usr/bin/env python
#coding=utf-8
#
# Generate a list of dnsmasq rules with ipset for gfwlist
# Ref https://github.com/gfwlist/gfwlist   


import urllib2
import re
import os
import datetime
import base64
import shutil
import ssl


mydnsip = '127.0.0.1'
mydnsport = '5353'
ipsetname = 'gfwlist'
# Extra Domain;
EX_DOMAIN=[ \
'.google.com', \
'.google.com.hk', \
'.google.com.tw', \
'.google.com.sg', \
'.google.co.jp', \
'.google.co.kr', \
'.blogspot.com', \
'.blogspot.sg', \
'.blogspot.hk', \
'.blogspot.jp', \
'.blogspot.kr', \
'.gvt1.com', \
'.gvt2.com', \
'.gvt3.com', \
'.1e100.net', \
'.blogspot.tw' \



# the url of gfwlist
baseurl = 'https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt'
# match comments/title/whitelist/ip address
comment_pattern = '^\!|\[|^@@|^\d+\.\d+\.\d+\.\d+'
domain_pattern = '([\w\-\_]+\.[\w\.\-\_]+)[\/\*]*'
tmpfile = '/tmp/gfwlisttmp'
# do not write to router internal flash directly
outfile = '/tmp/dnsmasq_list.conf'
rulesfile = './dnsmasq_list.conf'


fs =  file(outfile, 'w')
fs.write('# gfw list ipset rules for dnsmasq\n')
fs.write('# updated on ' + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + '\n')
fs.write('#\n')


print 'fetching list...'
if hasattr(ssl, '_create_unverified_context'):
    ssl._create_default_https_context = ssl._create_unverified_context
content = urllib2.urlopen(baseurl, timeout=15).read().decode('base64')


# write the decoded content to file then read line by line
tfs = open(tmpfile, 'w')
tfs.write(content)
tfs.close()
tfs = open(tmpfile, 'r')


print 'page content fetched, analysis...'


# remember all blocked domains, in case of duplicate records
domainlist = []




for line in tfs.readlines():   
    if re.findall(comment_pattern, line):
        print 'this is a comment line: ' + line
        #fs.write('#' + line)
    else:
        domain = re.findall(domain_pattern, line)
        if domain:
            try:
                found = domainlist.index(domain[0])
                print domain[0] + ' exists.'
            except ValueError:
                print 'saving ' + domain[0]
                domainlist.append(domain[0])
                fs.write('server=/.%s/%s#%s\n'%(domain[0],mydnsip,mydnsport))
                fs.write('ipset=/.%s/%s\n'%(domain[0],ipsetname))
        else:
            print 'no valid domain in this line: ' + line


tfs.close()   


for each in EX_DOMAIN:
    fs.write('server=/%s/%s#%s\n'%(each,mydnsip,mydnsport))
    fs.write('ipset=/%s/%s\n'%(each,ipsetname))


print 'write extra domain done'


fs.close();
print 'moving generated file to dnsmasg directory'
shutil.move(outfile, rulesfile)


print 'done!'


    2)   自动检测SS状态,挂了就重启SS。这个要得。不过,是不是搞个路由定时自动重启更省事呢?
            参考的https://www.logcg.com/archives/868.html,但是依然有坑,wget不知道他是啥版本,我这儿走不了,改成如下:
#!/bin/sh
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
wget --spider --quiet www.google.co.jp
if [ "$?" == "0" ]; then
    echo '['$LOGTIME'] No Problem.'
    exit 0
else
    wget --spider --quiet www.baidu.com
    if [ "$?" == "0" ]; then
        echo '['$LOGTIME'] Problem decteted, restarting $hadow$ocks.'
        /etc/init.d/$hadow$ocks restart
    else
        echo '['$LOGTIME'] Network Problem. Do nothing.'
    fi
fi
   
定时任务其实是cron的配置,cron的手册看了一眼,有点乱。这个自动化还是暂时算了,要是以后发现SS经常跪,再说。

    到此为止,都不搞了,就这么着吧。

我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-8-28 02:34 | 显示全部楼层
OpenWrt 官方仓库里的 s-s-client 就挺好,论坛从没看人用,有点奇怪。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-8-29 11:25 | 显示全部楼层
石像鬼固件ChinaDNS貌似不稳定 我已经丢弃了,OPENWRT还没试过。现在用ipset+pdnsd+ss+gfwlist和ipset+ss+ss的udp转发+gfwlist。这两种方案都比较稳定
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-8-29 23:20 | 显示全部楼层
很好的技术贴
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-9-1 00:09 | 显示全部楼层
谢谢分享。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-9-9 00:53 | 显示全部楼层
非常感谢,正需要!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-9-9 08:52 | 显示全部楼层
感谢技术分享。。。。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-9-13 11:24 | 显示全部楼层
楼主  国内路由表能给一份么?谢谢!!~
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-20 09:16

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表