Total Pageviews

Monday, 31 July 2017

中国不属于这类玩金融的国家

全球金融危机爆发将近十年,带给人们的思考是:如果任由金融业自我发展,它会给经济体系带来什么?金融业不断衍生发展,有多少是实体经济所需要的,又有多少是金融业本身的自我实现?这类问题不仅仅是对世界市场的,对中国金融业的发展同样适用——近年中国金融业快速发展,信用大规模扩张,但同时“脱实就虚”,在以制造业见长的中国同样也引起了困惑。
《财经》杂志最新刊登了国际清算银行前经济顾问斯蒂芬•塞切蒂(Stephen Cecchetti)和资深经济学家埃尼斯•哈鲁比(Enisse Kharroubi)的一项研究成果。研究显示,当信贷相对较低或金融部门就业比例适中时,较高的债务水平推动经济增长。但是这有一个阈值,超过这个阈值,金融就成为经济增长的拖累。现在有大量的证据表明,当一个国家的政府、企业或家庭债务超过GDP的100%时,生产率增长会更慢。
对于与现代经济社会相伴生的金融业来说,上述结论可能是颠覆性的。这一研究是否可信呢?塞切蒂与哈鲁比重点研究的是金融体系的规模变化对全要素生产率增长的影响。基于20多个国家30年(从1980年到2010年)之间的面板数据,这些国家包括澳大利亚、奥地利、比利时、加拿大、瑞士、德国、丹麦、西班牙、芬兰、法国、英国、希腊、爱尔兰、意大利、日本、荷兰、挪威、葡萄牙、瑞典和美国等国家。他们的研究发现,生产率和金融部门增长之间存在着稳健的、经济意义上的负相关关系。也就是说,金融部门增长越快,全要素生产率增长就越糟。
在爱尔兰,从2005年到2010年,私人信贷占GDP的比例翻了一番多,每年增长16.9%。相比之下,1995年到2000年的五年间,爱尔兰私人信贷占GDP的比例的平均年度增长率是更温和的7.7%。这意味着,9.2个百分点的差异导致了爱尔兰2005年到2010年的每年年度生产率比1995年到2000年的每年年度生产率每年下降0.8%。这一差异也解释了同期生产率增长为何下降了2.9个百分点的30%左右。
再以西班牙为例,从1990年到1995年,信贷占GDP的比例几乎不变(每年都为-0.22%),而西班牙的生产率每年增长1.7%。从2005年到2010年,西班牙的信贷占GDP的比例年均增长8.1%而每年生产率仅增长1%。估算显示,如果信贷占GDP比例保持恒定而不是上升8.1%,那么西班牙2005年到2010年的生产率增长将与1990年到1995年度的生产率增长(每年1.7%)相同。
从常识和历史经验来看,金融对于经济的运行是至关重要的,但是,在什么样的机制下金融会“危害”经济呢?塞切蒂与哈鲁比的研究假设是,由于金融往往倾向于支持较低生产率的产业——这样的产业通常拥有相对容易用作抵押的资产。一些项目之所以比较容易获得金融支持,是因为这些项目在生产中更为依靠有形资本或能够生产出更多的有形产品。在这种情况下,公司的资产或产出越有形,就越容易将其作为贷款担保。
研究者对15个发达经济体的33个制造业进行了研究和数据预测。找到难于用资产或产出抵押的部门。在资产方面,直接根据资产有形性的信息进行衡量;就产出而言,将研发密度看作代理变量。研究结论是明确的:当金融部门增长更快时,在有形资产比例较低或研发支出密度较高的行业中,生产率的增长往往会不成比例地减速。就这些估算的数量含义,研究发现,正在经历金融繁荣国家的高资产有形率产业的生产率,比没有经历金融繁荣国家的低资产有形率产业的生产率每年要高2.5%到3%。这是一个相当大的影响。
从这些研究成果来看,金融过度繁荣不会促进经济增长,因为信贷繁荣伤害了通常所认为的经济增长的引擎——即资产有形比例较低、或研发密度较高的产业。从这些证据以及近期金融危机中的经历可以得出一个结论:迫切需要重新评估现代经济体系中金融与实体经济增长的关系。
最终分析结论(Final Analysis Conclusion):
在安邦咨询(ANBOUND)的研究团队看来,上述研究成果如果成立,对于一个国家的经济政策与金融政策有着重要意义。对中国而言,也许应该重新思考如下问题:在一个以实体经济(尤其是制造业)为主的经济体系里,应该如何调整金融业与实体经济的关系?应该如何面向实体经济来配置金融资源?应该在多大程度上鼓励金融业的创新和发展?至少从目前来看,中国经济的基因不是金融业。实际上,全世界也只有极少数国家(如美国)能够把金融业作为一种支柱产业持久地玩下去。可以肯定的是,中国不属于这类玩金融的国家.

火狐中国版的坑


一:新版火狐31.0采用新的同步方案,默认情况下数据同步使用的是本地服务,而不是全球同步,你会发现同步了居然别的机子还要登录,并且数据还不一样。解决方案,登陆的时候切换到全球同步,切换的时候会要求重启浏览器。
二:默认情况下会安装百度搜索,强烈建议不要安装这个插件,这个插件会监视用户的搜索行为,发现用户不是使用百度会立即弹出提示,意图绑定用户。至于还有没有其它的数据搜集还不清楚。搜索建议使用duckduckgo,官方说不会搜集用户的信息,同时避免目标网站做关键词分析,其次建议使用google, bing。
三:火狐自带CNNIC的CA证书,建议删除,CNNIC的名气是出了名的臭。
四:不要安装默认的支付宝控件以及淘宝支付相关的东西,这类东西会在你的网络里动手脚,实在需要做在线支付的话,建议单独建立虚拟机。

屏幕分辨率也会暴露你的私隐


屏幕分辨率居然会暴露私隐?没错,不过这是特定场合下才会发生的情况。有的人会使用双虚拟机技术来阻止不希望的程序连网,同时浏览器连接到tor网络以阻止反追踪等,但问题到这里还没有结束,因为浏览器会把你的屏幕分辨率发送到你所访问的网站,只要目标网站把这些信息保存下来,仍然有可能追踪到你的行踪。

虚拟机像VMware/VBox等,都会在你安装好操作系统后安装一个客户机的增强软件,以便剪贴板共享和分辨率自适应,但是你在控制台下使用这些虚拟机的时候,一般不会是全屏,于是客户机的分辨率很可能是一个真实机完全不会出现的数值(如1014x637),并且这个尺寸不同的机器上会相同的概率非常的低。在这种情况下使用浏览器浏览的时候,目标网站能明确的分析出这个分辨率一定是出自虚拟机,并且只要使用分辨率这个索引便能追踪到你所浏览过的东西,你的爱好,甚至是你用过的账号(比如你使用不同的浏览器外加不同的代理开不同的小号,一个做正事一个做反XX的事,依然会被找到)。这种分析即使你使用tor也只能隐藏来源IP,但无法隐藏你的一堆小号。

解决方案倒是不复杂,使用远程桌面远程到虚拟机里,分辨率就标准化了,也就无法通过分辨率来达到追踪目的了。要测试可以访问http://browserspy.dk/screen.php,这个网站有非常详尽的信息。事实上它在告诉你,若要追踪你,远远不止分辨率这种手段,浏览器把你的信息卖得太多太多了.

GFW 专用白名单pac列表

我写了一个Spider,自动收录常见国内网站域名作为白名单,国外自动使用代理,这样规则就不需要经常维护了。特别适合iOS自动代理配置和PC浏览器使用。而部分不需要代理且经常上的国外网站,需要手工加入列表。


由于使用域名匹配,DNS被污染也能正常使用。
列表地址
项目地址
使用方法
下载 whitelist.pac 文件后,修改代理服务器的 ip 地址和代理类型。然后将浏览器的代理设置中指向 whitelist.pac
var proxy = 'PROXY www.abc.com:443'; // 需要更换成有效的代理地址,代理类型还可以为'SOCKS5'或'HTTPS'

列表几乎每天更新,会不断维护最常用的国内网站域名列表.

from  https://breakwa11.blogspot.com/2014/10/gfw-pac.html

局域网下,免设置路由的全局代理

如果你不想光为了透明代理而单独买一个可刷OpenWRT固件的路由器, 同时你在局域网内有至少一台linux机器(可虚拟机),那以下内容可以帮助你在不需要设置路由的情况下实现透明代理(当然本质上就是把那台机器当成路由来用)。

首先你需要一台linux桌面系统的机器,ubuntu/debian/centos等均可,能编译ss-libev/使用iptables(于是不能centos7,我不会调教那个firewall)。你可以使用真实机器(如树莓派)或虚拟机。如果使用虚拟机,网络类型需要设置为桥接到物理网络,如果是VMware,不要对“复制物理网络连接状态”打钩。我建议使用虚拟机或性能不差的真实机器,这样网速不会受到性能上的限制。

接下来,安装操作系统、安装编译依赖包、git clone ss-libev、configure、make等这里就不说了,网上说明有很多(虽然大多数是过时了)。

编译好后,如果你clone的是ssr的libev版本: https://github.com/shadowsocksr-backup/shadowsocksr-libev,里面自带了一个ssrlink.py,可以通过此脚本快速生成一个客户端使用的配置文件,例如执行:

python ssrlink.py ssr://MTkyLjE2OC4xLjI6MTA4MDphdXRoX2FlczEyOF9tZDU6YWVzLTEyOC1jZmI6dGxzMS4yX3RpY2tldF9hdXRoOk1USXpORFUyLz9vYmZzcGFyYW09ZEdWemRDNWpiMjAmZ3JvdXA9ZEdWemRB > config.json
即可生成一个配置好了的config.json

东西都准备好了,现在开始配置。首先是开启ipv4转发,编辑/etc/sysctl.conf,解除net.ipv4.ip_forward = 1的注释,或直接添加这么一行,保存文件,并执行sysctl -p使修改立即生效。然后,设置IP为静态的,例如你的路由器地址为192.168.0.1,那么你可以设置为192.168.0.2,具体设置方法参考linux文档。设置好以后,在需要全局代理的机器上,把网关地址改为192.168.0.2,测试能不能正常上网(现在还没有通过代理),如果不能,那检查防火墙配置,或尝试重启它再测试。能正常上网后再进行后面的配置。



然后,创建一个ipt.sh文件,文件内容如下:

#!/bin/bash

subnet="192.168.0.0/16"           # your subnet config
localaddr="192.168.0.2"           # this server ip (must be subnet ip)
boardcastaddr="192.168.0.255"
listenport=1080                   # local listen port (tcp)
    udplistenport=0               # set it if not the same udp port
NAT_OUTPUT=0                      # if 0: do not need to set server ip
if [ $NAT_OUTPUT -eq 1 ]; then
    serverip="100.86.100.10"          # ss server ip (tcp)
    serverip_udp=""                   # ss server ip (for udp), keep empty if the same
fi

iptables -t nat -D PREROUTING -p tcp -j SHADOWSOCKS
if [ $NAT_OUTPUT -eq 1 ]; then
    iptables -t nat -D OUTPUT -p tcp -j SHADOWSOCKS
fi
iptables -t nat -F SHADOWSOCKS
iptables -t nat -X SHADOWSOCKS

iptables -t mangle -D PREROUTING -p udp -j SHADOWSOCKS
iptables -t mangle -F SHADOWSOCKS
iptables -t mangle -X SHADOWSOCKS

ip rule del fwmark 0x01/0x01 table 100
ip route del local 0.0.0.0/0 dev lo table 100


if [ $udplistenport -eq 0 ]; then
    udplistenport=`expr $listenport`
fi

iptables -t nat -N SHADOWSOCKS
iptables -t nat -I PREROUTING -p tcp -j SHADOWSOCKS
if [ $NAT_OUTPUT -eq 1 ]; then
    iptables -t nat -I OUTPUT -p tcp -j SHADOWSOCKS
fi

ip rule add fwmark 0x01/0x01 table 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -N SHADOWSOCKS
iptables -t mangle -A SHADOWSOCKS -d ${boardcastaddr} -j RETURN
iptables -t mangle -A SHADOWSOCKS -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A SHADOWSOCKS -p udp --dport 137 -j RETURN
iptables -t mangle -A SHADOWSOCKS -p udp --dport 138 -j RETURN
iptables -t mangle -A SHADOWSOCKS -p udp -d ${localaddr} -j RETURN
iptables -t mangle -A SHADOWSOCKS -p udp -s ${localaddr} -j RETURN
iptables -t mangle -A SHADOWSOCKS -p udp -s ${subnet} -j TPROXY --on-port ${udplistenport} --tproxy-mark 0x01/0x01
iptables -t mangle -I PREROUTING -p udp -j SHADOWSOCKS

if [ $NAT_OUTPUT -eq 0 ]; then
    iptables -t nat -A SHADOWSOCKS -d ${localaddr} -j RETURN
    iptables -t nat -A SHADOWSOCKS -s ${localaddr} -j RETURN
else
    iptables -t nat -A SHADOWSOCKS -d ${serverip} -j RETURN
    iptables -t nat -A SHADOWSOCKS -s ${serverip} -j RETURN
    if [ -z $serverip_udp ]; then
    
    iptables -t nat -A SHADOWSOCKS -d ${serverip} -j RETURN
    
    iptables -t nat -A SHADOWSOCKS -s ${serverip} -j RETURN
    fi
fi

iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d ${subnet} -j RETURN

iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports ${listenport}


注意你应该按你的本地设定修改前四行的配置,一般你也只需要修改前四行的配置项就行了,然后保存并执行。执行后,它可以重定向你所有的出网TCP和UDP包。

最后,运行ss-redir:./ss-redir -c config.json -u
此时便应该是全局,可以愉快地玩耍了

注意的一点:UDP包如果不能成功转发,可能是被GFW拦截,那么这时只能更换服务器了。而这可能导致DNS查询失败,可以先把DNS设置为路由的DNS地址以便于排查问题。

ipt.sh参数说明:
listenport 应该与你的ss配置文件所配置的local_port一致
localaddr 你的这台linux机器的静态IP地址

subnet 你的局域网网络地址段
boardcastaddr 你的局域网的广播地址(地址段中最大的地址,由网络掩码决定)

其它说明:如果你不需要全局代理,你可以在ipt.sh中模仿以下指令
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
在此后面添加你不需要代理的地址段即可.

from https://breakwa11.blogspot.com/2016/11/blog-post.html
-------

ss-redir配合ipset转发TCP+UDP


想要使用ss-redir代理所有非中国大陆的UDP流量(用于打游戏),需要将ss的项目脚本稍作修改。本文提出一种修改后的脚本方案,可以支持代理不仅仅是53端口的UDP流量,而是所有境外IP的UDP流量。
我的电脑是Ubuntu 18.04,现假设ss的服务器IP为123.123.123.123,本地ss-redir端口为12345(下文同)
广告:推荐使用搬瓦工(BandwagonHost),一键部署shadowsocks,轻松切换机房,点我直达购买搬瓦工!
要想代理UDP流量,首先要在服务端开启UDP转发(这不是废话)。ss-server启动参数带上-u即可。

最简单的例子

在shadowsocks-libev项目主页上的ss-redir例子是如下
iptables -t nat -N SHADOWSOCKS
iptables -t mangle -N SHADOWSOCKS

iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN

iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN

iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345

ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01

iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
iptables -t mangle -A PREROUTING -j SHADOWSOCKS

ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid
项目主页的这个例子,可以实现TCP全局代理,UDP只代理53端口。

代理分流(启动)

我们可以借鉴luci-app-shadowsocks项目的ss-rules脚本实现TCP+UDP代理。
更新中国大陆的路由表
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > ~/route.txt
为了减少路由表的体积,可以使用cidrmerge精简合并(可选步骤,实测体积减少20KB左右)
给出完整的启动脚本
#! /bin/bash

ss_server_ip=123.123.123.123
ss_redir_port=12345
ss_redir_pid=/var/run/shadowsocks.pid
ss_config_file=/etc/config/shadowsocks.json
chnroute_file="~/route.txt"

# 开启redir
ss-redir -u -c $ss_config_file -f $ss_redir_pid

# IP内网地址
BYPASS_RESERVED_IPS=" \
    0.0.0.0/8 \
    10.0.0.0/8 \
    127.0.0.0/8 \
    169.254.0.0/16 \
    172.16.0.0/12 \
    192.168.0.0/16 \
    224.0.0.0/4 \
    240.0.0.0/4 \
"

ipset create ss_bypass_set hash:net

# 添加内网地址到ipset
for line in $BYPASS_RESERVED_IPS; do
    ipset add ss_bypass_set $line
done

# 添加ss地址到ipset
ipset add ss_bypass_set $ss_server_ip

# 添加chinaroute到ipset
if [ -f $chnroute_file ]; then
    IPS=`which ipset`
    $IPS -! restore <<-eof --match-set="" --on-port="" --set-mark="" --to-ports="" --tproxy-mark="" -a="" -e="" -j="" -m="" -n="" -p="" -t="" -v="" 0x01="" 100="" 1="" add="" apply="" chnroute_file="" code="" default="" dev="" does="" dst="" echo="" egrep="" else="" eof="" exist="" fi="" for="" fwmark="" hina="" ip="" iptables="" is="" lo="" loaded="" local="" lookup="" mangle="" mark="" nat="" not="" output="" prerouting="" redirect="" return="" route="" rule="" s="" sed="" set="" shadowsocks_tcp="" shadowsocks_udp="" shadowsocks_udp_mark="" ss-redir="" ss_bypass_set="" ss_redir_port="" table="" tcp="" tproxy="" udp="" was="" x01="">
接着设定Ubuntu的DNS为8.8.8.8,或者使用各种抗DNS污染的方案,清理DNS缓存后就能实现TCP+UDP分流
如何验证UDP转发是有效的呢?可以在ss-redir启动时候使用-v参数调试。

代理分流(关闭)

开启代理分流后,如何恢复为启动ss-redir前的iptables规则呢?
给出完整的关闭脚本
#! /bin/bash

ss_redir_pid=/var/run/shadowsocks.pid

# TCP规则
iptables -t nat -D OUTPUT -p tcp -j SHADOWSOCKS_TCP

iptables -t nat -F SHADOWSOCKS_TCP
iptables -t nat -X SHADOWSOCKS_TCP

# UDP规则
iptables -t mangle -D PREROUTING -p udp -j SHADOWSOCKS_UDP
iptables -t mangle -D OUTPUT -p udp -j SHADOWSOCKS_UDP_MARK

iptables -t mangle -F SHADOWSOCKS_UDP
iptables -t mangle -X SHADOWSOCKS_UDP

iptables -t mangle -F SHADOWSOCKS_UDP_MARK
iptables -t mangle -X SHADOWSOCKS_UDP_MARK

ip route del local default dev lo table 100
ip rule del fwmark 1 lookup 100

# 删除ipset
ipset destroy ss_bypass_set >/dev/null 2>&1

# 杀死进程
kill -9 `cat $ss_redir_pid`

echo "ss-redir is stopped"
最后修改为正常的运营商DNS即可。
另一种方法,是启动ss-redir前使用iptables-save备份,使用完毕后iptables-restore还原。

参考文章

--------------------

利用shadowsocks打造局域网翻墙透明网关











安装配置dnsmasq

sudo apt-get install dnsmasq
no-resolv
server=127.0.0.1#5354
sudo service dnsmasq start

安装配置ChinaDNS

./configure && make
src/chinadns -m -c chnroute.txt 
sudo cp ./src/chinadns /usr/local/bin/
#!/bin/sh
### BEGIN INIT INFO
# Provides:          chinadns
# Required-Start:    $network $local_fs $remote_fs $syslog
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start ChinaDNS at boot time
### END INIT INFO### Begin Deploy Path
# Put this file at /etc/init.d/
### End Deploy PathDAEMON=/usr/local/bin/chinadns
DESC=ChinaDNS
NAME=chinadns
PIDFILE=/var/run/$NAME.pidtest -x $DAEMON || exit 0case "$1" in
  start)
    echo -n "Starting $DESC: "
    $DAEMON \
        -c /etc/chinadns/chnroute.txt \
 -m \
        -p 5354 \
 -s 114.114.114.114,127.0.0.1:5300 \
        1> /var/log/$NAME.log \
        2> /var/log/$NAME.err.log &
    echo $! > $PIDFILE
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    kill `cat $PIDFILE`
    rm -f $PIDFILE
    echo "$NAME."
    ;;
  restart|force-reload)
    $0 stop
    sleep 1
    $0 start
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
esacexit 0
sudo service chinadns start #启动chinadns
sudo service chinadns restart #重启chinadns
sudo service chinadns stop #停止chinadns

安装配置shadowsocks-libev(含有ss-redir以及ss-tunnel)

sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
sudo apt-get update
sudo apt install shadowsocks-libev
{
    "server":"111.111.111.111",
    "server_port":8388,
    "local_address":"0.0.0.0",
    "local_port":1080,
    "password":"password",
    "timeout":60,
    "method":"aes-256-cfb",
    "mode": "tcp_and_udp"
}
nohup ss-redir -c /etc/shadowsocks-libev/config.json &
nohup ss-tunnel -s 111.111.111.111 -p 8388 -b 0.0.0.0 -l 5300 -k password -m aes-256-cfb -L 8.8.8.8:53 -u &

开启转发

net.ipv4.ip_forward=1
sysctl -p

配置iptables和ipset

curl -sL http://f.ip.cn/rt/chnroutes.txt | egrep -v '^$|^#' > cidr_cn
sudo ipset -N cidr_cn hash:net
for i in `cat cidr_cn`; do echo ipset -A cidr_cn $i >> ipset.sh; done
chmod +x ipset.sh && sudo ./ipset.sh
rm -f ipset.cidr_cn.rules
sudo ipset -S > ipset.cidr_cn.rules
sudo cp ./ipset.cidr_cn.rules /etc/ipset.cidr_cn.rules
iptables -t nat -N shadowsocks# 保留地址、私有地址、回环地址 不走代理
iptables -t nat -A shadowsocks -d 0/8 -j RETURN
iptables -t nat -A shadowsocks -d 127/8 -j RETURN
iptables -t nat -A shadowsocks -d 10/8 -j RETURN
iptables -t nat -A shadowsocks -d 169.254/16 -j RETURN
iptables -t nat -A shadowsocks -d 172.16/12 -j RETURN
iptables -t nat -A shadowsocks -d 192.168/16 -j RETURN
iptables -t nat -A shadowsocks -d 224/4 -j RETURN
iptables -t nat -A shadowsocks -d 240/4 -j RETURN# 以下IP为局域网内不走代理的设备IP
iptables -t nat -A shadowsocks -s 192.168.2.10 -j RETURN# 发往shadowsocks服务器的数据不走代理,否则陷入死循环
# 替换111.111.111.111为你的ss服务器ip/域名
iptables -t nat -A shadowsocks -d  111.111.111.111 -j RETURN    # 大陆地址不走代理,因为这毫无意义,绕一大圈很费劲的
iptables -t nat -A shadowsocks -m set --match-set cidr_cn dst -j RETURN# 其余的全部重定向至ss-redir监听端口1080(端口号随意,统一就行)
iptables -t nat -A shadowsocks ! -p icmp -j REDIRECT --to-ports 1080# OUTPUT链添加一条规则,重定向至shadowsocks链
iptables -t nat -A OUTPUT ! -p icmp -j shadowsocks
iptables -t nat -A PREROUTING ! -p icmp -j shadowsocks

设置网关的默认网关

route del default
route add default gw 192.168.2.1 p2p1

设置路由器的DNS和DHCP网关

参考文章


from https://medium.com/@oliviaqrs/%E5%88%A9%E7%94%A8shadowsocks%E6%89%93%E9%80%A0%E5%B1%80%E5%9F%9F%E7%BD%91%E7%BF%BB%E5%A2%99%E9%80%8F%E6%98%8E%E7%BD%91%E5%85%B3-fb82ccb2f729
----------

在路由器上部署透明proxy

注意:以下内容在Netgear R7000 xwrt-merlin上经过测试。openwrt类似,还有更易用的LuCI图形化配置
思路:chinadns作为dnsmasq的上游,通过ss-tunnel查询国外dns服务器分辨投毒。利用iptables分流请求,ipset中储存国内IP地址与本地和保留地址,符合条件的直连,其余通过ss-redir转发至VPS

1. 配置entware环境

准备一个U盘,格式化为ext3(R7k merlin不支持ext4)。打开路由器的jffs。打开路由器的SSH,登录后:
entware-setup.sh​

​更新:
opkg update
opkg upgrade
​安装sftp服务器便于文件传输:
opkg install openssh-sftp-server
安装​lsof用于查看占用端口:
opkg install lsof
安装所需软件:
opkg install shadowsocks-libev-ss-redir
opkg install shadowsocks-libev-ss-tunnel
opkg install simple-obfs
opkg install chinadns
opkg install rng-tools // *obfs插件若提示收集不到足够的随机数,可安装rng-tools包

2. 配置SS​与chinadns

测试redir是否能够正常工作:
ss-redir -s [VPS的IP地址] -p [服务器端口号,e.g. 8086] -b 0.0.0.0 -l [本地端口号,e.g. 1080] -k [密码,e.g. pass.123] -m chacha20-ietf-poly1305 -t 60 -u --plugin obfs-local --plugin-opts "obfs=tls;obfs-host=cloudfront.net"

redir​启动脚本:
安装后默认生成配置文件 S22shadowsocks 于 /opt/etc/init.d 目录下,编辑其中内容
PROCS=ss-local 改为 PROCS=ss-redir​
​redir配置json:
{
    "server": "[VPS的IP地址]",
    "server_port": "[服务器端口号,e.g. 8086]",
    "local_address": "0.0.0.0",
    "local_port": "[本地端口号,e.g. 1080]", // 此处监听端口是转发流量的,记作portA
    "password": "[密码,e.g. pass.123]",
    "method": "chacha20-ietf-poly1305",
    "timeout": 60,
    "mode": "tcp_and_udp",
    "plugin": "obfs-local",
    "plugin_opts": "obfs=tls;obfs-host=cloudfront.net"
}

​tunnel​启动脚本:
直接复制一份 S22shadowsocks 的脚本,编辑其中内容
PROCS=ss-redir 改为 PROCS=ss-tunnel
tunnel​配置json:
{
    "server": "[VPS的IP地址]",
    "server_port": "[服务器端口号,e.g. 8086]",
    "local_address": "0.0.0.0",
    "local_port": "[本地端口号,e.g. 1088]", // 此处监听端口是为chinadns服务的,记作portB
    "password": "[密码,e.g. pass.123]",
    "method": "chacha20-ietf-poly1305",
    "tunnel_address": "8.8.8.8:53",
    "mode": "tcp_and_udp",
    "plugin": "obfs-local",
    "plugin_opts": "obfs=tls;obfs-host=cloudfront.net"
}

chinadns启动脚本:
安装后默认生成配置文件 S56chinadns 于 /opt/etc/init.d 目录下,编辑其中内容
在 ARGS= 的后面追加 -s 114.114.114.114,127.0.0.1:[portB] ,114可更换任意国内可用的dns
并记下这里 -p 后的端口号,记作portC
更新chnroute:
curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /opt/etc/chinadns_chnroute.txt

3. 配置iptables分流,储存ipset列表

*可以用bestroutetb生成一个优化过chnroute,这个步骤需要在本地主机或者VPS上进行:
apt-get install npm
npm install -g bestroutetb
bestroutetb -p custom --rule-format=$'%prefix/%length\n' --group-header=$'---%name-start\n' --group-footer=$'---%name-end\n' --group-gateway -f -o /tmp/chnroutes.txt
sed -e '/---vpn-start/,/---vpn-end/d' -e '/^---/d' /tmp/chnroutes.txt > /tmp/tb.txt
生成的tb.txt备用

​在ipset中生成两个直连的列表:
ipset create loprivate hash:net
ipset add loprivate 0.0.0.0/8
ipset add loprivate 10.0.0.0/8
ipset add loprivate 127.0.0.0/8
ipset add loprivate 169.254.0.0/16
ipset add loprivate 172.16.0.0/12
ipset add loprivate 192.168.0.0/16
ipset add loprivate 224.0.0.0/4
ipset add loprivate 240.0.0.0/4
以及:
ipset create chnip hash:net
while read rule; do (ipset add chnip $rule); done < /opt/etc/chinadns_chnroute.txt // *或者tb.txt
​并保存:
ipset save > /opt/etc/saved.ipset

​配置iptables:
​iptables -t nat -N SHADOWSOCKS
​iptables -t nat -A SHADOWSOCKS -d [VPS的IP地址] -j RETURN
iptables -t nat -A SHADOWSOCKS -m set --match-set loprivate dst -j RETURN
iptables -t nat -A SHADOWSOCKS -m set --match-set chnip dst -j RETURN
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports [portA]

4. 启动服务

使用脚本:
/opt/etc/init.d/[ss-redir脚本] start
/opt/etc/init.d/[ss-tunnel脚本] start
/opt/etc/init.d/[chinadns脚本] start
然后分别检查一下是否报错:
/opt/etc/init.d/[脚本] check
如果显示dead,一般是PROCS中名称有误,或者是端口被占用需要更换,也可能是配置文件语法错(漏了逗号?)
检查端口:
lsof -i |grep [端口号]

​配置dnsmasq:
编辑 /etc/dnsmasq.conf
最后添加两行:
no-resolv
server=127.0.0.1#[portC]
并重启dnsmasq​​

​使更改生效:
iptables -t nat -A PREROUTING -p tcp --dport 21:5000 -j SHADOWSOCKS

至此已实现分流与转发​

5. 配置路由器的重启自动恢复

在 /jffs/scripts/ 下的 service-start 脚本最后添加内容:
ipset restore < /opt/etc/saved.ipset
iptables -t nat -N SHADOWSOCKS
​iptables -t nat -A SHADOWSOCKS -d [VPS的IP地址] -j RETURN
iptables -t nat -A SHADOWSOCKS -m set --match-set loprivate dst -j RETURN
iptables -t nat -A SHADOWSOCKS -m set --match-set chnip dst -j RETURN
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports [portA]
iptables -t nat -A PREROUTING -p tcp --dport 21:5000 -j SHADOWSOCKS​

新建 dnsmasq.postconf ,内容:
#!/bin/sh
CONFIG=$1
source /usr/sbin/helper.sh
pc_append "no-resolv" $CONFIG
pc_append "server=127.0.0.1#[portC]" $CONFIG
并赋予权限:
chmod a+rx /jffs/scripts/*

Reference:

https://icymind.com/learn-from-gfw/
https://gist.github.com/wen-long/8644243
https://blog.microdog.me/2016/06/28/Speed-Up-Network-Accessing-To-Overseas-Services-On-Your-Server/
http://www.q2zy.com/articles/2015/11/04/router-configuration-3/
https://xufooo.ml/2016/06/zybo%e5%bc%80%e5%8f%91%e6%9d%bflinux%e4%b8%8b%e9%80%8f%e6%98%8e%e4%bb%a3%e7%90%86fq%e4%bb%a5%e5%8f%8a%e5%8e%bb%e5%9b%bd%e5%86%85%e5%b9%bf%e5%91%8a/
https://zzz.buzz/zh/gfw/2016/02/16/deploy-shadowsocks-on-routers/
https://cokebar.info/archives/664
https://github.com/goodbest/Merlin-SS-config
https://github.com/YtnbFirewings/asus-merlin-cross-the-gfw
https://www.bjwf125.com/?p=9
https://fooy.github.io/blog/2016/06/18/setup-transparent-proxy-on-r7000/