标签 youtube 下的文章

谷歌的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!