yjiang's cake

使用haproxy加速ssr

场景

  • 一台非直连cn的vps, 搭建了ssr
  • 一台内网可运行haproxy的机器
  • 家里联通线路访问ssr速度尚可
  • 公司/非联通线路访问ssr速度不佳

方案

  • 在家里路由器搭建haproxy, 使用haproxy反代ssr:
公司 <===> 家里(haproxy) <===> VPS

安装及haproxy配置

1.安装haproxy

此处使用entware-ng环境运行haproxy,需要根据实际情况自行安装haproxy

opkg update && opkg install haproxy

2.创建配置文件ssr.cfg

global
    #ulimit-n  51200
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /root
    pidfile /tmp/var/run/haproxy.pid
    user yjiang                      #自己运行haproxy的用户
    daemon                           #以后台形式运行haproxy
defaults
    log     global
    mode    tcp
    option  dontlognull
    option redispatch
    timeout http-request 10s
    timeout queue 1m
    timeout connect 2s
    timeout http-keep-alive 10s
    timeout check 10s
    timeout client 50000
    timeout server 50000
listen ssr
    bind *:9988                      #反代后ssr的端口
    mode tcp
    server ssr1 yjiang.cn:9988       #自己的ssr服务器及端口

3.启动haproxy

haproxy -f ssr.cfg

梅林固件User Script脚本创建方式

tips

  1. 可能需要手动开放haproxy绑定的端口, 例如上面配置文件需要开启9988
iptables -I INPUT -p tcp --dport 9988 -j ACCEPT
iptables-save
  1. 1024以内的端口是需要root权限的
  2. 从公司连接haproxy反代后的ssr服务时, 依旧需要vps上ssr服务的用户名/密码/加密协议.

linux上用strongswan搭建ikev2协议vpn

测试平台 :DigitalOcean VPS ubuntu14.04 x64, strongswan5.2.2

运行以下命令请使用root权限

一:安装strongswan

由于ubuntu软件仓库中strongswan版本较低,因此从官网源码编译安装

apt-get install build-essential     #编译环境
aptitude install libgmp10 libgmp3-dev libssl-dev pkg-config libpcsclite-dev libpam0g-dev     #编译所需要的软件
wget http://download.strongswan.org/strongswan-5.2.2.tar.bz2
tar -jxvf strongswan-5.2.2.tar.bz2 &amp;&amp; cd strongswan-5.2.2
./configure --prefix=/usr --sysconfdir=/etc  --enable-openssl --enable-nat-transport --disable-mysql --disable-ldap  --disable-static --enable-shared --enable-md4 --enable-eap-mschapv2 --enable-eap-aka --enable-eap-aka-3gpp2  --enable-eap-gtc --enable-eap-identity --enable-eap-md5 --enable-eap-peap --enable-eap-radius --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-pseudonym --enable-eap-simaka-reauth --enable-eap-simaka-sql --enable-eap-tls --enable-eap-tnc --enable-eap-ttls
make&& make install

二:生成、安装证书

win7+和Android、wp8.1等平台的VPN客户端走ikev2协议,需要制作相应的证书

  • 1.先生成根证书
ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=CN, O=strongSwan, CN=strongSwan CA" --ca --outform pem > caCert.pem
  • 2.然后是服务器端的证书
ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=strongSwan, CN=VPS的公网ip或域名" --san="VPS的公网ip或域名" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
  • 3.客户端的证书
ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=strongSwan, CN=client" --outform pem > clientCert.pem

生成的客户端证书 clientCert.pem 不能直接导入到win7+或Anroid设备中,需先转换为.p12格式。执行后会提示要设置证书使用密码,可以设置一下密码也可以直接回车(密码为空)

openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "strongSwan CA" -out clientCert.p12
  • 4.安装证书
cp caCert.pem /etc/ipsec.d/cacerts/
cp serverCert.pem /etc/ipsec.d/certs/
cp serverKey.pem /etc/ipsec.d/private/

客户端安装caCert.pem与clientCert.pem(clientCert.p12),下载文件可使用ftp软件,或使用cat caCert.pemcat clientCert.pem命令,将打印出的内容直接复制到本地即可。

三:配置strongswan

  • 1: /etc/ipsec.conf
config setup
    strictcrlpolicy = yes
    cachecrls = yes
    uniqueids = yes    #允许多设备同时在线

conn %default
        left=%any
        leftsubnet=0.0.0.0/0
        right=%any
        rightsourceip=10.11.1.0/24
        rightdns=8.8.8.8,8.8.4.4

conn ikev1
    keyexchange=ikev1
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
    auto=add

conn windows7
    keyexchange=ikev2
    ike=aes256-sha1-modp1024!
    rekey=no
    leftauth=pubkey
    leftcert=server.cert.pem
    rightauth=eap-mschapv2
    rightsourceip=10.31.2.0/24
    rightsendcert=never
    rightdns=8.8.8.8,8.8.4.4
    eap_identity=%any
    auto=add
  • 2: /etc/ipsec.secrets
: RSA server.pem
: PSK "foo"                 #设置的证书密码
username : XAUTH "passwd"
username2 : EAP "passwd"    #windows用户

对于windowsphone8.1,在客户端输入的用户名发送到服务器显示为设备名称\用户名的形式,故认证需加上设备名称,设备名称在设置-关于-手机信息 中查看

  • 3: /etc/strongswan.conf
#加入分配的dns
charon {
    dns1 = 8.8.8.8
    dns2 = 208.67.222.222
}

四:配置 Iptables 转发

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT

#开启转发
vi /etc/sysctl.conf
#打开注释
net.ipv4.ip_forward = 1
#执行
sysctl -p

iptables -t nat -A POSTROUTING -s 10.11.1.0/24 -o eth0 -j MASQUERADE  #地址与上面地址池对应
iptables -A FORWARD -s 10.11.1.0/24 -j ACCEPT     #同上
#为避免VPS重启后NAT功能失效,可以把如上5行命令添加到 /etc/rc.local 文件中,添加在exit那一行之前即可。

五:启动strongswan

  • 后台运行:
ipsec start 
  • 滚动日志:
ipsec start --nofork

参考链接:

更简单的一键脚本

https://github.com/hwdsl2/setup-ipsec-vpn/

vps使用net-speeder进行连接加速

项目地址

https://code.google.com/p/net-speeder/

作用与影响

作者说了:在高延迟不稳定链路上优化单线程下载速度;原理就是多次发包,所以弊端很明显,流量翻倍.
但是对于我等小水管,不痛不痒,一个月500G能用1/10就不错了.

安装及使用

#安装
apt-get install libnet1 libnet1-dev libpcap0.8 libpcap0.8-dev
wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz -O -|tar xz
cd net_speeder && sudo sh build.sh -DCOOKED
sudo cp ./net_speeder usr/local/bin/
#使用("ip"不是IP地址,指所有协议,也可以单独指定"TCP"等)
sh_speeder <网卡名> "ip"
#扔后台运行吧
nohup net_speeder venet0 "ip" > /dev/null 2>&1 &

注意事项

  • 编译的时候(执行sh ./build.sh时)一定要加参数 -DCOOKED ;不然会一直报 libnet_write_raw_ipv4(): -1 bytes written (Message too long)错误.

128M国外VPS使用小记

本着环(没)保(钱)的原则,脱离DigitalOcean的苦海,从RAMNOD入手了最低端,便宜到一年只需要13.44刀(合人民币84块钱)的128M小内存VPS. 心想128M挂个博客外加偶尔翻翻墙,也够用了.

一、系统优化

目标:尽量减少内存占用

1. nginx php

ramnode初始的系统说实话,已经优化的不错了,干净的系统只占用了40M内存;只要把nginx、php-cgi、mysql拿apt-get安装好就可以了.

apt-get install nginx php5 php5-cgi spawn-fcgi mysql-server php5-mysql

安装好以后,修改nginx php-cgi配置,只保留1个进程,以减少内存的占用

2. nginx.conf

user www-data;
worker_processes 2;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
    use epoll;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 2;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/*;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

3. 使用spwan-fcgi启动php-cgi

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 4 -f /usr/bin/php5-cgi -u www-data

4. 安装varnish减少(nginx php mysql)对内存的压力,针对wordpress对varnish进行配置;可参照(VPS折腾笔记6 – varnish)

backend cake {
    .host = "yjiang.tk";
    .port = "8000";
}
sub vcl_recv {
    if (
            req.http.host ~ "^yjiang.tk" 
            && 
            !(req.url ~ "shot.jpg$")
            && 
            !(req.url ~ "\/other\/*")
        ) {
        set req.backend = cake;
        if (!(req.url ~ "wp-(login|admin)")) {
            unset req.http.cookie;
        }
    }
}
sub vcl_deliver {   
    set resp.http.x-hits = obj.hits ; 
    if (obj.hits > 0) { 
        set resp.http.X-Cache = "hit cache"; 
    } 
    else { 
        set resp.http.X-Cache = "miss cache"; 
    } 
}
sub vcl_fetch {
    if (req.http.host ~ "^yjiang.tk") {
        set beresp.grace = 60m;
        if (!(req.url ~ "wp-(login|admin)")) {
            unset beresp.http.set-cookie;
        }
    }
}

整套环境搭完,在没有访问的情况下基本占用90M左右的内存,还是比较理想的.此时系统上算是完工了.(点此查看系统信息)

二、速度优化(由于VPS在地球的另一端,访问速度那自然不用说,肯定是比国内慢很多;所以另一件事就是尽量让访问速度更快.)

  1. 首先想到的就是尽量把静态资源使用国内免费的CDN,这样既能提高访问速度,又能减小服务器压力,一举两得. 使用七牛的wordpress插件把所有资源转移到国内qiniu.

  2. 因为使用了varnish来做前端缓存,不用再进行php解析+数据库,不但对大访问量的负载有帮助,速度上也能提高不少. (虽然每天也就几个IP)

  3. 卸载之前的disqus插件,改为多说,使VPS打开的速度进一步提升.

  4. 前端公共库及某些google字体服务选择使用某数字公司提供的CDN服务.

后记: 几个快速重启服务的脚本

php-cgi

#!/bin/bash
`pkill -9 php5-cgi`
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 1 -f /usr/bin/php5-cgi -u www-data

varnish

#!/bin/bash
if [ -z $1 ]
then
    echo "defalut port 88 used"
    port=88
else
    port=$1
fi

pkill varnish

varnishd -f /etc/varnish/default.vcl \
         -s file,/tmp/varnish_cache.data,160M \
         -a 127.0.0.1:$port \
         -w 2

netstat -ntlp | grep varnish

备份数据库

#!/bin/sh
### crontab  ###
#1 4 * * 0 mysqldump -uroot bgjsy | gzip > /home/yjiang/Dropbox/db_backup/bgjsy/bgjsy-`date +\%Y-\%m-\%d`.sql.gz
################
dbfile=/root/db_backup/wordpress-`date +\%Y-\%m-\%d`.sql.gz
mysqldump --user='root' --password='' wordpress | gzip > $dbfile
scp $dbfile yjiang@42.96.185.104:~/Dropbox/db_backup/wordpress/

Copyright © 2016 yjiang's cake

返回顶部