标签 shadowsocks 下的文章

Routeros基于shadowsocks的国际多线分流

以下内容未完全实践。

一般iplc线路机场都会提供多条不通地域的线路,比如京德,沪美,沪日,深港,深新等。
以上每条线路基本都是物理上的最优线路,比如京德线路可以做到北京到欧洲120ms左右,而通过大家常用的香港出口到欧洲的话大部分是绕道美国,少部分走东南亚中东进入欧洲,前者需要250ms+,后者150ms+,还有对于大陆北方用户来说,通过沪美线路到美国比通过香港出口到美国延迟要少30ms以上。
所以如果能充分利用这些线路,能大大优化翻墙体验,自己当宽带运营商,想怎么走就怎么走。

要实现多出口分流,需要用到策略路由,以下以routeros为主路由,openwrt为旁路由,使用深港作默认线路,欧洲走京德,北美走沪美。

首先需要获取世界各地ip地址,比如欧洲都有哪些IP地址,这些地址走京德线路,北美都有哪些ip,需要走沪美线路等,我在之前文章routeros配置vpn分流大陆ip 中介绍过怎么获取大陆ip地址列表,可以通过类似方法获得。由于是分国别IP,比如欧洲列表需要合并各国IP,减少条目,加快路由查询效率。此处为难点,涉及到很多问题,比如土耳其的IP不是欧洲,但是走京德线路比深港快,对比来说,俄罗斯远东ip走京德的话会绕很长的回头路,所以IP地址的界线在哪,怎么优化,由于合并了IP地址怎么后期添加等等,所以一个这是个难点。

使用三个openwrt做旁路由,openwrt-1使用京德线路,openwrt-2使用沪美线路,openwrt-0使用深港线路

配置策略路由,目的地址是欧洲IP转发给openwrt-1,目的地址是北美IP转发给openwrt-2,目的地址是大陆ip的走默认网关,其他IP地址转发给openwrt-0

还有dns问题,怎么高效的使用全球cdn

在此抛砖引玉,欢迎大家交流分享。

openvpn over shadowsocks避免机场安全隐患

2019年底开始翻墙变得越来越难,基础宽带是联通,穿墙线路一直使用的阿里云香港线路在晚上高峰期qos限速,延迟增加,本来200m带宽严重的时候甚至掉到各位数。

这时候不得不考虑一直续费而没用的备用机场了,由于没有出口的控制权,机场理论上来说可以看到所有非加密流量内容,个人对此比较在意,但是又觊觎机场的iplc线路(阿里云cen线路),不受墙影响,不受时间段qos,曾经询问过价格,被每月几万劝退了。

那么退而求其次,利用机场的shadowsocks作外层隧道,使用openvpn或其他tcp的vpn连接gcp的vps,保证本地到出口vps的链路是加密,就既能利用iplc线路又保证安全,唯一问题是tcp over tcp受网络波动影响很大,具体请谷歌之。

下面是使用环境,本地routeros v6,本地openwrt with ShadowSocksR Plus+ ,某阿里云中转机场,gcp香港routeros v6

1,在gcp香港routeros开启openvpn服务器,并打开gcp防火墙相关端口,参考Routeros配置openvpn服务器和客户端
2,配置好openwrt上机场信息,保证能通过机场翻墙
3,本地routeros配置gcp香港服务器ip路由通过openwrt,参考Routeros配置使用openwrt作旁路由
4,配置本地routeros的openvpn客户端,参考Routeros配置openvpn服务器和客户端
5,配置gcp香港routeros通过openvpn回程路由,如果本地routeros使用masquerade等nat时不需要配置,关于masquerade相关参考routeros的默认nat尽量不要用masquerade
6,配置本地routeros的ip分流,参考routeros配置vpn分流大陆ip

gfw的whitelist结合shadowsocks或kcptun使用效果更佳

先说一下白名单的好处,gfw是实时更新的,说不定上一秒你还能打开的网站,下一秒就被墙里,直接开全局国内网站打不开或者速度特别慢,白名单是国内网站的名单,白名单里的网站不走代理,其余全部代理,国外没有被墙的网站反正速度都不快,我自己感觉打开速度差不多,白名单缺点是费vps流量,原来没有在黑名单的国外网站是不走vps流量的,现在走流量了。但是vps流量也不贵,我自己测算,不下载大文件情况下,一个人算上看油管视频,一个月500g流量是够用的,所以这个缺点是可以忽略的。

下面是设置方法
chrome安装插件SwitchyOmega,创建pac模式代理,填入pac下载路径

https://raw.githubusercontent.com/breakwa11/gfw_whitelist/master/whiteiplist.pac

如果代理地址不是本机1080,删除pac url,直接在下面框里修改即可
添加pac配置
修改pac

macos下,在网络设置高级的代理里面,自动代理,填入pac下载路径,注意safari不能识别socks5关键字,添加一个socks即可,如下

var wall_proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080;";

ios系统也可以使用macos配置方法,wifi设置里http代理,自动填入上面的下载地址

pac下载服务器可以使用python的simpleserver,pac文件放到当前目录,运行

python -m SimpleHTTPServer 8080



参考:https://github.com/breakwa11/gfw_whitelist

谷歌的tcp-bbr拥堵算法,shadowsocks神器加buff

昨晚测试了tcp-bbr拥堵算法,效果看起来还是挺不错的。油管4k很稳定,8k可以播放。使用说明如下

1安装有bbr算法的内核

wget -O linux-image-4.9.0-amd64.deb http://kernel.ubuntu.com/~kernel-ppa/\

mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

dpkg -i linux-image-4.9.0-amd64.deb

2删除原来内核

dpkg -l|grep linux-image | awk '{print $2}' | grep -v 'linux-image-4.9.0-040900-generic'#列出原有内核
apt-get purge 旧内核名称#删除旧内核
update-grub #更新grub
reboot

3开启bbr

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p#使配置生效

4查看是否生效

sysctl net.ipv4.tcp_available_congestion_control

lsmod | grep bbr

5关闭bbr

sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
sysctl -p
reboot

6shadowsocks一键安装脚本

allinone版

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/\

shadowsocks_install/master/shadowsocks-all.sh

chmod +x shadowsocks-all.sh
./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log

python版

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/\

shadowsocks_install/master/shadowsocks.sh

chmod +x shadowsocks.sh
./shadowsocks.sh 2>&1 | tee shadowsocks.log

7说明

由于需要更换内核,需要kvm或xen架构的vps,openvz的不行,经测试,linode的开启失败,vultr的成果。
参考:https://www.dou-bi.co/wlzy-15/https://teddysun.com/486.html

树莓派使用kcptun搭建透明代理,看1080p油管

之前写过使用shadowsocks搭建透明代理,由于shadowsocks使用的是tcp连接,而tcp连接速度比较好的服务器如阿里云香港都比较贵,基本看不起油管,最近比较火的kcptun是一个使用udp的加速代理,自带加密,只要不扩散基本没有隐私泄露危险,这个教程与shadowsocks基本相似。
大致原理:iptables转发出国ip数据到redsocks,然后redsocks转发给kcptun-client,kcptun-client发给kcptun-server,kcptun-server转发给要访问的墙外服务器。

1.解决dns解析被污染

1.安装chinadns和dnsmasq

git clone https://github.com/clowwindy/ChinaDNS
cd ChinaDNS
./configure && make
make install
apt-get install dnsmasq

dnsmasq是dns缓存服务器,目的是减少再次查询域名时间,首次dns查询可能200ms以上,再次查询只需要10ms。

2.编辑chinadns配置文件
添加开机启动脚本 /etc/init.d/chinadns
nano /etc/init.d/chinadns

#!/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

DAEMON=/usr/local/bin/chinadns
DESC=ChinaDNS
NAME=chinadns
PIDFILE=/var/run/$NAME.pid

test -x $DAEMON || exit 0

case "$1" in start)
    echo -n "Starting $DESC: "
    $DAEMON \
        -m \
        -c /usr/local/share/chnroute.txt \
        -p 15353 \
        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
    ;;
esac

exit 0

其中,-m 参数表示启用压缩指针(DNS pointer mutation),-c 指定 chnroute 文件,-p 指定监听的端口,没有指定将使用 dns 默认的 53 端口,-s 指定下游 dns 服务器。
更新chnroute文件,

cd /usr/local/share/
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)) }' > chnroute.txt

可以用 crontab 添加定时任务,每周更新一次。
3.编辑dnsmasq配置文件

cd /etc/dnsmasq.s/
nano dnsmasq.conf
no-resolv
server=127.0.0.1#15353

2.数据穿过防火墙

下载对应的安装包,解压 https://github.com/xtaci/kcptun/releases
编辑配置文件client.json

{

"localaddr": ":8888",
"remoteaddr": "x.x.x.x:port",
"key": "password",
"crypt": "aes",
"mode": "fast2",
"conn": 1,
"autoexpire": 60,
"mtu": 1350,
"sndwnd": 128,
"rcvwnd": 1024,
"datashard": 5,
"parityshard": 5,
"dscp": 46,
"nocomp": false,
"acknodelay": false,
"nodelay": 0,
"interval": 40,
"resend": 0,
"nc": 0,
"sockbuf": 4194304,
"keepalive": 10 }

使用命令 client_darwin_amd64 -c client.json &启动,并把命令添加到rc.local实现开机启动

kcptun-server端安装方法见https://github.com/clangcn/kcp-server

3.解决墙内外数据分流

1.安装redsocks,和ipset

配置redsocks

redsocks {

local_ip = 0.0.0.0;
local_port = 12345; 
ip = 127.0.0.1;
port = 8888; }

配置完后记得重启redsocks

配置ipset

导入chnroutes

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)) }' > chnroute.txt

ipset create chnroute hash:net

cat chnroute.txt xargs -I ip ipset add chnroute ip

ipset save chnroute > /etc/chnroute.ipset #保存ipset
ipset restore < /etc/chnroute.ipset #导入ipset

以上可以设置一个定时任务每周刷新一次chnroutes

2.配置iptabels
可以先iptables-save > iptables,然后编辑iptables,再iptables-restore < iptables
添加如下

-A PREROUTING -p tcp -j SHADOWSOCKS
-A OUTPUT -p tcp -j SHADOWSOCKS
-A SHADOWSOCKS -d x.x.x.x/32 -j RETURN #kcptun-server ip
-A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
-A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
-A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
-A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
-A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
-A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
-A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
-A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
-A SHADOWSOCKS -m set --match-set chnroute dst -j RETURN
-A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345

最后在rc.local添加iptables-restore < iptables,开机加载防火墙规则

4.上机测试

配置客户端网关和dns为树莓派地址,打开浏览器测试墙外网站

如果有问题,检查树莓派上几个服务配置完后是否重启,
使用ping,traceroute,dig,telnet等命令排查

Have a good luck!